大家好、
我使用 TL16c754b 作为 UART 扩展。 当 FIFO 被禁用、中断被启用时、通过轮询 LSR 位5或位6直到变为高电平并发送下一个数据、它运行良好。 然而、当 FIFO 被启用时、等待直到通过将 LSR 位5或位6轮询 为高电平并发送下一个数据、数据是否会丢失? 例如、我将 ASCII 字符从"0"发送到"9"、但我不会接收"0"、"1"或"5"、等等。为什么?
硬件信息、DSP 6713作为控制器。EMIF CE3配置为异步8宽度。
软件代码如下(部分)。
int UART_SENDBYTE (unsigned int 端口、unsigned char 数据)
{
volatile unsigned char 金像 stmp=0;
volatile unsigned char tmpst=0x0;
volatile unsigned char tmp=0x0、tmp1、tmp2;
volatile unsigned int lsr_falt;
lsr_falt=*(unsigned int *)(bb00000000004);
tmp1=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x4);
tmp2=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x5);
金像=*(volatile unsigned char *)(base_uart +(端口<<(20-2))+ UART_LSR);//
tmpst=(金像堆&(<LSR_TRANSMIT_AND_SHIFT_EMPTY));//
//tmpst=(金像&(<LSR_TRANSMIT_EMPTY));
if (tmpst)//if 为空、然后发送
{
*(volatile unsigned char *)(base_uart +(端口<<(20-2))+UART_THR)=数据;
return (Sendok);
}
其他
{
lsr_falt=*(unsigned int *)(bb00000000004);
tmp1=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x4);
tmp2=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x5);
RETURN (SENDERROR);
}
}
int UART_SEND_BYTE_while (unsigned int 端口、unsigned char 数据)
{
while (UART_SENDBYTE (port、data)!= Sendok);
}
MAIN ()
{
for (i=0;i<1000;i++)
for (k='0';k<='9';k++)
{
UART_SEND_BYTE_while (UART1、k);
}
}
//////////////////////////////////////////
这里有一些问题、
1、DSP 在200m 频率下工作、它是否太快? 但我尝试在两个发送之间延迟、不起作用
2、您能给我一个用于测试的参考代码吗?
3、当处于 FIFO 模式时、一旦 LSR 位5为1、那么我只向 THR 发送一个数据、这是否正常? 还是应该发送到 FIFO 已满?
4、我按如下方式初始化16C754、首先通过拉高复位来重置16c754、然后设置波特率、然后 MCR、FCR、IER、LCR、这是否正常?
5、
感谢详细的解释。 这对您有很大帮助。
此致、
Praveen GD