TI技术支持和各大侠好,本人使用AM3352处理器的UART5 IRDA功能,处理器串口5连接TFDU4101红外收发芯片,想要实现红外收发功能,比如我通过IRDA发送0X18,那么就将数据通过UART5 IRDA发到TFDU4101,然后TFDU4101将数据转成红外信号转发出去。我的问题是当我将0X18写到UART5的发送缓冲区时,UART5和TX脚发送了很多莫名的信号,下面是示波器截图
两张图中上图为整体的发送信号捕抓,下图为上面红方框的放大图片。经本人试验,当我发送0X18时,0X18是发送出去的,只是发送在众多数据当中。
下面是我的IRDA初始化代码:
//复位UART5
*SYSC |= 0X0002;
printf("uart reset!\n");
tmp = *SYSS;
while(!tmp)//复位
{
printf("wailt uart reset!\n");
printf("UART MODLE :SYSS = 0x%04X\n",tmp);
usleep(1);
}
*MDR1 &=0Xfff8;//进入UART 16X模式
printf("进入UART 16X模式 :MDR1 = 0x%04X\n",*MDR1);
*MDR2 |=0X0008;//进入UART 脉冲整形模式
printf("进入UART 脉冲整形模式 :MDR2 = 0x%04X\n",*MDR2);
*LCR = 0x03;//字长8位1个停止位
printf("数据字长8位,1个停止位无奇偶校验:\nLCR = 0x%04X\n",*LCR);
*ACREG &= 0xFF7F;//SIR脉冲宽度为3/16us
printf("SIR脉冲宽度为3/16us :ACREG = 0x%04X\n",*ACREG);
//*MDR1 |=0X07;//禁止外设
//*LCR = 0xBF;
//*EFR |= 0x10;
*MDR1 |=0X0001;//开启SIR模式
printf("开启SIR模式 :MDR1 = 0x%04X\n",*MDR1);
*LCR |= 0x0080;
//*LCR = 0x0080;
printf("允许配置波特率:LCR = 0x%04X\n",*LCR);
*DLL = 0X1A;
*DLH = 0X00;
printf("DLL = %X ,DLH = %X!\n",(unsigned char)*DLL ,(unsigned char)*DLH);
*LCR &= 0xff7f;
printf("退出配置波特率:LCR = 0x%04X\n",*LCR);
//*FCR &= 0XFFFFFFFE;
printf("禁止FIFO:FCR = 0x%04X\n",*FCR);
//*MCR |=0X01;
//*IER |= 0X02;//使能中断
//*TXFLL |=0X01;
//*EBLR = 0x08;
printf("查看SCR状态:SCR = 0x%04X\n",*SCR);
printf("查看TXFLL状态:TXFLL = 0x%04X\n",*TXFLL);
printf("查看TXFLH状态:TXFLH = 0x%04X\n",*TXFLH);
printf("查看TLR状态:TLR = 0x%04X\n",*TLR);
*THR = 0x18;//发送0X18
清问我的初始始化对吗?哪时有遗漏?
下面是的执行代码的打印数据:
进入UART 16X模式 :MDR1 = 0x0000
进入UART 脉冲整形模式 :MDR2 = 0x0008
数据字长8位,1个停止位无奇偶校验:
LCR = 0x0003
SIR脉冲宽度为3/16us :ACREG = 0x0000
开启SIR模式 :MDR1 = 0x0001
允许配置波特率:LCR = 0x0083
DLL = 1A ,DLH = 0!
退出配置波特率:LCR = 0x0003
禁止FIFO:FCR = 0x0000
查看SCR状态:SCR = 0x0000
查看TXFLL状态:TXFLL = 0x0000
查看TXFLH状态:TXFLH = 0x0000
查看TLR状态:TLR = 0x0000
查看LSR状态:LSR = 0x0003
查看LSR状态:LSR = 0x0083
OK!
sawi wu:
我的问题解决了
Jian Zhou:
回复 sawi wu:
能否给大家share下解决方法,谢谢