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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Проба ARM, начал с LPC2134 c IAR
arttab
сообщение Feb 25 2007, 15:01
Сообщение #16


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Со стеками стало понятней. Теперь вопросы по векторам прерываний. Как задать основные (их штук 6 кажеться) и "расширенные" (где по флагам идет разбор что конкретно случилось)?
И по документации фигня на lpc - скачал pdf, а в нем регистры не расписаны и порядок зпдания ни на PLL, ни на прочее.
Сергей Борщ как то Вы хитро PLL иницилизировали. Будем искать.

Разобраться в Вашем проекте сложно - 5 файлов Вы сами делали для scmRTOS (не считая 2 главных в проекте). Поищу инфу как это по шагам делать.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 25 2007, 16:02
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arttab @ Feb 25 2007, 14:01) *
Теперь вопросы по векторам прерываний. Как задать основные (их штук 6 кажеться) и "расширенные" (где по флагам идет разбор что конкретно случилось)?
Почитайте эту ветку. При чтении заменяйте AT91C_BASE_AIC->AT91C_AIC_IVR и AT91C_BASE_AIC->AIC_EOICR на VICVectAddr и получите то же самое для LPC.
Цитата(arttab @ Feb 25 2007, 14:01) *
И по документации фигня на lpc - скачал pdf, а в нем регистры не расписаны и порядок зпдания ни на PLL, ни на прочее.
Это похоже вы даташит скачали, а регистры и устройство периферии расписано в User Manual.
Цитата(arttab @ Feb 25 2007, 14:01) *
Сергей Борщ как то Вы хитро PLL иницилизировали. Будем искать.
Казалось, что прямо по мануалу. Записал коэффициенты, запустил, дождался захвата, переключил тактирование на PLL.

Цитата(arttab @ Feb 25 2007, 14:01) *
Разобраться в Вашем проекте сложно - 5 файлов Вы сами делали для scmRTOS (не считая 2 главных в проекте). Поищу инфу как это по шагам делать.
Не понял что вы тут хотели сказать. Да, порт scmRTOS делал я. Да, в этот пример я взял файлы .xcl, .mac и файлы проекта оттуда. С тем же успехом мог бы создать их заново, но смысл? Что касается файлов - мне удобнее много мелких логически законченных файлов чем один большой. В проекте:
LPC_bits.h - опиcание битов регистров периферии. Описание их в ioLPC2xxx.h через битовые поля часто неудобно.
LPC_UART.h - описание регистров UART в виде структуры. Позволяет по указателю одинаково обращаться к любому uart: к UART0 и к UART1. Тоже отстутствует в ioLPC2xxx.h. Подобное есть в ioAT91xxx.h
circ_buff.h - шаблон кольцевого буфера. Поскольку может использоваться не только с UART - вынесен в отдельный файл.
UART.h - собственно класс UART.
main.cpp - инициализация процессора, пример использования UART.
Vectors.s79 - ветвление по адресу из контроллера прерываний. Реализация таким образом мне кажется наиболее оптимальной по скорости. Почему - описывал в приведенной выше ветке.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 08:43
Сообщение #18


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Спасибо!
Т.е. на асме можно так объявить прерывания (файл тапв .s79):
EXTERN CODE32 (Undef_Handler?A)
EXTERN CODE32 (SWI_Handler?A)
EXTERN CODE32 (Pabt_Handler?A)
EXTERN CODE32 (Dabt_Handler?A)
EXTERN CODE32 (IRQ_Handler?A)
EXTERN CODE32 (FIQ_Handler?A)

Vectors: LDR PC, Reset_Addr
LDR PC, Andef_Addr
LDR PC, SWI_Addr
LDR PC, Pabt_Addr
LDR PC, Dabt_Addr
NOP
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr

Reset_Addr: DD Reset_Handler
и т.д.
правильно?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 11:04
Сообщение #19


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Или предыдущее только в кейле пройдет?
А под IAR надо как Вы писали:

CODE32
COMMON INTVEC:CODE:ROOT
org 0x00000018
LDR PC, VICVectAddr
END
а в Си:

__irq __arm void IRQ_Handler1() {

.............

VICVectAddr->VIC_EOICR = 0;
}

__irq __arm __nested void IRQ_Handler2() {

.............

VICVectAddr->VIC_EOICR = 0;

но тогда как быть с другими ситуациями (от SWI, FIQ и прочии)?
и где узнать названия прерываний (IRQ_Handler1(), IRQ_Handler2())? в хелпе на IAR не нашел. А VICVectAddr это тыпа метка с произвольным именем. Не ошибаюсь?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 13:25
Сообщение #20


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Немного распутался. Имена векторов объявлены в iolpc2134.ddf
Значит имена возьму оттуда.
Хотя не понял как связаны VICIRQStatus с AIC_IVR. И что будет ля FIQ, SWI....


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2007, 14:10
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arttab @ Feb 26 2007, 12:25) *
Немного распутался. Имена векторов объявлены в iolpc2134.ddf
Значит имена возьму оттуда.
Хотя не понял как связаны VICIRQStatus с AIC_IVR.
Никак. Аналог AIC_IVR (AIC Interrupt Vector Register) у AT91SAM7 это VICVectAddr (VIC vector address) у LPC2xxx.
Отступление: любое прервание можно назначить генернить IRQ или FIQ запрос.
В VICIRQStatus биты указывают какие из разрешенных и назначенных как IRQ прерываний сработали (флаги). При срабатывании прерывания IRQ контроллер (VIC) помещает адрес его обработчика в VICVectAddr. Откуда он читается и по нему осуществляется переход: LDR PC, VICVectAddr.

Вы документацию вообще не читаете?

Цитата(arttab @ Feb 26 2007, 12:25) *
И что будет ля FIQ, SWI....
для FIQ и SWI будут функции с квалификаторами __fiq и __swi. FIQ ветвлений не предусматривает, поэтому и обработчик только один:
Код
#pragma vector = 0x1C
__fiq void FIQ_Handler()
{
  .....
}
Про swi прочитайте в описании компилятора - там может быть много обработчиков и им можно передавать параметры.
Переходы по векторам DataAbort, PrefetchAbort и Undef могут быть описаны только на асме (об этом писалось в ветке, ссылку на которую я приводил).
Переход по ResetVector осуществляется в библиотечной cstartup, вам про нее думать не нужно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 19:52
Сообщение #22


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Цитата
Вы документацию вообще не читаете?

Извените, отвлекают. Иногда основательно и забыл, то что уже разбирал.
Перечитываю первоисточники , в частности Мартина.
настройка PLL у Вас действительно как в рекомендации. Только я не понял почему при M=5 и P=2 в книге получилось 0x00000024 (стр.74)

По аналогии для AVR искал в каком файле обозначены имена векторов, регистров. Надеюсь уже не ошибусь ioLPC2134.h.
в секции ** VIC Interrupt channels вектора и перечислены, а в секции
** VIC привязка к адресам.
Продолжу перечитывать и далее углубляться.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 1 2007, 19:58
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Сергей Борщ @ Feb 21 2007, 13:21) *
Вот, надергал из проекта. Компилится, но проверить сейчас не на чем. Правда С++, но думаю идея будет понятна.
Нашел время проверить. Отловил пару ошибок. Исправленная версия прилагается.
Прикрепленные файлы
Прикрепленный файл  LPC_uart.zip ( 21.29 килобайт ) Кол-во скачиваний: 109
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 18:52
Рейтинг@Mail.ru


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