|
Прерывания в AT91SAM7S, Помогите!!!Я в очаянии.... |
|
|
|
Oct 17 2009, 13:12
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 4-03-09
Пользователь №: 45 664

|
 Привет Всем. Помогите, уже несколько дней мучаюсь на д прерыванием IRQ1 в AT91SAM7S256, перепробовал уйму вариантов, увы Вот один из вариантов: CODE #include "Board.h"
#define EXT_OC 18432000 // Exetrnal ocilator MAINCK #define MCK 48054857 //================================================================= #define IRQ_1 (1<<30) #define LED_1 (1<<26) /////////////////////////////////////////////////////////////////// #define IRQ1_INTERRUPT_LEVEL 5
char flag = 0; char dum; //обработчик прерывания от IRQ1 void button(void){ AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED_1); /* if( flag ==1 ) { AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED_1); flag = 0; } else { AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LED_1); flag = 1; }; */ dum = AT91C_BASE_PIOA->PIO_ISR;//разрешить следующее прерывание IRQ1(сброс ВСЕХ прерываний) dum = dum; }; //инициализация внешнего прерывания на линии IRQ1 void irq_interrupt_init(void){
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, IRQ_1); AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, IRQ_1, 0); AT91F_PIO_CfgInputFilter(AT91C_BASE_PIOA, IRQ_1);//включение входного фильтра для линии IRQ1 AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, AT91C_ID_IRQ1 ); AT91C_BASE_AIC->AIC_IDCR = (1<<31); AT91C_BASE_AIC->AIC_SMR[31] = (0x1<<5)|(0x6); AT91C_BASE_AIC->AIC_SVR[31] = (unsigned int)button; AT91C_BASE_AIC->AIC_IECR = (1<<31); // AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_IRQ1, 2, 2, button); //идентификатор устройства, приоритет, тип чувствительности, указателт на обработчик // AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_IRQ1); };
int main( void ){ AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5<<24);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED_1);
irq_interrupt_init();
for (;;) {
} }
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
|
 |
Ответов
|
Oct 17 2009, 19:43
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 4-03-09
Пользователь №: 45 664

|
Я ничего не делал с адресом 0x18, просто в литературе на эту тему ни чего не нашёл. (я только начинаю разбираться с ARM, пока что освоил, только: таймер(режим генератора), вывод синхросигналов на PCKn и PWM) А прерывания nIRQ, необходимо для приёма стробов от внешнего устройства, с частотой, примерно, 20000 выборок в секунду. Цитата Вы часом CPSR/SPSR с PIO_PSR не путаете, а? Я имел в виду PIO_PSR. Да, и подскажите, пожалуйсто, алгоритм настройки какого либо устройства в составе AT91SAM7S (если можно, на примере раннее описаной проблемы)
|
|
|
|
Сообщений в этой теме
DAPA Прерывания в AT91SAM7S Oct 17 2009, 13:12 aaarrr Цитата(DAPA @ Oct 17 2009, 17:12) dum = A... Oct 17 2009, 15:49 DAPA Прошу прощения, разве глобальные прерывания разреш... Oct 17 2009, 17:18 aaarrr Цитата(DAPA @ Oct 17 2009, 21:18) Прошу п... Oct 17 2009, 18:01 DAPA ЦитатаВектор, на который процессор переходит по си... Oct 17 2009, 19:01 aaarrr Цитата(DAPA @ Oct 17 2009, 23:01) Процесс... Oct 17 2009, 19:12 DAPA ЦитатаНет, разрешаются битом I регистра PSR.
В дат... Oct 17 2009, 19:15 aaarrr Цитата(DAPA @ Oct 17 2009, 23:15) В даташ... Oct 17 2009, 19:20 DAPA Пардон, а не подскажите как в IAR называется регис... Oct 17 2009, 20:38 aaarrr Цитата(DAPA @ Oct 18 2009, 00:38) Пардон,... Oct 17 2009, 21:04 DAPA Кстати о регистре CPSR, в файле Cstartup.s обнаруж... Oct 17 2009, 22:20 DAPA Урррррааааааа!!!!
Заработало.
Всё ... Oct 18 2009, 15:51 DAPA Прошу прощения, что не по адресу
А как закрыть ... Oct 18 2009, 19:28 rezident Цитата(DAPA @ Oct 19 2009, 01:28) Прошу ... Oct 19 2009, 01:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|