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

 
 
> LPC2103 -> LPC1751, переход
toweroff
сообщение Jul 10 2012, 18:54
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый вечер!
Хотелось бы узнать, есть ли какие-то принципиальные камни при переходе от ARM7 к CM3
Так-то оно, вроде как, все понятно, но не хотелось бы по первым шагам биться об стену
В принципе, пока интересует базовая схемотехника и стартап

Прошу прощения за введение в заблуждение
Не LPC2000 -> LPC1700, а, конечно, младшие модели, то есть LPC210x->LPC1751,52

Просто предложили по неплохой цене и есть интерес все-таки переползти в это ядро, благо и скорость выше (хотя надо ли оно - другой вопрос), и периферия богаче, да и питание от одного источника

Я понимаю, что только надо начать, а там уже... но
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
SII
сообщение Jul 10 2012, 21:35
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



В процессорах M-профиля совершенно по-другому организована работа с прерываниями. Периферия у NXP, как правило, остаётся если не полностью идентичной, то близкой к таковой, за исключением обработки прерываний (в силу уже упомянутых особенностей архитектуры) и адресов регистров.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 11 2012, 17:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(SII @ Jul 11 2012, 01:35) *
В процессорах M-профиля совершенно по-другому организована работа с прерываниями. Периферия у NXP, как правило, остаётся если не полностью идентичной, то близкой к таковой, за исключением обработки прерываний (в силу уже упомянутых особенностей архитектуры) и адресов регистров.

спасибо!
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 11 2012, 17:45
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(toweroff @ Jul 10 2012, 21:54) *
Добрый вечер!
Хотелось бы узнать, есть ли какие-то принципиальные камни при переходе от ARM7 к CM3
Так-то оно, вроде как, все понятно, но не хотелось бы по первым шагам биться об стену
В принципе, пока интересует базовая схемотехника и стартап


Как уже упомянули - по разному организована обработка прерываний. Отличные стартапы. Дело в том что для М3 прерывания имеют определённый названия, прописанные в стартапе. И названия обработчиков прерываний должны совпадать с теми что прописаны в стартапе. В LPC2xxx перывания можно было называть как угодно и инсталлировать. При переводе одного проекта на LPC17 брал куски кода с проекта на LPC23. Порадовало что обработчики UARTs были заменены один в один. Только подкорректировал clear pending interrupt. Watchdog тоже не корректировался. Таймеры не помню. Остальная переферия не использовалась поэтому сказать ничего не могу. Кажется NXP позиционировал LPC17 как семейство для перехода с LPC2xxx. Так что во многом код должен быть взаимозаменяем.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 11 2012, 17:55
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(mempfis_ @ Jul 11 2012, 21:45) *
Дело в том что для М3 прерывания имеют определённый названия, прописанные в стартапе. И названия обработчиков прерываний должны совпадать с теми что прописаны в стартапе. В LPC2xxx перывания можно было называть как угодно и инсталлировать. При переводе одного проекта на LPC17 брал куски кода с проекта на LPC23. Порадовало что обработчики UARTs были заменены один в один. Только подкорректировал clear pending interrupt. Watchdog тоже не корректировался. Таймеры не помню. Остальная переферия не использовалась поэтому сказать ничего не могу. Кажется NXP позиционировал LPC17 как семейство для перехода с LPC2xxx. Так что во многом код должен быть взаимозаменяем.

да, уже заметил

Цитата(mempfis_ @ Jul 11 2012, 21:45) *
Кажется NXP позиционировал LPC17 как семейство для перехода с LPC2xxx.

именно так. Если б знал года два назад, не бодался бы с ARM9 )) но - тоже опыт
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 11 2012, 19:38
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(mempfis_ @ Jul 11 2012, 20:45) *
В LPC2xxx перывания можно было называть как угодно и инсталлировать.

Так и у Cortex-ов как хочешь так и называешь. Главное чтобы

Цитата
названия обработчиков прерываний должны совпадать с теми что прописаны в стартапе.

и функция обработчика располагалась на своём месте в таблице векторов.


Цитата(mempfis_ @ Jul 11 2012, 20:45) *
Порадовало что обработчики UARTs были заменены один в один. Только подкорректировал clear pending interrupt. Watchdog тоже не корректировался.

С LPC2xxx не работал, но когда изучал LPC11 часто пользовался книгами LPC2xxx (Тревора или Редькина) - периферия местами очень похожая.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 17 2012, 15:43
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Еще вопрос, по железу
Софт - Keil 4.xx
Из отладчиков - ULINK2 и J-LINK ULTRA (оба - китайцы)
LPC17xx поддерживает SWD. Хотелось бы как-то освободиться от здорового IDC разъема и использовать "малопиновый" SWD
Как там все правильно подключить? Первый раз с SWD развожу laughing.gif
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jul 17 2012, 17:14
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(toweroff @ Jul 17 2012, 19:43) *
Как там все правильно подключить? Первый раз с SWD развожу laughing.gif

В таких случаях имхо стандартно гуглится какая-нибудь готовая отладка с интересующим камнем и смотрится ее схема. Или читается документация - ничего сложного нету же. sm.gif


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 17 2012, 20:49
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Lotor @ Jul 17 2012, 21:14) *
ничего сложного нету же. sm.gif

параллельно идет ремонт, голова уже пухнет... вот и мнятся всякие шпатели и ротбандты biggrin.gif
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 3 2012, 18:42
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Подниму еще раз, теперь вопрос про NVIC, дабы сомнений уж не осталось

Далее все "утверждения" с оговоркой "я так понимаю"

Pending
Выставляется, если во время прерывания, - прервали с более высоким приоритетом... Нужно сбрасывать/проверять при выходе из прерывания?

Перенос векторов в RAM, VTOR
Просто резервируем область в SRAM под таблицу (с размерностью под свой кристалл), копируем свои вектора
Нужно ли как-то еще неиспользуемые вектора модифицировать? Выравнивание к границе 256 байт, правильно?

Вектора с приоритетом "-"
эту часть как копировать, что с ней вообще и где? из бута отдается управление, как это будет полноценно?

В связи с чем вопрос. Во всех примерах пока для меня куча кода, хотя бы просто на пальцах работу NVIC и 90% вопросов просто не возникнет, да и оставшиеся 10 не захочется задавать sm.gif

Спасибо!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 3 2012, 19:46
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(toweroff @ Aug 3 2012, 21:42) *
Далее все "утверждения" с оговоркой "я так понимаю"

Аналогично: "я так вижу".


Цитата(toweroff @ Aug 3 2012, 21:42) *
Pending
Выставляется, если во время прерывания, - прервали с более высоким приоритетом... Нужно сбрасывать/проверять при выходе из прерывания?

Pending - на ожидании.
Периферия сетит pending и если вектор разрешён - прерывание может произойти.

Цитата(toweroff @ Aug 3 2012, 21:42) *
Нужно сбрасывать/проверять при выходе из прерывания?

Возможно случаи бывают разные, но точно не всегда надо.
И ещё цитата:
Цитата
Note that the pending bit will be automatically cleared by hardware when the
corresponding ISR is entered.

В основном нужно флаги периферийных блоков сбрасывать - источников может быть несколько, а вектор один.
Цитата(toweroff @ Aug 3 2012, 21:42) *
Перенос векторов в RAM, VTOR
Просто резервируем область в SRAM под таблицу (с размерностью под свой кристалл), копируем свои вектора
Нужно ли как-то еще неиспользуемые вектора модифицировать? Выравнивание к границе 256 байт, правильно?

Бывает вроде и 512 байт выравнивание (не помню у кого видел).
И ещё (из UM10360):
Цитата
When setting TBLOFF, you must align the offset to the number of exception entries in the
vector table. The recommended alignment is 256 words, allowing for 128 interrupts.


Цитата(toweroff @ Aug 3 2012, 21:42) *
Вектора с приоритетом "-"
эту часть как копировать, что с ней вообще и где? из бута отдается управление, как это будет полноценно?

А что с приоритетом? Не понял - такие же вектора.
Почти у всех векторов приритет настраивается. Они - никакой не особый случай.
Есть ещё случай - вектора во flash и тогда копировать ничего не надо.
Вектора в рам - это скорей исключение. Зачем их в рам пихать?

Цитата(toweroff @ Aug 3 2012, 21:42) *
эту часть как копировать, что с ней вообще и где? из бута отдается управление, как это будет полноценно?

А что с бутом непонятно? Задавайте вопрос - вместе разберёмся. sm.gif
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Aug 5 2012, 05:51
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(toweroff @ Aug 3 2012, 21:42) *
Перенос векторов в RAM, VTOR


Вопрос - а зачем их переносить в RAM? Если у Вас стоит задача вызвать приложение из загрузчика, то наверняка в приложении вектора прерываний будут расположены во flash и я предполагаю что они также будут выравнены на границу сектора.
Процедура перехода вызова приложения из загрузчика:
Код
typedef void (* func)(void);
void boot_jump(void)
{
  
  
  VTOR = 0x2000; //расположение векторов прерываний в приложении

  register func user_code_entry;
    
  /* Set stack pointer with the first world of the user progrtam
         sp = *((Int32U *) USER_PROGRAM_START);*/
  asm("mov sp,#0x2000");
  asm("ldr sp,[sp,#0]");
    
  user_code_entry = * ((func *)0x2000+1);
  user_code_entry();
}

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 04:39
Рейтинг@Mail.ru


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