bsp_US1_RX_int (u8 Data) 这一条是串口接收中断的时候调用,并把出带入。
bsp_US1_RX (u8 * Data) 这一条是取出缓冲区的数据
现在问题是这样的,是不是的数据会丢一两个位,并且丢了之后,以后收到的数据都会出现错位!
正确的应该是 0123456789 ,但错位后收到的数据 5012345678。
u16 bsp_US1_RX (u8 * Data)
{
short temp=0;
while(US1_RX_FIFO_user)
{
*Data++ = US1_RX_FIFO[US1_RX_FIFO_tail++];
if(US1_RX_FIFO_tail == US1_RX_FIFO_Siz)
US1_RX_FIFO_tail = 0;
US1_RX_FIFO_user--;
temp++;
}
return temp;
}
inline s8 bsp_US1_RX_int (u8 Data)
{
if(US1_RX_FIFO_Siz - US1_RX_FIFO_user -1 )
{
US1_RX_FIFO[US1_RX_FIFO_head++] = Data;
if(US1_RX_FIFO_head == US1_RX_FIFO_Siz)
US1_RX_FIFO_head = 0;
US1_RX_FIFO_user++;
}
else
{
return RXbuff_overflow;
}
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#define UART0_FIFO_SIZE 12
typedef struct
{
volatile uint8 in;
volatile uint8 out;
uint8 fifo[UART0_FIFO_SIZE];
}UART_FIFO;
UART_FIFO uart0;
void uart0_fifopush(int8 dat)
{
uart0.fifo[uart0.in] = dat;
if (uart0.in < (UART0_FIFO_SIZE - 1)) uart0.in++; //判断队列是否已满
else uart0.in = 0; //队列满,覆盖头部
}
int8 uart0_fifopop(void)
{
int8 tmp = uart0.fifo[uart0.out];
if (uart0.out < (UART0_FIFO_SIZE - 1)) uart0.out++;
else uart0.out = 0;
return tmp;
}
好的,谢谢
一周热门 更多>