TI中文支持网
TI专业的中文技术问题搜集分享网站

关于TM4C129X串口接收中断问题

我用UART4与DSP连接,dsp通过UART发送命令,TM4C129X收到后作出相应指令。

现在我用接收中断的方式,因为TM4C129X还有其他的任务在做不能一直等在UART_readPolling这个函数中,所以采用的中断方式。

但是进入中断callback函数之后,只能读到第2个byte,并没有读到第一个byte,比如发送{0x90,0x03,0x24,0x4b,0x6f,0xa5},进入中断之后 ,

UART_readPolling(gUart4Hdl, inputheadChar, 1) 只能读到0x03开始的,我理解是FIFO是16bytes的,设了level是1/8所以,是接收到2个byte才产生中断;那需要什么方法才能将接收到的数据,都读到呢?

禁用FIFO之后,相当于深度只有1了,当DSP发送过来数据之后,就会产生over错误中断,也不能正常接收数据。

代码如下:

UART_Params_init(&UartParams);

UartParams.baudRate = 9600;
UartParams.readDataMode=UART_DATA_TEXT;
UartParams.readMode = UART_MODE_CALLBACK;   /*!< Mode for all read calls */
UartParams.readCallback = Drv_UartCharGet;      /*!< Pointer to read callback */
UartParams.readEcho = UART_ECHO_OFF;

gUart4Hdl = UART_open(Board_UART4, &UartParams);
if (gUart4Hdl == NULL)
{
System_printf("Error open UART4\n");
return FAIL;
}

UARTIntClear(UART4_BASE, UART_INT_RT);
UARTIntEnable(UART4_BASE, UART_INT_RT);
UARTFIFOLevelSet(UART4_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8);
 UARTFIFOEnable(UART4_BASE);
UARTDisableSIR(UART4_BASE);

void Drv_UartCharGetUser(void)
{

UINT8 i;

if(UARTCharsAvail(UART4_BASE))
{

   UART_readPolling(gUart4Hdl, inputheadChar, 1);

  if(inputheadChar[0] == 0x90)

{
for(i=1; i<5; i++)
{
UART_readPolling(gUart4Hdl, &inputheadChar[i], sizeof(UINT8));
}

}

}

}

Jacky Xu:

你用的操作系统?

如果没用,那你的中断子程序是什么?

Matt Tian:

回复 Jacky Xu:

用的sys/bios

xyz549040622:

回复 Matt Tian:

不行的话,用DMA传。一个字节的FIFO也是可以的。你的处理方式不对,收一个存一个是最简单的。

赞(0)
未经允许不得转载:TI中文支持网 » 关于TM4C129X串口接收中断问题
分享到: 更多 (0)