USART с использованием кольцевого буфера
Добавлено: Пн авг 01, 2011 10:57:59
Нужно передавать даные по USART через кольцевой буфер,всё сделал как написано в
http://microsin.ru/content/view/1098/44/ , МК ATmega16,компилятор WinAVR. Проблемма в том что каждый раз дважды отсылается первое число
,как можно исправить проблемму?
http://microsin.ru/content/view/1098/44/ , МК ATmega16,компилятор WinAVR. Проблемма в том что каждый раз дважды отсылается первое число
,как можно исправить проблемму?
Код: Выделить всё
#define BUF_SIZE 16
#define BUF_MASK (BUF_SIZE-1)
unsigned char idxIN_TX, idxOUT_TX;
unsigned char TX_Buffer [BUF_SIZE];
void Write_TX_Buffer(unsigned char value)
{
if (idxIN_TX == idxOUT_TX) //буфер пустой, запись значения в для передачи по USART
{
UDR=value;
}
TX_Buffer[idxIN_TX++] = value;
idxIN_TX &= BUF_MASK; // if inxIN=15,then inxIN=0;
}
void Read_TX_Buffer(void)
{
if (idxIN_TX != idxOUT_TX)
{
UDR = TX_Buffer[idxOUT_TX++];
idxOUT_TX &= BUF_MASK;
}
}
void task2()
{
time2=t2;
Write_TX_Buffer(1);
Write_TX_Buffer(2);
Write_TX_Buffer(3);
Write_TX_Buffer(4);
Write_TX_Buffer(5);
Write_TX_Buffer(6);
}
ISR(USART_TXC_vect)
{
Read_TX_Buffer();
}
int main(void)
{
fof(;;);
}