Чт дек 04, 2014 07:07:06
Чт дек 04, 2014 07:09:29
Чт дек 04, 2014 07:23:14
prinv писал(а):Empty Assembly-only Project не оно?
Чт дек 04, 2014 07:55:05
Пн дек 15, 2014 09:20:31
Пн дек 15, 2014 16:36:58
Пн дек 15, 2014 17:36:59
Ser60 писал(а):Касательно векторов прерываний, для их программирования нужно лишь знать как они называются. Эти сведения имеются в INC файлах (в самом их конце) для каждой модели по ссылке в папке, что я приводил выше.
Вт дек 16, 2014 00:21:30
afz писал(а):написал я программу для обслуживания прерывания TA0CCR0, допустим, метка ее T00INT. Ну нашел я в msp430g2553.h что-то, относящееся к этому таймеру:
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_A0_VECTOR ".int09" /* 0xFFF2 Timer0_A CC0 */
И как это знание поможет мне занести в какую-то ячейку из диапазона 0xFFC0-0xFFFC адрес этой подпрограммы?
.sect TIMER0_A0_VECTOR
.short T00INT
afz писал(а):И вообще, что значит это самое .int09, равно, как и
.sect ".reset"
Где это все описано?
afz писал(а):Так что за черная магия, при помощи которой все становится на свои места и где она описана?
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define RESET_VECTOR ".reset" /* 0xFFFE Reset [Highest Priority] */
#else
#define RESET_VECTOR (15 * 1u) /* 0xFFFE Reset [Highest Priority] */
#endif
afz писал(а):.sect появляется, как джинн из бутылки и, почему-то сразу попадает на 0xFFFC. Где это прописано?
MEMORY
{
SFR : origin = 0x0000, length = 0x0010
PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0
PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100
RAM : origin = 0x0200, length = 0x0200
INFOA : origin = 0x10C0, length = 0x0040
INFOB : origin = 0x1080, length = 0x0040
INFOC : origin = 0x1040, length = 0x0040
INFOD : origin = 0x1000, length = 0x0040
FLASH : origin = 0xC000, length = 0x3FE0
INT00 : origin = 0xFFE0, length = 0x0002
INT01 : origin = 0xFFE2, length = 0x0002
INT02 : origin = 0xFFE4, length = 0x0002
INT03 : origin = 0xFFE6, length = 0x0002
INT04 : origin = 0xFFE8, length = 0x0002
INT05 : origin = 0xFFEA, length = 0x0002
INT06 : origin = 0xFFEC, length = 0x0002
INT07 : origin = 0xFFEE, length = 0x0002
INT08 : origin = 0xFFF0, length = 0x0002
INT09 : origin = 0xFFF2, length = 0x0002
INT10 : origin = 0xFFF4, length = 0x0002
INT11 : origin = 0xFFF6, length = 0x0002
INT12 : origin = 0xFFF8, length = 0x0002
INT13 : origin = 0xFFFA, length = 0x0002
INT14 : origin = 0xFFFC, length = 0x0002
RESET : origin = 0xFFFE, length = 0x0002
}
afz писал(а):Напоминаю, это асм, не Си.
Вт дек 16, 2014 08:50:05
Точее, для Си и для асма используется один и тот же набор .h- и, как выяснилось, .com-файлов.Так вот, набор файлов общий, а как возникают какие-то различия в сишной и ассемблерной нотации, используют условную компиляцию, по параметру __ASM_HEADER__.Ser60 писал(а):Понимаю. Но при программировании MSP430 на ассемблере в CCS или IAR можно использовать .h файлы для С.
Честно скажу, читать его мне не хочется. С одной стороны, знаешь один ассемблер - считай, что знаешь все, а я их знал столько, что сейчас и не вспомнишь. Начиная с языка символического кодирования ЭВМ "Минск-22" и ассемблера Системы-360. С другой стороны, читать такие объемы английского текста ради того, чтобы прояснить несколько непонятных мест для меня чересчур, не осилю. Да и не особенно надо, все что меня интересовало, я уже выяснил, остальное же - асм, как асм. Ну, различает в именах малые и большие буквы, ГНУсная мерзость, но что делать - другого все равно нет...Ser60 писал(а):Короче, читайте сначала этот документ - там содержатся ответы по крайней мере на все заданные Вами пока здесь вопросы.
http://www.ti.com/lit/ug/slau131j/slau131j.pdf
Вт дек 16, 2014 18:21:10
afz писал(а):А как ЦПУ на это отреагирует, если вдруг произойдет непредусмотренное прерывание? В смысле, не обидится ли на нечетный адрес команды? Или банально сочтет его тождественным ресету?
Вт дек 16, 2014 19:47:03
Ser60 писал(а):Вопрос законный и правильный. В User's Guide на семейство имеется однозначный ответ на него, а также на вопрос "что будет если процессор встретит неподдерживаемую инструкцию". В первом случае произойдет ошибка доступа к флешу и управление передастся на вектор немаскируемого прерывания по адресу 0xFFFC. Если и там стоит неверный адрес, но программа зациклится. Во втором случае управление передастся по адресу вектора ресета 0xFFFE. В любом случае хорошая практика заполнять ВСЮ таблицу векторов прерывания, поставив в векторах неиспользованных прерываний адрес стандартного обработчика (Default Handler). В процессе отладки в нём можно просто разместить бесконечный цикл, а в реальном устройстве, например, организовать reset МК.
Ser60 писал(а):Минск-22, PHP-11? Да, помню такие во времена молодости Минск мы программировали на военке, а PHP-11 позже на работе. До этого в школе ещё помню работали на БЭСМ-4 в 8-ричных кодах и на перфокартах.
Ser60 писал(а):Если начинаете работать ма MSP430, может Вам больше понравится IDE от IAR. Оно проще, включая определения сегментов, хотя там определения имён тоже по нескольким файлам разбросаны, как и во многих других системах. Ничего в этом страшного нет - просто дело привычки, особенно для Вас с богатым опытом. В целом система IAR менее монстрообразная и работает быстрее. Ассемблерные программы в ней не имеют ограничения на длину прямо "из коробки" даже без всяких "таблеток".
Даташиты? Безусловно. А вот описание асма, ИМХО, не нужно и даром - в основном все понятно, а ежели вдруг возникнет затык, конкретно это место и прочитаю.Ser60 писал(а):Насчет чтения документации - без неё никуда. В том документе, что я выше советовал, внимательно читать Вам наверняка не всё нужно будет, может от силы страниц 50.
Ср дек 17, 2014 02:35:58
afz писал(а):Ну, если ставить один обработчик на всех, то хватит и одного - 0xFFFC (NMI), незаполненные остальные вектора вызовут это самое NMI, и этого вполне достаточно.
Сб янв 10, 2015 22:03:48
Сб янв 10, 2015 22:40:43
Пн янв 12, 2015 08:03:39
uldemir писал(а):разумеется
Пн янв 12, 2015 08:57:45
Пн янв 12, 2015 09:06:11
akl писал(а):Боюсь, что не подойдет. Лучше что-то типа MAX3231
Ср фев 18, 2015 07:58:36
Вс мар 01, 2015 12:07:30