|
Мой первы проект на LPC2148 покритекуйте, Организация IRQ прерываний |
|
|
|
 |
Ответов
(1 - 11)
|
Nov 29 2007, 13:12
|

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

|
Цитата(defunct @ Nov 29 2007, 13:38)  Дык, а в чем если не секрет состоит изменеие в стартапе?
LDR PC,[PC, #-0x0FF0] вроде стандартно для keil. стек Вы тоже не трогали. Не вижу ничего что могло бы коснуться IRQ.
В c-файле - все ок. Я рад что в Си всё ок А в стартапе пришлось добавить пару строк PRESERVE8 ; tell linker: stack alignment is 8-byte IMPORT IRQ_Handler ; use external FIQ_Handler без них не работает и смысла этих строк я несовсем понимаю, разжуйте плиз.
|
|
|
|
|
Nov 29 2007, 14:06
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(*SERG @ Nov 29 2007, 16:12)  Я рад что в Си всё ок А в стартапе пришлось добавить пару строк PRESERVE8 ; tell linker: stack alignment is 8-byte IMPORT IRQ_Handler ; use external FIQ_Handler без них не работает и смысла этих строк я несовсем понимаю, разжуйте плиз.  Уберите из стартапа строку: Код IRQ_Addr DCD IRQ_Handler тогда не нужен будет IMPORT - IRQ_Handler все равно не используется. А PRESERVE8 из каких соображений добавлен? Во-первых, он там уже есть чуть раньше, а во-вторых, для ARM7TDMI такое выравнивание не нужно, лучше задавить соответствующую ошибку линкера.
|
|
|
|
|
Nov 30 2007, 03:00
|

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

|
Цитата(aaarrr @ Nov 29 2007, 17:06)  Уберите из стартапа строку: Код IRQ_Addr DCD IRQ_Handler тогда не нужен будет IMPORT - IRQ_Handler все равно не используется. А PRESERVE8 из каких соображений добавлен? Во-первых, он там уже есть чуть раньше, а во-вторых, для ARM7TDMI такое выравнивание не нужно, лучше задавить соответствующую ошибку линкера. Обе эти строчки на форуме помоему вычитал, или в хелпе, тупо добавил и всё. А какая функция этих строк. зачем они нужны в принцепе?
|
|
|
|
|
Sep 8 2008, 11:55
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 8 2008, 17:29
|
Гуру
     
Группа: Свой
Сообщений: 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-библиотек.
|
|
|
|
|
Sep 8 2008, 18:26
|
Участник

Группа: Участник
Сообщений: 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. если нужно, то можно перенести тему в раздел для новичков, а то неудобно как-то, такие вопросы задавать в этом разделе
|
|
|
|
|
Sep 8 2008, 18:41
|
Гуру
     
Группа: Свой
Сообщений: 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. если нужно, то можно перенести тему в раздел для новичков, а то неудобно как-то, такие вопросы задавать в этом разделе  Почитайте в каком-нибудь букваре (лучше в Technical Reference Manual от ARM) о режимах работы процессора, и все встанет на свои места.
|
|
|
|
|
Sep 8 2008, 18:48
|
Местный
  
Группа: Свой
Сообщений: 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 Упс, опоздал
Сообщение отредактировал Qwertty - Sep 8 2008, 18:49
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|