TI MSP430 Launch Pad
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: TI MSP430 Launch Pad
Коллеги, подскажите, плз, как в TI CCS начать новый ассемблерный проект? ЧТо-то потыкался, ничего, кроме C/C++ не предлагает. У AVR в любимой студии все прсто: давишь "новый проект" и тебе на выбор предлагают Atmel AVR Assembler или AVR GCC, а здесь его куда закопали?
Это я разжился таки Launch Pad'ом с 2553, второй чип, правда не пережил доставку, ноги обломали при транспортировке, CCS встала без вопросов, поморгать светодиодом из C-программы - все ОК, а вот до асма достучаться не могу...
Это я разжился таки Launch Pad'ом с 2553, второй чип, правда не пережил доставку, ноги обломали при транспортировке, CCS встала без вопросов, поморгать светодиодом из C-программы - все ОК, а вот до асма достучаться не могу...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Реклама
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: TI MSP430 Launch Pad
Да, блин! Не ожидал, что они это дело спрятали в GCC Project - перепробовал все из File - New, кроме GCC Projecr, был убежден, что это начало проекта именно на GCC, а не на асме!..prinv писал(а):Empty Assembly-only Project не оно?
А как задать конкретный камень? Что-то обшарил всю папочку ti, никаких .h, .inc и т.п. не нашел..
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: TI MSP430 Launch Pad
File -> New -> CCS Project и в открывшемся окне выбрать МК.
Include файлы в папке C:\ti\cccv6\ccs_base\msp430\include
Include файлы в папке C:\ti\cccv6\ccs_base\msp430\include
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: TI MSP430 Launch Pad
А как заполнить таблицу векторов? В пустом проекте, предложенном CCS, есть только
.sect ".reset" ; MSP430 RESET Vector
.short RESET
А дальше как? С АВР-ками я, обычно, делал так: http://radiokot.ru/forum/viewtopic.php? ... 4&start=20 (последнее сообщение), все было нормально. А здесь (в 430) все материалы на один контроллер размазаны по доброму десятку ПДФ-ок, может я и смотрел нужную, но не обратил внимания, а выучить их все, ИМХО, нереально...
.sect ".reset" ; MSP430 RESET Vector
.short RESET
А дальше как? С АВР-ками я, обычно, делал так: http://radiokot.ru/forum/viewtopic.php? ... 4&start=20 (последнее сообщение), все было нормально. А здесь (в 430) все материалы на один контроллер размазаны по доброму десятку ПДФ-ок, может я и смотрел нужную, но не обратил внимания, а выучить их все, ИМХО, нереально...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Реклама
Re: TI MSP430 Launch Pad
Насчет десятка ПДФ-ок, Вы сильно округлили. Документов по каждой модели МК всего 2. Первый - это ДШ на семейство, где описаны общие для всего семейства сведения по периферии и т.п.. Второй - это долумент на конкретную модель, где, в частности, описана распиновка и другие сведения, характерные только для этой модели, например как включить альтернативные функции выводов. Ну и еще в Errata заглянуть не мешает, но это, как правило разовое явление.
Касательно векторов прерываний, для их программирования нужно лишь знать как они называются. Эти сведения имеются в INC файлах (в самом их конце) для каждой модели по ссылке в папке, что я приводил выше.
Касательно векторов прерываний, для их программирования нужно лишь знать как они называются. Эти сведения имеются в INC файлах (в самом их конце) для каждой модели по ссылке в папке, что я приводил выше.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: TI MSP430 Launch Pad
Да? Ну вот, написал я программу для обслуживания прерывания TA0CCR0, допустим, метка ее T00INT. Ну нашел я в msp430g2553.h что-то, относящееся к этому таймеру:Ser60 писал(а):Касательно векторов прерываний, для их программирования нужно лишь знать как они называются. Эти сведения имеются в INC файлах (в самом их конце) для каждой модели по ссылке в папке, что я приводил выше.
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_A0_VECTOR ".int09" /* 0xFFF2 Timer0_A CC0 */
И как это знание поможет мне занести в какую-то ячейку из диапазона 0xFFC0-0xFFFC адрес этой подпрограммы?
И вообще, что значит это самое .int09, равно, как и
.sect ".reset"
Где это все описано? Догадываюсь, что .sect переключает асм на какую-то секцию программы, но в нормальных асмах эти секции должны быть где-то первично объявлены (определены, декларированы...) а здесь этот .sect появляется, как джинн из бутылки и, почему-то сразу попадает на 0xFFFC. Где это прописано? Ни в msp430g2553.h, ни в msp430.h этого не делается, других вызовов .h-файлов, кроме cdecl msp430.h (точно эту строчку не помню, CCS у меня на работе стоит) нет. И в этом msp430.h единственное действие - вызов соответствующего .h-файла, в моем случае - msp430g2553.h, и все. Так что за черная магия, при помощи которой все становится на свои места и где она описана?
Напоминаю, это асм, не Си. Здесь на каждый кусочек памяти (байт, слово, несколько слов) я сам должен что-то написать, из воздуха ничего не должно появляться!..
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: TI MSP430 Launch Pad
Очень просто: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.reset - это просто алиас (другое имя) для адреса RESET_VECTOR, определенного в .h файле. Можете использовать какое Вам более нравится. Описание директив ассемблера можно найти в Help -> Help Contents и в открывшемся окне напечатать "assembler" и читать что нужно. Вы ранее работали с определениями сегментов? Если нет - почитайте документацию на CCS в help-е, в частности там найдете, что директива .sect - один из способов определения сегмента.afz писал(а):И вообще, что значит это самое .int09, равно, как и
.sect ".reset"
Где это все описано?
Вот выжимка из файла msp430g2553.h: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Это прописано в файле lnk_msp430g2553.cmd из той-же папки. Вот выжимка оттуда, касательно распределения памяти в этой модели МК: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
}Понимаю. Но при программировании MSP430 на ассемблере в CCS или IAR можно использовать .h файлы для С. Короче, читайте сначала этот документ - там содержатся ответы по крайней мере на все заданные Вами пока здесь вопросы.afz писал(а):Напоминаю, это асм, не Си.
http://www.ti.com/lit/ug/slau131j/slau131j.pdf
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: TI MSP430 Launch Pad
Точее, для Си и для асма используется один и тот же набор .h- и, как выяснилось, .com-файлов.Так вот, набор файлов общий, а как возникают какие-то различия в сишной и ассемблерной нотации, используют условную компиляцию, по параметру __ASM_HEADER__.Ser60 писал(а):Понимаю. Но при программировании MSP430 на ассемблере в CCS или IAR можно использовать .h файлы для С.
Я до этого ни разу не имел дела с ГНУсью, а в нормальных асмах ВСЕ задается в исходнике, а не спрятано где-то в ключах и прочих невидимых хитростях. Тому же AVR: указал в начале исходника
.include <m8.inc>
и все, асм знает, что работаем с Мегой-8. А в этой ГНУси, блин, все через *опу. Поэтому-то я поначалу и не обратил внимания на файлы .com. То есть, конечно, я заглянул в парочку из них, но чего-то специфически ассемблерного там не обнаружил и решил, что эти файлы только для Си. Ну, и забыл про них. Более того, вчера вечером, сочиняя ответ и очередной набор вопросов, я таки нашел файл msp430g2553.com, заглянул в него и лишний раз убедился, что ничего специфически ассемблерного там нет. А вот файл lnk_msp430g2553.com, как оказалось, как раз для асма. Но он мне не попался под руку. Попадись он, так я бы, скорее всего, и сам бы разобрался. Но увы, сразу он мне не попался, откуда и наша дискуссия.
В общем, спасибо!
Честно скажу, читать его мне не хочется. С одной стороны, знаешь один ассемблер - считай, что знаешь все, а я их знал столько, что сейчас и не вспомнишь. Начиная с языка символического кодирования ЭВМ "Минск-22" и ассемблера Системы-360. С другой стороны, читать такие объемы английского текста ради того, чтобы прояснить несколько непонятных мест для меня чересчур, не осилю. Да и не особенно надо, все что меня интересовало, я уже выяснил, остальное же - асм, как асм. Ну, различает в именах малые и большие буквы, ГНУсная мерзость, но что делать - другого все равно нет...Ser60 писал(а):Короче, читайте сначала этот документ - там содержатся ответы по крайней мере на все заданные Вами пока здесь вопросы.
http://www.ti.com/lit/ug/slau131j/slau131j.pdf
Плюсик я нажал.
Кстати, как я понимаю, незаполненные вектора будут содержать 0xFFFF. А как ЦПУ на это отреагирует, если вдруг произойдет непредусмотренное прерывание? В смысле, не обидится ли на нечетный адрес команды? Или банально сочтет его тождественным ресету?
У любимой PDP-11 в этом пункте, помнится, было разночтение - "большие" машинки делали Trap to 4, если не врет мой склероз, а малые, в смысле LSI-11 (у нас - Э-60) просто игнорировали младший бит адреса. А как 430?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: TI MSP430 Launch Pad
Вопрос законный и правильный. В User's Guide на семейство имеется однозначный ответ на него, а также на вопрос "что будет если процессор встретит неподдерживаемую инструкцию". В первом случае произойдет ошибка доступа к флешу и управление передастся на вектор немаскируемого прерывания по адресу 0xFFFC. Если и там стоит неверный адрес, но программа зациклится. Во втором случае управление передастся по адресу вектора ресета 0xFFFE. В любом случае хорошая практика заполнять ВСЮ таблицу векторов прерывания, поставив в векторах неиспользованных прерываний адрес стандартного обработчика (Default Handler). В процессе отладки в нём можно просто разместить бесконечный цикл, а в реальном устройстве, например, организовать reset МК.afz писал(а):А как ЦПУ на это отреагирует, если вдруг произойдет непредусмотренное прерывание? В смысле, не обидится ли на нечетный адрес команды? Или банально сочтет его тождественным ресету?
Минск-22, PHP-11? Да, помню такие во времена молодости
Если начинаете работать ма MSP430, может Вам больше понравится IDE от IAR. Оно проще, включая определения сегментов, хотя там определения имён тоже по нескольким файлам разбросаны, как и во многих других системах. Ничего в этом страшного нет - просто дело привычки, особенно для Вас с богатым опытом. В целом система IAR менее монстрообразная и работает быстрее. Ассемблерные программы в ней не имеют ограничения на длину прямо "из коробки" даже без всяких "таблеток".
Насчет чтения документации - без неё никуда. В том документе, что я выше советовал, внимательно читать Вам наверняка не всё нужно будет, может от силы страниц 50.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: TI MSP430 Launch Pad
Ну, если ставить один обработчик на всех, то хватит и одного - 0xFFFC (NMI), незаполненные остальные вектора вызовут это самое NMI, и этого вполне достаточно. Если оно таки произойдет, то расписываем на все прерывания индивидуальные "ловушки" и вперед! А напрягаться заранее...Ser60 писал(а):Вопрос законный и правильный. В User's Guide на семейство имеется однозначный ответ на него, а также на вопрос "что будет если процессор встретит неподдерживаемую инструкцию". В первом случае произойдет ошибка доступа к флешу и управление передастся на вектор немаскируемого прерывания по адресу 0xFFFC. Если и там стоит неверный адрес, но программа зациклится. Во втором случае управление передастся по адресу вектора ресета 0xFFFE. В любом случае хорошая практика заполнять ВСЮ таблицу векторов прерывания, поставив в векторах неиспользованных прерываний адрес стандартного обработчика (Default Handler). В процессе отладки в нём можно просто разместить бесконечный цикл, а в реальном устройстве, например, организовать reset МК.
В наших широтах БЭСМов не было. Совсем. Зато я застал в нашем политехе Минск-1. Ламповую!.. Поработать на ней, правда, не пришлось - когда у нас началось программирование, ее уже сдали на металлолом.Ser60 писал(а):Минск-22, PHP-11? Да, помню такие во времена молодостиМинск мы программировали на военке, а PHP-11 позже на работе. До этого в школе ещё помню работали на БЭСМ-4 в 8-ричных кодах и на перфокартах.
Да я так, радиолюбительствую. К 430-м я обратился, в основном из ностальгических соображений, вспомнить, как писал на асме для любимой PDP-11, очень ведь похоже. Посмотрел на Алиэкспрессе, эта платка меньше $12, этот самый G2553, вроде-бы, неплох, 16 МГц, два таймера А, которые мне понравились, ну и купил.Ser60 писал(а):Если начинаете работать ма MSP430, может Вам больше понравится IDE от IAR. Оно проще, включая определения сегментов, хотя там определения имён тоже по нескольким файлам разбросаны, как и во многих других системах. Ничего в этом страшного нет - просто дело привычки, особенно для Вас с богатым опытом. В целом система IAR менее монстрообразная и работает быстрее. Ассемблерные программы в ней не имеют ограничения на длину прямо "из коробки" даже без всяких "таблеток".
Если буду делать что-то серьезное, то платформой к этому будет не 430 - скорее уж какой нибудь STM32.
Даташиты? Безусловно. А вот описание асма, ИМХО, не нужно и даром - в основном все понятно, а ежели вдруг возникнет затык, конкретно это место и прочитаю.Ser60 писал(а):Насчет чтения документации - без неё никуда. В том документе, что я выше советовал, внимательно читать Вам наверняка не всё нужно будет, может от силы страниц 50.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: TI MSP430 Launch Pad
Не совсем так. Дело в том, что если вектор прерывания явно не прописан в программе, то по его адресу в таблице векторов стоит 0xFFFF. У MSP430 в регистр PC можно только загрузить чётный адрес, т.е. в бите 0 у него всегда 0. Поэтому, адрес обработчика прерывания 0xFFFF в таблице изменится при загрузке в PC на 0xFFFE, т.е. на адрес RESET-a. После ресета можно анализировать флаги прерывания в SFR по адресу 0х0002 (IFG1) и FCTL3 чтобы разобраться что именно привело к ресету.afz писал(а):Ну, если ставить один обработчик на всех, то хватит и одного - 0xFFFC (NMI), незаполненные остальные вектора вызовут это самое NMI, и этого вполне достаточно.
Кроме того, следует иметь в виду, что NMI прерывание, хоть оно и не маскируемое, но по умолчанию не разрешено. Разрешение прерываний от событий по вектору 0хFFFC находится в SFR по адресу 0x0000 (IE1). Не маскируемое оно только в том смысле, что его нельзя запретить битом GIE в регистре SR (R2).
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: TI MSP430 Launch Pad
При подключении хардварного UART 2553 к физическому com-порту необходимо согласование уровней сигнала (MAX232 и т.п.)?
Никакая контра не уйдёт от нас
Re: TI MSP430 Launch Pad
разумеется
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: TI MSP430 Launch Pad
Меня смущает разница в напряжении питания msp430 3.3 вольта и max232 5 вольт.uldemir писал(а):разумеется
Типовая схема включения max232 для согласования уровней подойдёт?
Никакая контра не уйдёт от нас
Re: TI MSP430 Launch Pad
Боюсь, что не подойдет. Лучше что-то типа MAX3231
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: TI MSP430 Launch Pad
Печаль.akl писал(а):Боюсь, что не подойдет. Лучше что-то типа MAX3231
MAX3223 подойдёт?
Никакая контра не уйдёт от нас
Re: TI MSP430 Launch Pad
Навскидку, да подойдёт. MAX3223
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: TI MSP430 Launch Pad
Нужен ли в затвор IRLML2402 резистор, что бы управлять им с MSP430G2452 с напряжением питания 3.3 вольта?
Никакая контра не уйдёт от нас
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: TI MSP430 Launch Pad
Нужен - это предохранитель если ваш полевик вдруг на + дрейном закоротят - лучше чтоб резюк сгорел а не весь мк правда? ещё хорошим тоном есть ставить 100 килоом между сурсом и гейтом. при прошивке ноги мк в воздухе.
У меня тут другой вопрос - Играюсь с кодкомпозером и грейсом.
создал пустой с проект.
там нажа сконфигурить через грейс периферию и настроил все что мне надо было. в том числе прерывание 1 миллисекунда на таймере.
теперь вопрос. мне надо в обработчике этого прерывания сбрасывать некий флаг который из маина поднимается. тоесть надо чар в глобальной переменной.
если пишу в маине до инклюда грейса - грейс не видит эту переменную
Если пишу в файле интеруптс сгенеренной грейсом(там есть такие строки - плейс глобал вариабз) - то в маине не вижу эту переменную.
Взял создал отдельный GVars.h и там написал обьявление этой переменной. и написал инклюднуть и в грейсовском интерупте и в маине - в итоге получились две РАЗНЫЕ переменные с одинаковым названием!!!!!!! КАК ТАК ТО? а как блин сделать глобальную переменную? Когда останавливаюсь в прерывании - адрес 204 а когда в меине - 205....
У меня тут другой вопрос - Играюсь с кодкомпозером и грейсом.
создал пустой с проект.
там нажа сконфигурить через грейс периферию и настроил все что мне надо было. в том числе прерывание 1 миллисекунда на таймере.
теперь вопрос. мне надо в обработчике этого прерывания сбрасывать некий флаг который из маина поднимается. тоесть надо чар в глобальной переменной.
если пишу в маине до инклюда грейса - грейс не видит эту переменную
Если пишу в файле интеруптс сгенеренной грейсом(там есть такие строки - плейс глобал вариабз) - то в маине не вижу эту переменную.
Взял создал отдельный GVars.h и там написал обьявление этой переменной. и написал инклюднуть и в грейсовском интерупте и в маине - в итоге получились две РАЗНЫЕ переменные с одинаковым названием!!!!!!! КАК ТАК ТО? а как блин сделать глобальную переменную? Когда останавливаюсь в прерывании - адрес 204 а когда в меине - 205....
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.


