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

 
 
> опять USART на 16 меге, прерывание по приёму
*SERG
сообщение Jan 29 2006, 08:11
Сообщение #1


Местный
***

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



Регистры настроил так:

UCSRA=0x00;
UCSRB=0B11011000;
UCSRC=0B10000110;
UBRRH=0x00;
UBRRL=0x65;

подпрограммы прерывания

interrupt [USART_RXC] void usart_rx_isr(void)
{

prinat_ussap=UDR;
est_dannie=1;
zapis_end=0;

}


// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
#asm
nop;
#endasm
}

Пишу в CVAVR.

Проблемма в том, что когда приходит первый байт, прерывание не происходит, а вот когда уже второй байт пришёл, то происходит прерывание, переменной "prinat_ussap" присваивается значение первого байта blink.gif
А теоретически при приходе первого байта доложно происходить прерывание. Регистр UCSRB, больше не трогаю, все прерывания разрешаю в самом начале, больше не запрещаю.
Где собака порылась??? smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ALexx
сообщение Feb 1 2006, 14:22
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Инициализируюсь следующими функциями:

#define AsyncNormalBaud(f) (_MCU_CLOCK_FREQUENCY_/(16*f))-1

/*******************************************************************************
* Function Name : USART_AsyncInit
* Description : Configure USART as UART
*******************************************************************************/
void USART_AsyncInit(unsigned char UCSRA_Mode, unsigned char UCSRB_Mode){
UCSRA=UCSRA_Mode;
UCSRB=UCSRB_Mode;
}

/*******************************************************************************
* Function Name : USART_AsyncOpen
* Description : Open UART for transmission
*******************************************************************************/
void USART_AsyncOpen( unsigned long Baud, Usart_CharSize Size,
Usart_StopBits StopBits, Usart_Parity Parity){

UCSRC=0x00; //Access to UBRRH
// Set the baud rate
if(UCSRA & U2X) Baud=AsyncDoubleBaud(Baud); // Turbo
else Baud=AsyncNormalBaud(Baud);
UBRRH=(unsigned char)Baud>>8;
UBRRL=(unsigned char)Baud;
// Set frame format
UCSRC=USCRC_ACCESS | Size | StopBits | Parity;
// Enabling port
UCSRB|=(TXEN | RXEN);
// Clear buffers
RxIndex=0; TxIndex=0;
RxFlag=0; TxFlag=0;
}


Инициализация выглядит так:

USART_AsyncInit(0,TXCIE | RXCIE);
USART_AsyncOpen(9600,CharLen_8,OneStop,NoParity);
.
.
.
asm("SEI")

Все работает уже давно и много ;-))
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:43
Рейтинг@Mail.ru


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