starterware上的uartEcho中的例子中配置uart0的FIFO triggle 值为1,我想配置FIFO大些,有些疑惑,修改的过程如下:
1.FIFO配置
#define TX_TRIGGLE_LEVEL 4
#define RX_TRIGGLE_LEVEL 60
void uart_fifo_configure(void)
{
uint32_t fifoConfig = 0;
fifoConfig = UART_FIFO_CONFIG(UART_TRIG_LVL_GRANULARITY_1,
UART_TRIG_LVL_GRANULARITY_1,
TX_TRIGGLE_LEVEL,
RX_TRIGGLE_LEVEL,
1,
1,
UART_DMA_EN_PATH_SCR,
UART_DMA_MODE_0_ENABLE);
UARTFIFOConfig(SOC_UART_0_REGS,fifoConfig);
}
2. 使能中断
IntMasterIRQEnable(); //Enable IRQ
IntAINTCInit(); //Init IRQ
UARTIntEnable(SOC_UART_0_REGS,UART_INT_RHR_CTI);
3.中断服务程序
case UART_INTID_RX_THRES_REACH:
case UART_INTID_CHAR_TIMEOUT:
{
lcrRegValue = UARTRegConfigModeEnable(SOC_UART_0_REGS, UART_REG_OPERATIONAL_MODE);
while(UARTCharsAvail(SOC_UART_0_REGS))
{
uart_interface[0].uart_rx_buf[uart_interface[0].uart_rx_write_pos] = (HWREG(SOC_UART_0_REGS+ UART_RHR));
uart_interface[0].uart_rx_write_pos++;
uart_interface[0].uart_rx_write_pos %= UARTMAXBUF;
}
HWREG(SOC_UART_0_REGS + UART_LCR) = lcrRegValue;
}
nCount++;
break;
在第三步,我的测试如下
1)用调试器下载程序之后,按F8运行,在PC上发送一串字符串,发送完之后,暂停程序,发现nCount值为字符串的长度(nCount已经初始化为0),说明来了一个字符就发生中断了。然后我怀疑到FIFO triggle设置失败。有了第二个测试。
2) 下载程序之后,在中断开始位置设置断点,然后F8运行,在PC上发送一串字符串,发送完之后,中断发生,断下之后按F8继续,之后断点没有起作用,说明没有进入中断,暂停程序之后, 发现nCount值为1,说明只有产生了一个中断,查看buffer,字符全部接收完成。说明FIFO是已经启用的。
3) 根据2的测试,再做一次测试,步骤与2相同,只是将断点的位置设置在中断的结束位置。发现只接收了一个字符,并且接下来,还发生了一次中断,接收了所有的字符。
以上设置断点的作用其实就是一个延时的作用,通过测试,说明其triggle值为1。
FIFO设置均使用starterware中提供的函数:UARTFIFOConfig,查看其实现,跟TRM的描述没有什么区别。
请问,可能是什么原因?
谢谢。