|
|
  |
Перерывания от USART, AT91SAM7Sxx |
|
|
|
Jul 8 2008, 11:19
|

Местный
  
Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792

|
Генерится непрерывно прерывание по приёму байта, по форуму искал... Инициализация Код AT91C_BASE_SYS->PIOA_IDR = 0xffffffff; // AT91C_BASE_US0->US_IER = AT91C_US_RXRDY; //* Disable the interrupt on the interrupt controller AT91C_BASE_AIC->AIC_IDCR = 1<<AT91C_ID_US0; //* Save the interrupt handler routine pointer and the interrupt priority AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0] = (unsigned int) RX_interrapt; //* Store the Source Mode Register AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | 2 ; //* Clear the interrupt on the interrupt controller AT91C_BASE_AIC->AIC_ICCR = 1<<AT91C_ID_US0; AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_US0; Обработчик Код void RX_interrapt (void) {
status = AT91C_BASE_US0->US_CSR; status = AT91C_BASE_US0->US_RHR; AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA; AT91C_BASE_SYS->AIC_EOICR = 0; } Срабатывание прерывания проверял брекпоинтом, если убрать брекпоинт, нажать на паузу - продолжить то программа улетает в Код __data_handler: ldr pc,[pc,#+24] ;; Data abort
|
|
|
|
|
Jul 8 2008, 11:43
|

Местный
  
Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792

|
Код __irq void RX_interrapt (void) так?
|
|
|
|
|
Jul 8 2008, 12:04
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Tcom @ Jul 8 2008, 15:50)  Когда подаю питание на девайс и запускаю отлатку,прерывания генерятся. потом останавливаю редактирую код, не связаный с переываниями, запускаю отладку, все перерывания не работают. Как лечить?Не дёргать жеш питание каждый раз. Так у Вас одна проблема или много? В первом посте пишите, что постоянно генерируется прерывание по приему USART, а теперь что прерывания не работают после остановки отладки. Цитата(Tcom @ Jul 8 2008, 15:50)  __irq void RX_interrapt (void) эффект равен 0 Для IAR'а, как я понимаю, слово то же самое. Эффект не может быть равен 0, так как один из вариантов неправильный. После вектора у Вас процессор куда попадает? Сразу читает AIC, или есть еще один обработчик?
|
|
|
|
|
Jul 8 2008, 12:14
|

Местный
  
Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792

|
Цитата(aaarrr @ Jul 8 2008, 15:04)  Так у Вас одна проблема или много? Может проблеммы 2, я просто описал состояние в которм находится железо, может это подтолкнёт к решению моей проблемы. Цитата(aaarrr @ Jul 8 2008, 15:04)  Эффект не может быть равен 0, так как один из вариантов неправильный. После вектора у Вас процессор куда попадает? Сразу читает AIC, или есть еще один обработчик? Вектор один, перывание попадает на обработчик. Это я проверял пошаговым выполнением.
|
|
|
|
|
Jul 18 2008, 07:12
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 6-04-07
Пользователь №: 26 805

|
Хм.. странно, никогда не использовал модификатор __irq и все работал.. а зачем он нужен? объясните плиз..
Сообщение отредактировал Andryha - Jul 18 2008, 07:13
|
|
|
|
|
Jul 18 2008, 08:07
|

Местный
  
Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484

|
Цитата(Andryha @ Jul 18 2008, 11:12)  Хм.. странно, никогда не использовал модификатор __irq и все работал.. Вероятно, у Вас пролог и эпилог прерывания от операционки (FreeRTOS, например). Цитата(Andryha @ Jul 18 2008, 11:12)  а зачем он нужен? объясните плиз.. Чтобы компилятор правильно генерировал пролог и эпилог функции, а так же генерировал код в режиме ARM.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|