реклама на сайте
подробности

 
 
> СС430F5137 с нуля на asm, нужна помощь
vazz
сообщение Feb 23 2013, 14:07
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Приобрел EM430F5137RF900 и MSP-FET430UIF, до приобретения особо не заморачивался с подготовкой "рабочего пространства" под новый проект, вроде бы камни не особенно новые, часто встречал различную информацию о них и не думал, что доставабельностью нужной для начала разработки инфы возникнут проблемы. Пол дня поискал в сети примеры заголовочных файлов под этот камень, примеры инициализации периферии, увы - результат 0. Это такой секрет? Такие данные достаются потом и кровью? Раньше работал с AVR (да и продолжаю время от времени), никаких таких проблем не помню, все было как-то проще достать и среда разработки нормальная (и бесплатная). Бог с ней со средой, поставил IAR KS на 4кБ кода (мне для попробовать). С самим ассемблером MSP и системой команд ознакомился поверхностно, страха не вызвал, вроде бы все просто (по крайней мере помигать светодиодом для начала - понятно как, а особенности и "камни" по ходу дела разберу). Стандартный заголовочный файл, который есть в папке иара "\inc" при пустом проекте вызывает негодование у компилятора IAR (дублирование лэйблов в объявлении регистров DMA). Попытался найти нормальный заголовочный файл в сети - нашел лишь такой же, "замазал" все места вызывающие негатив комментариями, чтобы не было ошибок. Далее попытался найти файл, который инициализировал бы мне всю периферию - тут все и загнулось. Я понимаю, что скорее всего при запуске МК все отключает сам и морганию светодиодом врядли что-то помешает, но хотелось бы иметь заготовку с полной инициализацией всех узлов МК ну и ессно полную таблицу векторов прерываний воткнуть в начало. Это добавляет уверенности в дальнейшем освоении камня. В отладчике иара тож пока особо не разобрался, если честно с первого раза иар вроде показался "классическим" средством разработки с простым и понятным интерфейсом, как начал лезть глубже - начало казаться, что первое впечатление обманчиво, чувство "чего-то не хватает" не покидает - ну к примеру как мне для отладчика задать тип МК, частоту кварца (чтоб время выполения отслеживать), также не нашел средства для заливки прошивки в МК (нужно отдельным ПО для этого ввоспользоваться чтоли?!). Прошу извинить за смешивание всего в кучу - помогите найти (или разобраться) с заголовочный файл для ассемблера под этот МК, файл инициализации всех устройств на борту, ну и вектора прерываний до кучи. На Си для МК не программирую и не особо горю желанием.


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
d7d1cd
сообщение Jan 4 2014, 10:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



vazz, можно, как ты говоришь, оффтоп... Ты пишешь на ассемблере. Подскажи, как описать переменную (размером, например, 2 байта), расположенную по адресу 0х09FE. Чтобы потом, если я вдруг ошибусь и в тексте программы к этой переменной обращусь как к 1 байту (MOV.B например), компилятор поругал меня за это.
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 4 2014, 11:48
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(d7d1cd @ Jan 4 2014, 14:39) *
Чтобы потом, если я вдруг ошибусь ..., компилятор поругал меня за это.


Наверное как-то так:

Код
#define var1_ (0х09FE)                  //объявляем переменную var1
DEFCW(var1,var1_)


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jan 4 2014, 12:19
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(vazz @ Jan 4 2014, 15:48) *
Наверное как-то так:
Код
#define var1_ (0х09FE)                  //объявляем переменную var1
DEFCW(var1,var1_)

Я тоже так попробовал сделать (только для объявления байта надо писать DEFC, для слова DEFW). Если var1 - это просто переменная, то все хорошо. Но у меня в программе есть массивы. Я попробовал таким образом описать адрес первого элемента массива. При обращении в коде к первому элементу массива все хорошо, а вот при обращении к остальным компилятор выдает предупреждение:
Код
// var1 - это у нас массив 5-ти однобайтных чисел
MOV.B   #5, &var1     // Запись байта в первый элемент массива. Тут все отлично!
MOV.W   #5, &var1     // Запись слова в первый элемент массива. Тут компилятор говорит об ошибке. Все как надо!
MOV.B   #5, &var1 + 1     // Запись байта во второй элемент массива. И вот тут предупреждение

Кроме того, как я понял, конструкцией вида DEFC(W) описываются регистры специального назначения. А для пользовательских переменных есть директивы DS8, DS16 и т. д. Как только сделать то, что хочется?...
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 4 2014, 16:33
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(d7d1cd @ Jan 4 2014, 16:19) *
Как только сделать то, что хочется?...


Я не крутой программер (я больше схемотехник), поэтому я пораскинул тем скудным багажом опыта, который приобрел и ничего лучше в голову не пришло, как применить индексный режим адресации. Т.е. в одном из регистров ЦПУ хранишь начальный адрес своего array, а с помощью другого регистра делаешь смещение. Ну ты это и сам понимаешь наверное, sorry.

d7d1cd, rezident спасибо парни! бывают же отзывчивые люди, бескорыстно делящиеся опытом. Побольше бы таких - глядишь Родина наша не была бы в хвосте сектора радиоаппаратостроения и производства отчечественных РЭК)

rezident, спасибо за развернутые ответы, прям как литературу читаешь и балдеешь, все по-русски и с конкретными цифрами) Единственное по поводу SVS(M) - я наверное запрещу прерывания по возвращению уровней напряжения в удовлетворительное состояние дабы тоже пока не заморачиваться с этим, а вот при снижении ниже плинтуса надо бы наверное хоть подмаргнуть пользователю (если есть чем), что мол "барахлит чо-то". Мне кажется этот мониторинг сделан по большей части, чтобы отловить "неверное" соотношение частота/напряжение ядра (например, когда напряжение Vcore снижено до минимума, а частота выжимается слишком большая).

А можно еще поспрашивать?

Так сказать вопрос опять же для опытных. Я тут подбираюсь к начальной инициализации всех узлов на борту. И вот думаю.. А как по феншую принято проводить начальную настройку MSP430, вернее в каком порядке. Я вот как думаю (и если я недальновидно думаю, то очень прошу меня поправить на начальном этапе):

1. Останов WDT. (приоритет высший, т.к. дается 32мс на раздумья)
2. Настройка системы сброса.
3. Настройка системы питания.
4. Настройка системы тактирования.
5. Инициализация всей периферии, в т.ч. настройка тактирования, прерываний и питания каждого из периферийных модулей (по началу планирую все отключать, а потом брать этот шаблон и в новом проекте включать только то, что нужно, не вспоминая как отключать остальной функционал).

Или может после WDT надо сперва систему тактирования настроить? Вобщем кто в какой последовательности делает, учитывая свой опыт?

И попутно вопрос, т.к. порылся и нашел в закромах кварцы на 32.768кГц, которые шли в наборе вместе с отладочными модулями EM430. Они изначально не впаяны на платы, это возможно с чем-то связано? Типа попробуйте сначала с DCO помучиться, а когда надоест сами впаяете? Ничего ж страшного не будет, если я впаяю их прямо сейчас на свое штатное место, конденсаторы на вх/вых гены никакие не нужны как я понял, всё внутри предусмотрено.

Сообщение отредактировал vazz - Jan 4 2014, 16:35


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 4 2014, 16:48
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(vazz @ Jan 4 2014, 21:08) *
а вот при снижении ниже плинтуса надо бы наверное хоть подмаргнуть пользователю (если есть чем), что мол "барахлит чо-то". Мне кажется этот мониторинг сделан по большей части, чтобы отловить "неверное" соотношение частота/напряжение ядра (например, когда напряжение Vcore снижено до минимума, а частота выжимается слишком большая).

SVS аппартно-программный модуль и нужен в основном для правильного функционирования "железа". Т.е. когда процессы меняются быстро и что-то может из-за этого заглючить. Задействовать SVS для мониторинга величины питания батарейки, чтобы потом подморгнуть или нарисовать индикацию пользователю, не имеет смысла - для этого (при медленном изменении величины) больше подходит АЦП, который унунтре имеется. У него еще и внутренний вход мультиплексора для измерения напряжения собственного питания предусмотрен.
Цитата(vazz @ Jan 4 2014, 21:08) *
Я вот как думаю (и если я недальновидно думаю, то очень прошу меня поправить на начальном этапе):

1. Останов WDT. (приоритет высший, т.к. дается 32мс на раздумья)
2. Настройка системы сброса.
3. Настройка системы питания.
4. Настройка системы тактирования.
5. Инициализация всей периферии, в т.ч. настройка тактирования, прерываний и питания каждого из периферийных модулей (по началу планирую все отключать, а потом брать этот шаблон и в новом проекте включать только то, что нужно, не вспоминая как отключать остальной функционал).

Вполне нормальный/допустимый порядок. Тут еще кое-что от нюансов применения зависит.
Во-первых, следует помнить, что дефолтное состояние (default state) всей периферии MSP430 после сброса и/или включения питания позволяет ему нормально работать вообще без инициализации питания и тактирования (кроме настройки функций пинов конечно же).
Тут нюансы состоят в том: нужно ли вам обрабатывать и определять причины (ре)старта, например, было ли включение питания или была перезагрузка по WDT или от bootloader или какого-то иного источника прерываний? Как быстро вам нужно инициализировать все периферию: если очень быстро, то имеет смысл вначале настроить систему тактирования и питания для работы на более высокой частоте. Если быстро не обязательно, то можно вначале функции пинов настроить, чтобы на выходах было заранее определенное состояние и что-либо висящее снаружи не потребляло много в этот момент, когда на выходах "плавающие" уровни.
Во-вторых, нюанс языка программирования: ASM или ЯВУ типа Си? На ASM можно успеть инициализировать и до срабатывания WDT. А если Си, то по-хорошему отключать WDT нужно не в main, а в функции _low_level_init, которая вызывается еще до main. Потому, что если в программе будут большие глобальные массивы, то процедура очистки глобальных переменных (по стандарту в Си все глобальные переменные должны быть инициализированы нулями или конкретными значениями) не успеет все выполнить до срабатывания WDT и main у вас не стартует вообще никогда.
В-третьих, некоторые параметры инциализации могут зависеть от текущих пользовательских настроек. Поэтому процедура инициализации должна предусматривать не только собственно начальную инициализацию, но и реинициализацию с другими (заданными) параметрами. Например, параметры настройки UART или время перехода в режим энергосбережения с гашением индикатора и отключением связи или еще что-то такое же. Причем весьма желательно, чтобы реинициализация одного модуля не влияла на работоспособность других модулей. Что в случае с системой тактирования - задача довольно нетривиальная.
В общем начальный выбор ваш вполне верный, а дальше думаю вы "допилите" в соответствии со своими собственными нюансами. Только советую не лениться и сразу продумать и выделить HAL (Hardware Application Level), а также предусмотреть возможность реинициализации всех модулей. Да, не скрою, что это может занять довольно много времени. Но зато потом вы получите бонусы от того, что вас минуют многие "головняки" с работой периферии и вам не придется начинать писать все заново "с низов" cool.gif
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 4 2014, 17:12
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(rezident @ Jan 4 2014, 20:48) *
сразу продумать и выделить HAL (Hardware Application Level), а также предусмотреть возможность реинициализации всех модулей.


Точняк! Надо распределить ПЗУ на сектор своего "загрузчика", а остальную часть ПЗУ поделить пополам, одну половинку - под "горячее", вторую - под бэкап. Я конечно еще не добрел, но думается что MSP430 сам себя шить может? Одна половина ПЗУ будем служить пространством под выполняемое прикладное ПО, а вторая - для переноса первой половины перед обновлением ПО по радиоканалу. В случае потери связи во время сеанса обновления - делаем бэкап без потери работоспособности изделия smile3009.gif


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vazz   СС430F5137 с нуля на asm   Feb 23 2013, 14:07
- - rezident   Цитата(vazz @ Feb 23 2013, 19:07) Стандар...   Feb 23 2013, 20:03
- - vazz   Благодарю за напутственные пояснения, наконец-то п...   Dec 28 2013, 14:12
- - rx3apf   "#" - непосредственный операнд, если зна...   Dec 28 2013, 14:33
- - vazz   А правда то, что ограничение 4кБ IAR Kickstart отн...   Dec 28 2013, 17:31
|- - d7d1cd   Цитата(vazz @ Dec 28 2013, 21:31) А правд...   Dec 28 2013, 17:32
|- - vazz   Цитата(d7d1cd @ Dec 28 2013, 21:32) Вроде...   Dec 29 2013, 11:55
|- - d7d1cd   Цитата(vazz @ Dec 29 2013, 15:55) Я пока ...   Dec 29 2013, 14:21
- - vazz   Почитал о режимах адресации, впринципе все понятно...   Dec 29 2013, 09:47
|- - d7d1cd   Цитата(vazz @ Dec 29 2013, 13:47) Почитал...   Dec 29 2013, 11:39
- - vazz   Не могу найти/понять информацию про стек. Вершина ...   Dec 30 2013, 19:55
|- - d7d1cd   Цитата(vazz @ Dec 30 2013, 23:55) Не могу...   Dec 31 2013, 06:25
|- - vazz   Цитата(d7d1cd @ Dec 31 2013, 10:25) Перво...   Dec 31 2013, 10:13
|- - d7d1cd   Цитата(vazz @ Dec 31 2013, 14:13) Про сте...   Dec 31 2013, 13:38
|- - vazz   Цитата(d7d1cd @ Dec 31 2013, 17:38) и буд...   Dec 31 2013, 14:52
- - vazz   А еще непонятны примочки ассемблера типа "NAM...   Dec 30 2013, 21:57
- - d7d1cd   А что за расширение файла .inc? Вот ты говоришь, ч...   Dec 31 2013, 15:32
|- - vazz   Цитата(d7d1cd @ Dec 31 2013, 19:32) А что...   Dec 31 2013, 16:05
|- - d7d1cd   Цитата(vazz @ Dec 31 2013, 20:05) Тут не ...   Dec 31 2013, 16:20
||- - vazz   Цитата(d7d1cd @ Dec 31 2013, 20:20) Мне к...   Dec 31 2013, 16:29
||- - d7d1cd   Цитата(vazz @ Dec 31 2013, 20:29) Кстати,...   Dec 31 2013, 20:11
|- - SM   Цитата(vazz @ Dec 31 2013, 20:05) Хм... н...   Jan 1 2014, 09:36
|- - vazz   Цитата(SM @ Jan 1 2014, 13:36) public/ext...   Jan 1 2014, 10:14
|- - d7d1cd   Цитата(vazz @ Jan 1 2014, 14:14) Благодар...   Jan 1 2014, 10:52
|- - SM   Цитата(vazz @ Jan 1 2014, 14:14) Благодар...   Jan 1 2014, 13:34
- - vazz   По мере разбирательства пытаюсь читать CC430 Users...   Jan 2 2014, 19:21
|- - rezident   Цитата(vazz @ Jan 3 2014, 00:21) Про MCLK...   Jan 2 2014, 20:03
|- - vazz   Цитата(rezident @ Jan 3 2014, 00:03) Поче...   Jan 2 2014, 22:09
|- - rezident   Цитата(vazz @ Jan 3 2014, 03:09) Не, я им...   Jan 3 2014, 17:03
- - vazz   IAR почему-то ругается на команду CMP.B по отношен...   Jan 3 2014, 19:03
- - vazz   Господин rezident, немного наслышан о тебе, как об...   Jan 3 2014, 20:37
|- - d7d1cd   Цитата(vazz @ Jan 4 2014, 00:37) Господин...   Jan 4 2014, 08:59
||- - vazz   Цитата(d7d1cd @ Jan 4 2014, 12:59) Я знаю...   Jan 4 2014, 10:02
|- - rezident   Цитата(vazz @ Jan 4 2014, 01:37) можно ли...   Jan 4 2014, 15:19
|- - SM   Цитата(d7d1cd @ Jan 4 2014, 16:19) А для ...   Jan 4 2014, 16:45
|- - d7d1cd   Цитата(SM @ Jan 4 2014, 20:45) Объявить е...   Jan 4 2014, 17:14
- - SM   У меня сейчас IAR не установлен под 430. так что с...   Jan 4 2014, 17:36
|- - d7d1cd   Цитата(SM @ Jan 4 2014, 21:36) У меня сей...   Jan 4 2014, 17:50
- - SM   Какая же это ошибка. Доступ к любому отдельному ба...   Jan 4 2014, 18:00
|- - d7d1cd   Цитата(SM @ Jan 4 2014, 22:00) Какая же э...   Jan 4 2014, 18:04
|- - SM   Цитата(d7d1cd @ Jan 4 2014, 22:04) однако...   Jan 4 2014, 18:15
|- - d7d1cd   Спасибо за помощь. Но все таки есть метод, позволя...   Jan 5 2014, 11:58
|- - SM   Цитата(d7d1cd @ Jan 5 2014, 15:58) Увы, I...   Jan 5 2014, 12:12
||- - d7d1cd   Цитата(SM @ Jan 5 2014, 16:12) ...особенн...   Jan 5 2014, 13:08
||- - SM   Цитата(d7d1cd @ Jan 5 2014, 17:08) Бывают...   Jan 5 2014, 13:20
||- - vazz   Цитата(SM @ Jan 5 2014, 17:20) да-да. там...   Jan 5 2014, 13:51
||- - SM   Цитата(vazz @ Jan 5 2014, 17:40) Замостил...   Jan 5 2014, 13:54
||- - vazz   Цитата(SM @ Jan 5 2014, 17:54) И Вы до си...   Jan 5 2014, 14:16
|- - vazz   Цитата(d7d1cd @ Jan 5 2014, 15:58) Был ту...   Jan 5 2014, 13:17
- - vazz   А у меня еще один интересный вопрос: можно ли как-...   Jan 4 2014, 18:59
- - SM   А вот это ищите в даташите. В некоторых MSP430 ест...   Jan 4 2014, 19:07
- - d7d1cd   Смотрите как я получил ограничение. Я создал шабло...   Jan 5 2014, 14:24
- - SM   Это они что-то поднамутили более свежего... Раньше...   Jan 5 2014, 14:30
- - vazz   Замостил связкой: КодJMP $ NOP Пространст...   Jan 5 2014, 14:32
- - vazz   То ли лыжи, то ли пол третьего ночи... Часовой ква...   Jan 5 2014, 22:43
|- - rezident   Цитата(vazz @ Jan 6 2014, 03:43) в регист...   Jan 6 2014, 05:55
- - vazz   Короче все запускается, оказывается помимо PxSEL н...   Jan 6 2014, 08:56
|- - rezident   Цитата(vazz @ Jan 6 2014, 13:56) Короче в...   Jan 6 2014, 09:16
|- - vazz   Цитата(rezident @ Jan 6 2014, 13:16) ... ...   Jan 6 2014, 09:28
|- - rezident   Цитата(vazz @ Jan 6 2014, 14:28) Поэтому ...   Jan 6 2014, 13:04
|- - vazz   Цитата(rezident @ Jan 6 2014, 17:04) вы б...   Jan 6 2014, 13:36
|- - rezident   Цитата(vazz @ Jan 6 2014, 18:26) Уверен, ...   Jan 6 2014, 13:43
|- - vazz   Честно говоря я уже погрузился в Unified Clock Sys...   Jan 6 2014, 14:55
- - vazz   А можно мне совет? Я что-то зря с этим XT1 походу...   Jan 6 2014, 20:47
- - rezident   Ну если вам на потребление начхать и 60мкА DCO vs ...   Jan 7 2014, 11:20


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 11:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016