Возникла задача реализовать общение между контроллером и ПК.
Сама передача работает. т.е контроллер принимает символы и отправляет, но при попытке организовать прерывание по приему символа-оно просто не срабатывает. вот фрагменты кода на строгий суд:
используется отладочная плата STK500
CODE
extern THD44780Service Lcd;
extern char c;
void TDebugSerial::Init() //инициализация USART
{
/* Enable double speed */
UCSR1A = (1 << U2X);
/* Enable receiver, transmitter and interrupts */
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1);
/* 8 bit data */
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10) ;
/* high byte of UART speed */
UBRR1H = (8000000 /(19200 * 8L) - 1) >> 8;
/* low byte of UART speed */
UBRR1L = (uint8_t)(8000000 / (19200 * 8L)-1);
}
......
ISR(USART1_RX_vect)//организация прерывания по приему символа
{
uint32_t i=98765432; //проверка срабатывания прерывания
Lcd.WriteInt(i); //проверка срабатывания прерывания
}
extern char c;
void TDebugSerial::Init() //инициализация USART
{
/* Enable double speed */
UCSR1A = (1 << U2X);
/* Enable receiver, transmitter and interrupts */
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1);
/* 8 bit data */
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10) ;
/* high byte of UART speed */
UBRR1H = (8000000 /(19200 * 8L) - 1) >> 8;
/* low byte of UART speed */
UBRR1L = (uint8_t)(8000000 / (19200 * 8L)-1);
}
......
ISR(USART1_RX_vect)//организация прерывания по приему символа
{
uint32_t i=98765432; //проверка срабатывания прерывания
Lcd.WriteInt(i); //проверка срабатывания прерывания
}
Lcd.WriteInt(i)---функция вывода на дисплей жк-индикатора-в главных циклах и других функция срабатывает. В этом же прерывании просто молчание и никакой реакции. вместо нее даже пытался менять состояние светодиодов-все равно молчание.