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

 
 
> Мой первы проект на LPC2148 покритекуйте, Организация IRQ прерываний
*SERG
сообщение Nov 29 2007, 10:14
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Посмотрите прект. Контроллер lpc2148 программирую в кейл 3.15b. Особо интерсует правильно ли изменил Startup файл, для использования IRQ прерываний. Всё работает, но сомнения есть. Может вообще всё коряво smile.gif Скажите своё мнение smile.gif
Прикрепленные файлы
Прикрепленный файл  myNXP291107.rar ( 42.71 килобайт ) Кол-во скачиваний: 130
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
defunct
сообщение Nov 29 2007, 10:38
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Дык, а в чем если не секрет состоит изменеие в стартапе?

LDR PC,[PC, #-0x0FF0]
вроде стандартно для keil.
стек Вы тоже не трогали.
Не вижу ничего что могло бы коснуться IRQ.

В c-файле - все ок.
Go to the top of the page
 
+Quote Post
*SERG
сообщение Nov 29 2007, 13:12
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Цитата(defunct @ Nov 29 2007, 13:38) *
Дык, а в чем если не секрет состоит изменеие в стартапе?

LDR PC,[PC, #-0x0FF0]
вроде стандартно для keil.
стек Вы тоже не трогали.
Не вижу ничего что могло бы коснуться IRQ.

В c-файле - все ок.


Я рад что в Си всё ок biggrin.gif
А в стартапе пришлось добавить пару строк
PRESERVE8 ; tell linker: stack alignment is 8-byte
IMPORT IRQ_Handler ; use external FIQ_Handler
без них не работает и смысла этих строк я несовсем понимаю, разжуйте плиз. 05.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 29 2007, 14:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(*SERG @ Nov 29 2007, 16:12) *
Я рад что в Си всё ок biggrin.gif
А в стартапе пришлось добавить пару строк
PRESERVE8 ; tell linker: stack alignment is 8-byte
IMPORT IRQ_Handler ; use external FIQ_Handler
без них не работает и смысла этих строк я несовсем понимаю, разжуйте плиз. 05.gif

Уберите из стартапа строку:
Код
IRQ_Addr        DCD     IRQ_Handler

тогда не нужен будет IMPORT - IRQ_Handler все равно не используется.

А PRESERVE8 из каких соображений добавлен? Во-первых, он там уже есть чуть раньше, а во-вторых, для ARM7TDMI такое выравнивание не нужно, лучше задавить соответствующую ошибку линкера.
Go to the top of the page
 
+Quote Post
*SERG
сообщение Nov 30 2007, 03:00
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Цитата(aaarrr @ Nov 29 2007, 17:06) *
Уберите из стартапа строку:
Код
IRQ_Addr        DCD     IRQ_Handler

тогда не нужен будет IMPORT - IRQ_Handler все равно не используется.

А PRESERVE8 из каких соображений добавлен? Во-первых, он там уже есть чуть раньше, а во-вторых, для ARM7TDMI такое выравнивание не нужно, лучше задавить соответствующую ошибку линкера.


Обе эти строчки на форуме помоему вычитал, или в хелпе, тупо добавил и всё. А какая функция этих строк. зачем они нужны в принцепе?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 30 2007, 09:34
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



IMPORT sym - указывает ассемблеру, что символ sym находится во внешнем файле.
PRESERVE8 - указывает, что в процедурах текущего файла сохраняется выравнивание стека по границе 8 байт. Нужно только для процессоров с инструкциями LDRD/STRD, ARM7 к ним не относится.
Go to the top of the page
 
+Quote Post
*SERG
сообщение Nov 30 2007, 16:42
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Цитата(aaarrr @ Nov 30 2007, 12:34) *
IMPORT sym - указывает ассемблеру, что символ sym находится во внешнем файле.
PRESERVE8 - указывает, что в процедурах текущего файла сохраняется выравнивание стека по границе 8 байт. Нужно только для процессоров с инструкциями LDRD/STRD, ARM7 к ним не относится.

Огроменное спасибо! a14.gif smile.gif
Go to the top of the page
 
+Quote Post
sybirman
сообщение Sep 8 2008, 11:55
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-09-08
Из: Москва
Пользователь №: 39 928



скажите, а в каком месте в стартапе (архив в начале темы) происходит разрешение IRQ прерывания?

код из стартапa:
Код
I_Bit           EQU     0x80           ; when I bit is set, IRQ is disabled


Код
;  Enter IRQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit


правильно ли я понял, что в предыдущей строчке, происходит установка режима IRQ и битов I & F.
если да, то получается что прерывания запрещены ? (вот здесь я скорее всего ошибаюсь)
поясните, пожалуйста.

и еще вопрос, есть ли различие в фунциональности у предыдущей команды и следующими?
Код
     MRS    r0, cpsr
     ORR    r0, r0, #I_Bit:OR:F_Bit;disable IRQ and FIQ interrupts
     MSR    cpsr_c, r0

11111111

для чего нужны 2 верхние команды, если можно было как в стартапе - сделать одной?
MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 8 2008, 17:29
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



В первом случае процессор переводится в режим IRQ с одновременным запретом IRQ и FIQ, во втором - запрещаются IRQ и FIQ в текущем режиме.

P.S. Давайте ссылкам вменяемые имена, если не трудно.


P.P.S. Тут я был не совсем прав:
Цитата(aaarrr @ Nov 30 2007, 13:34) *
PRESERVE8 - указывает, что в процедурах текущего файла сохраняется выравнивание стека по границе 8 байт. Нужно только для процессоров с инструкциями LDRD/STRD, ARM7 к ним не относится.

Выравнивание может требоваться также для некоторых float-библиотек.
Go to the top of the page
 
+Quote Post
sybirman
сообщение Sep 8 2008, 18:26
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-09-08
Из: Москва
Пользователь №: 39 928



Цитата(aaarrr @ Sep 8 2008, 21:29) *
В первом случае процессор переводится в режим IRQ с одновременным запретом IRQ и FIQ,


что-то я совсем запутался.
если происходит запрет irq, то как же тогда происходит выполнение;
Код
__irq void IRQ_Handler (void)
{
IO0CLR=1<<10;
T0TCR = 1;                                      
EXTINT=2;                                    
VICVectAddr=0;                                  
};

это кусок кода из архива в первом посте.

P.S. если нужно, то можно перенести тему в раздел для новичков, а то неудобно как-то, такие вопросы задавать в этом разделе smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 8 2008, 18:41
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sybirman @ Sep 8 2008, 22:26) *
что-то я совсем запутался.
если происходит запрет irq, то как же тогда происходит выполнение;

Просто потом процессор переводится в режим USER с разрешенными прерываниями:
Код
;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR


Цитата(sybirman @ Sep 8 2008, 22:26) *
P.S. если нужно, то можно перенести тему в раздел для новичков, а то неудобно как-то, такие вопросы задавать в этом разделе smile.gif

Почитайте в каком-нибудь букваре (лучше в Technical Reference Manual от ARM) о режимах работы процессора, и все встанет на свои места.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Sep 8 2008, 18:48
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(sybirman @ Sep 8 2008, 15:55) *
скажите, а в каком месте в стартапе (архив в начале темы) происходит разрешение IRQ прерывания?

Вот тут:
Код
;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR


Упс, опоздал smile.gif

Сообщение отредактировал Qwertty - Sep 8 2008, 18:49
Go to the top of the page
 
+Quote Post

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

 


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


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