Форум РадиоКот https://radiokot.ru/forum/ |
|
TI MSP430 Launch Pad https://radiokot.ru/forum/viewtopic.php?f=62&t=42019 |
Страница 17 из 22 |
Автор: | afz [ Чт дек 04, 2014 07:07:06 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Коллеги, подскажите, плз, как в TI CCS начать новый ассемблерный проект? ЧТо-то потыкался, ничего, кроме C/C++ не предлагает. У AVR в любимой студии все прсто: давишь "новый проект" и тебе на выбор предлагают Atmel AVR Assembler или AVR GCC, а здесь его куда закопали? Это я разжился таки Launch Pad'ом с 2553, второй чип, правда не пережил доставку, ноги обломали при транспортировке, CCS встала без вопросов, поморгать светодиодом из C-программы - все ОК, а вот до асма достучаться не могу... |
Автор: | prinv [ Чт дек 04, 2014 07:09:29 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Empty Assembly-only Project не оно? |
Автор: | afz [ Чт дек 04, 2014 07:23:14 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
prinv писал(а): Empty Assembly-only Project не оно? Да, блин! Не ожидал, что они это дело спрятали в GCC Project - перепробовал все из File - New, кроме GCC Projecr, был убежден, что это начало проекта именно на GCC, а не на асме!.. А как задать конкретный камень? Что-то обшарил всю папочку ti, никаких .h, .inc и т.п. не нашел.. |
Автор: | Ser60 [ Чт дек 04, 2014 07:55:05 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
File -> New -> CCS Project и в открывшемся окне выбрать МК. Include файлы в папке C:\ti\cccv6\ccs_base\msp430\include |
Автор: | afz [ Пн дек 15, 2014 09:20:31 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
А как заполнить таблицу векторов? В пустом проекте, предложенном CCS, есть только .sect ".reset" ; MSP430 RESET Vector .short RESET А дальше как? С АВР-ками я, обычно, делал так: viewtopic.php?f=57&t=72364&start=20 (последнее сообщение), все было нормально. А здесь (в 430) все материалы на один контроллер размазаны по доброму десятку ПДФ-ок, может я и смотрел нужную, но не обратил внимания, а выучить их все, ИМХО, нереально... |
Автор: | Ser60 [ Пн дек 15, 2014 16:36:58 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Насчет десятка ПДФ-ок, Вы сильно округлили. Документов по каждой модели МК всего 2. Первый - это ДШ на семейство, где описаны общие для всего семейства сведения по периферии и т.п.. Второй - это долумент на конкретную модель, где, в частности, описана распиновка и другие сведения, характерные только для этой модели, например как включить альтернативные функции выводов. Ну и еще в Errata заглянуть не мешает, но это, как правило разовое явление. Касательно векторов прерываний, для их программирования нужно лишь знать как они называются. Эти сведения имеются в INC файлах (в самом их конце) для каждой модели по ссылке в папке, что я приводил выше. |
Автор: | afz [ Пн дек 15, 2014 17:36:59 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Ser60 писал(а): Касательно векторов прерываний, для их программирования нужно лишь знать как они называются. Эти сведения имеются в INC файлах (в самом их конце) для каждой модели по ссылке в папке, что я приводил выше. Да? Ну вот, написал я программу для обслуживания прерывания TA0CCR0, допустим, метка ее T00INT. Ну нашел я в msp430g2553.h что-то, относящееся к этому таймеру: #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, и все. Так что за черная магия, при помощи которой все становится на свои места и где она описана? Напоминаю, это асм, не Си. Здесь на каждый кусочек памяти (байт, слово, несколько слов) я сам должен что-то написать, из воздуха ничего не должно появляться!.. |
Автор: | Ser60 [ Вт дек 16, 2014 00:21:30 ] |
Заголовок сообщения: | 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 При этом линкер запишет адрес входа в Вашу ISR (T000INT) в таблице векторов прерываний по адресу TIMER0_A0_VECTOR. Определение адреса соответствующего имени TIMER0_A0_VECTOR находится в .h файле МК, определённого в настройках проекта. afz писал(а): И вообще, что значит это самое .int09, равно, как и .sect ".reset" Где это все описано? .reset - это просто алиас (другое имя) для адреса RESET_VECTOR, определенного в .h файле. Можете использовать какое Вам более нравится. Описание директив ассемблера можно найти в Help -> Help Contents и в открывшемся окне напечатать "assembler" и читать что нужно. Вы ранее работали с определениями сегментов? Если нет - почитайте документацию на CCS в help-е, в частности там найдете, что директива .sect - один из способов определения сегмента. afz писал(а): Так что за черная магия, при помощи которой все становится на свои места и где она описана? Вот выжимка из файла msp430g2553.h: Код: #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 в которой определено имя оффсета вектора прерывания ресета RESET_VECTOR и также сказано, что его значение равно 15 (0х0F). Это значение умноженное на 2 (MSP430F2553 использует 16-битные адреса), добавится к началу векторов таблицы прерываний в этом МК 0хFFE0 чтобы получить вектор ресета 0хFFE0 + 2*0x0F = 0xFFFE. afz писал(а): .sect появляется, как джинн из бутылки и, почему-то сразу попадает на 0xFFFC. Где это прописано? Это прописано в файле lnk_msp430g2553.cmd из той-же папки. Вот выжимка оттуда, касательно распределения памяти в этой модели МК: Код: 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 } далее ниже определения адресов сегментов .bss, .data..., и в конце файла имена .int02, ... , .int14, .reset. Отсюда, в частности, следует, что адрес таблицы адресов обработчика прерывания начинается с 0xFFE0. afz писал(а): Напоминаю, это асм, не Си. Понимаю. Но при программировании MSP430 на ассемблере в CCS или IAR можно использовать .h файлы для С. Короче, читайте сначала этот документ - там содержатся ответы по крайней мере на все заданные Вами пока здесь вопросы. http://www.ti.com/lit/ug/slau131j/slau131j.pdf |
Автор: | afz [ Вт дек 16, 2014 08:50:05 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Ser60 писал(а): Понимаю. Но при программировании MSP430 на ассемблере в CCS или IAR можно использовать .h файлы для С. Точее, для Си и для асма используется один и тот же набор .h- и, как выяснилось, .com-файлов.Так вот, набор файлов общий, а как возникают какие-то различия в сишной и ассемблерной нотации, используют условную компиляцию, по параметру __ASM_HEADER__.Я до этого ни разу не имел дела с ГНУсью, а в нормальных асмах ВСЕ задается в исходнике, а не спрятано где-то в ключах и прочих невидимых хитростях. Тому же AVR: указал в начале исходника .include <m8.inc> и все, асм знает, что работаем с Мегой-8. А в этой ГНУси, блин, все через *опу. Поэтому-то я поначалу и не обратил внимания на файлы .com. То есть, конечно, я заглянул в парочку из них, но чего-то специфически ассемблерного там не обнаружил и решил, что эти файлы только для Си. Ну, и забыл про них. Более того, вчера вечером, сочиняя ответ и очередной набор вопросов, я таки нашел файл msp430g2553.com, заглянул в него и лишний раз убедился, что ничего специфически ассемблерного там нет. А вот файл lnk_msp430g2553.com, как оказалось, как раз для асма. Но он мне не попался под руку. Попадись он, так я бы, скорее всего, и сам бы разобрался. Но увы, сразу он мне не попался, откуда и наша дискуссия. В общем, спасибо! Ser60 писал(а): Короче, читайте сначала этот документ - там содержатся ответы по крайней мере на все заданные Вами пока здесь вопросы. Честно скажу, читать его мне не хочется. С одной стороны, знаешь один ассемблер - считай, что знаешь все, а я их знал столько, что сейчас и не вспомнишь. Начиная с языка символического кодирования ЭВМ "Минск-22" и ассемблера Системы-360. С другой стороны, читать такие объемы английского текста ради того, чтобы прояснить несколько непонятных мест для меня чересчур, не осилю. Да и не особенно надо, все что меня интересовало, я уже выяснил, остальное же - асм, как асм. Ну, различает в именах малые и большие буквы, ГНУсная мерзость, но что делать - другого все равно нет...http://www.ti.com/lit/ug/slau131j/slau131j.pdf Плюсик я нажал. Кстати, как я понимаю, незаполненные вектора будут содержать 0xFFFF. А как ЦПУ на это отреагирует, если вдруг произойдет непредусмотренное прерывание? В смысле, не обидится ли на нечетный адрес команды? Или банально сочтет его тождественным ресету? У любимой PDP-11 в этом пункте, помнится, было разночтение - "большие" машинки делали Trap to 4, если не врет мой склероз, а малые, в смысле LSI-11 (у нас - Э-60) просто игнорировали младший бит адреса. А как 430? |
Автор: | Ser60 [ Вт дек 16, 2014 18:21:10 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
afz писал(а): А как ЦПУ на это отреагирует, если вдруг произойдет непредусмотренное прерывание? В смысле, не обидится ли на нечетный адрес команды? Или банально сочтет его тождественным ресету? Вопрос законный и правильный. В User's Guide на семейство имеется однозначный ответ на него, а также на вопрос "что будет если процессор встретит неподдерживаемую инструкцию". В первом случае произойдет ошибка доступа к флешу и управление передастся на вектор немаскируемого прерывания по адресу 0xFFFC. Если и там стоит неверный адрес, но программа зациклится. Во втором случае управление передастся по адресу вектора ресета 0xFFFE. В любом случае хорошая практика заполнять ВСЮ таблицу векторов прерывания, поставив в векторах неиспользованных прерываний адрес стандартного обработчика (Default Handler). В процессе отладки в нём можно просто разместить бесконечный цикл, а в реальном устройстве, например, организовать reset МК. Минск-22, PHP-11? Да, помню такие во времена молодости Минск мы программировали на военке, а PHP-11 позже на работе. До этого в школе ещё помню работали на БЭСМ-4 в 8-ричных кодах и на перфокартах. Если начинаете работать ма MSP430, может Вам больше понравится IDE от IAR. Оно проще, включая определения сегментов, хотя там определения имён тоже по нескольким файлам разбросаны, как и во многих других системах. Ничего в этом страшного нет - просто дело привычки, особенно для Вас с богатым опытом. В целом система IAR менее монстрообразная и работает быстрее. Ассемблерные программы в ней не имеют ограничения на длину прямо "из коробки" даже без всяких "таблеток". Насчет чтения документации - без неё никуда. В том документе, что я выше советовал, внимательно читать Вам наверняка не всё нужно будет, может от силы страниц 50. |
Автор: | afz [ Вт дек 16, 2014 19:47:03 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Ser60 писал(а): Вопрос законный и правильный. В User's Guide на семейство имеется однозначный ответ на него, а также на вопрос "что будет если процессор встретит неподдерживаемую инструкцию". В первом случае произойдет ошибка доступа к флешу и управление передастся на вектор немаскируемого прерывания по адресу 0xFFFC. Если и там стоит неверный адрес, но программа зациклится. Во втором случае управление передастся по адресу вектора ресета 0xFFFE. В любом случае хорошая практика заполнять ВСЮ таблицу векторов прерывания, поставив в векторах неиспользованных прерываний адрес стандартного обработчика (Default Handler). В процессе отладки в нём можно просто разместить бесконечный цикл, а в реальном устройстве, например, организовать reset МК. Ну, если ставить один обработчик на всех, то хватит и одного - 0xFFFC (NMI), незаполненные остальные вектора вызовут это самое NMI, и этого вполне достаточно. Если оно таки произойдет, то расписываем на все прерывания индивидуальные "ловушки" и вперед! А напрягаться заранее... Ser60 писал(а): Минск-22, PHP-11? Да, помню такие во времена молодости Минск мы программировали на военке, а PHP-11 позже на работе. До этого в школе ещё помню работали на БЭСМ-4 в 8-ричных кодах и на перфокартах. В наших широтах БЭСМов не было. Совсем. Зато я застал в нашем политехе Минск-1. Ламповую!.. Поработать на ней, правда, не пришлось - когда у нас началось программирование, ее уже сдали на металлолом. Ser60 писал(а): Если начинаете работать ма MSP430, может Вам больше понравится IDE от IAR. Оно проще, включая определения сегментов, хотя там определения имён тоже по нескольким файлам разбросаны, как и во многих других системах. Ничего в этом страшного нет - просто дело привычки, особенно для Вас с богатым опытом. В целом система IAR менее монстрообразная и работает быстрее. Ассемблерные программы в ней не имеют ограничения на длину прямо "из коробки" даже без всяких "таблеток". Да я так, радиолюбительствую. К 430-м я обратился, в основном из ностальгических соображений, вспомнить, как писал на асме для любимой PDP-11, очень ведь похоже. Посмотрел на Алиэкспрессе, эта платка меньше $12, этот самый G2553, вроде-бы, неплох, 16 МГц, два таймера А, которые мне понравились, ну и купил. Если буду делать что-то серьезное, то платформой к этому будет не 430 - скорее уж какой нибудь STM32. Ser60 писал(а): Насчет чтения документации - без неё никуда. В том документе, что я выше советовал, внимательно читать Вам наверняка не всё нужно будет, может от силы страниц 50. Даташиты? Безусловно. А вот описание асма, ИМХО, не нужно и даром - в основном все понятно, а ежели вдруг возникнет затык, конкретно это место и прочитаю.
|
Автор: | Ser60 [ Ср дек 17, 2014 02:35:58 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
afz писал(а): Ну, если ставить один обработчик на всех, то хватит и одного - 0xFFFC (NMI), незаполненные остальные вектора вызовут это самое NMI, и этого вполне достаточно. Не совсем так. Дело в том, что если вектор прерывания явно не прописан в программе, то по его адресу в таблице векторов стоит 0xFFFF. У MSP430 в регистр PC можно только загрузить чётный адрес, т.е. в бите 0 у него всегда 0. Поэтому, адрес обработчика прерывания 0xFFFF в таблице изменится при загрузке в PC на 0xFFFE, т.е. на адрес RESET-a. После ресета можно анализировать флаги прерывания в SFR по адресу 0х0002 (IFG1) и FCTL3 чтобы разобраться что именно привело к ресету. Кроме того, следует иметь в виду, что NMI прерывание, хоть оно и не маскируемое, но по умолчанию не разрешено. Разрешение прерываний от событий по вектору 0хFFFC находится в SFR по адресу 0x0000 (IE1). Не маскируемое оно только в том смысле, что его нельзя запретить битом GIE в регистре SR (R2). |
Автор: | prinv [ Сб янв 10, 2015 22:03:48 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
При подключении хардварного UART 2553 к физическому com-порту необходимо согласование уровней сигнала (MAX232 и т.п.)? |
Автор: | uldemir [ Сб янв 10, 2015 22:40:43 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
разумеется |
Автор: | prinv [ Пн янв 12, 2015 08:03:39 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
uldemir писал(а): разумеется Меня смущает разница в напряжении питания msp430 3.3 вольта и max232 5 вольт. Типовая схема включения max232 для согласования уровней подойдёт? |
Автор: | akl [ Пн янв 12, 2015 08:57:45 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Боюсь, что не подойдет. Лучше что-то типа MAX3231 |
Автор: | prinv [ Пн янв 12, 2015 09:06:11 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
akl писал(а): Боюсь, что не подойдет. Лучше что-то типа MAX3231 Печаль. MAX3223 подойдёт? |
Автор: | akl [ Пн янв 12, 2015 09:55:55 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Навскидку, да подойдёт. MAX3223 |
Автор: | prinv [ Ср фев 18, 2015 07:58:36 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Нужен ли в затвор IRLML2402 резистор, что бы управлять им с MSP430G2452 с напряжением питания 3.3 вольта? |
Автор: | clawham [ Вс мар 01, 2015 12:07:30 ] |
Заголовок сообщения: | Re: TI MSP430 Launch Pad |
Нужен - это предохранитель если ваш полевик вдруг на + дрейном закоротят - лучше чтоб резюк сгорел а не весь мк правда? ещё хорошим тоном есть ставить 100 килоом между сурсом и гейтом. при прошивке ноги мк в воздухе. У меня тут другой вопрос - Играюсь с кодкомпозером и грейсом. создал пустой с проект. там нажа сконфигурить через грейс периферию и настроил все что мне надо было. в том числе прерывание 1 миллисекунда на таймере. теперь вопрос. мне надо в обработчике этого прерывания сбрасывать некий флаг который из маина поднимается. тоесть надо чар в глобальной переменной. если пишу в маине до инклюда грейса - грейс не видит эту переменную Если пишу в файле интеруптс сгенеренной грейсом(там есть такие строки - плейс глобал вариабз) - то в маине не вижу эту переменную. Взял создал отдельный GVars.h и там написал обьявление этой переменной. и написал инклюднуть и в грейсовском интерупте и в маине - в итоге получились две РАЗНЫЕ переменные с одинаковым названием!!!!!!! КАК ТАК ТО? а как блин сделать глобальную переменную? Когда останавливаюсь в прерывании - адрес 204 а когда в меине - 205.... |
Страница 17 из 22 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |