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

 
 
 
Reply to this topicStart new topic
> Не могу "выйти" из прерывания USART. помогите.
Budek
сообщение Jun 22 2009, 15:04
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 132
Регистрация: 17-02-08
Из: Уфа
Пользователь №: 35 116



Господа, помогите, пожалуйста. Начал изучать AT91SAM7X256.
В основном цикле тупо мигаю 1-м светодиодом, в обработчике прерывания USART0 делаю вспышку 2-м.
Так вот что не пойму (бьюсь третий день): при отправке символа с компа в обработчик захожу (2-й светодиод вспыхивает 1 раз, как и положено). Но вот в основную программу не выхожу (вернее из обработчика вроде выхожу, но вот куда, неясно) - "висит", 1-й светодиод не мигает.
инициализирую USART вроде верно:
Код
void init_serial (void)
{
AT91C_BASE_PIOA->PIO_PDR=(1<<0)|(1<<1);
AT91C_BASE_PIOA->PIO_ASR=(1<<0)|(1<<1);
AT91C_BASE_PIOA->PIO_BSR=0;
AT91C_BASE_PMC->PMC_PCER=1<<AT91C_ID_US0;
AT91C_BASE_US0->US_MR=AT91C_US_USMODE_NORMAL|AT91C_US_CLKS_CLOCK|AT91C_US_CHRL_8_BITS|
                                          AT91C_US_NBSTOP_1_BIT;
AT91C_BASE_US0->US_BRGR=MCK/(16*115200);
AT91C_BASE_US0->US_TTGR=0;
AT91C_BASE_US0->US_CR=AT91C_US_RXEN|AT91C_US_TXEN;
AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_US0, 1,
                           AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, Usart_c_irq_handler);
AT91C_BASE_US0->US_IER=(1<<0);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
}

такое ощущение, что микроконтроллер "не знает", по какому адресу идти, выходя из обработчика. помогает только ресет.
Спасибо заранее всем.
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
Spoofing
сообщение Jun 22 2009, 16:55
Сообщение #2





Группа: Участник
Сообщений: 11
Регистрация: 21-06-09
Пользователь №: 50 508



А признак конца прерывания? (верно для s256, для х вроде те же регистры)
Код
//AIC_ICCR- регистр команды сброса пр-й = 0xFFFFF128
p_pAic->AIC_ICCR =NU1;//запись любого зн-я

//AIC_EOICR- регистр команды конца пр-я = 0xFFFFF130
p_pAic->AIC_EOICR=NU1;//запись любого зн-я


NU=0xFFFFFFFF через дефайн

Сообщение отредактировал Spoofing - Jun 22 2009, 16:56
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 22 2009, 17:10
Сообщение #3


Гуру
******

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



Цитата(Budek @ Jun 22 2009, 19:04) *
Но вот в основную программу не выхожу (вернее из обработчика вроде выхожу, но вот куда, неясно) - "висит", 1-й светодиод не мигает.

В прерывании что делаете? Источник снимаете? В случае TXRDY нужно или отправить следующий символ/break, или же запретить прерывание/сам передатчик.

Цитата(Spoofing @ Jun 22 2009, 20:55) *
Код
//AIC_ICCR- регистр команды сброса пр-й = 0xFFFFF128
p_pAic->AIC_ICCR =NU1;//запись любого зн-я

Во-первых, в данном случае не нужно; во-вторых, "любое" значение в этот регистр писать нельзя.
Go to the top of the page
 
+Quote Post
Budek
сообщение Jun 22 2009, 17:14
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 132
Регистрация: 17-02-08
Из: Уфа
Пользователь №: 35 116



Спасибо.
Не помогает.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 22 2009, 17:21
Сообщение #5


Гуру
******

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



Да пожалуйста. Вы бы код своего прерывания выложили, вместе с тем, что в стартапе написано. Телепаты уже в отпуске smile.gif
Go to the top of the page
 
+Quote Post
Budek
сообщение Jun 22 2009, 17:55
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 132
Регистрация: 17-02-08
Из: Уфа
Пользователь №: 35 116



Цитата(aaarrr @ Jun 22 2009, 23:21) *
Да пожалуйста. Вы бы код своего прерывания выложили, вместе с тем, что в стартапе написано. Телепаты уже в отпуске smile.gif


обработчик:

Код
void Usart_c_irq_handler(void)
{
unsigned int status;
status = AT91C_BASE_US0 -> US_CSR;
status &= AT91C_BASE_US0 -> US_IMR;
if (status & AT91C_US_RXRDY)   BlincLed(GetCharUsart0()-0x60);
AT91C_BASE_AIC->AIC_ICCR=0xFFFFFFFF;
AT91C_BASE_AIC->AIC_EOICR=0xFFFFFFFF;
}


а вот со стартапом "полный бардак". сейчас один хороший человек пытается его "выправить".
спасибо.
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 22 2009, 18:24
Сообщение #7


Гуру
******

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



Цитата(Budek @ Jun 22 2009, 21:55) *
обработчик:

AT91C_BASE_AIC->AIC_ICCR=0xFFFFFFFF; - не нужно, т.е. вредно.

Цитата(Budek @ Jun 22 2009, 21:55) *
а вот со стартапом "полный бардак". сейчас один хороший человек пытается его "выправить".
спасибо.

Ну, удачи ему.
Go to the top of the page
 
+Quote Post

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

 


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


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