在使用TL16C554时出现了如下问题
1、波特率设置与资料不符
在使用晶振为1.8432MHz时,波特率配置为9600bps,资料上显示除数应配置为12(0x0d),但配置为12时发出的是乱码。经过我们使用示波器测试发现分频不对,将除数配置为33(0x21)时,波形与标准波形相近。
2、有几个字符接收不了
在使用晶振1.8432MHz,波特率9600bps,除数配置为33(0x21)时,发现有几个字符接收不了(0xfd、0xfe、0xff),当上位机发送这些字符时,现象为:芯片中断清不掉,始终处于中断状态,重新初始化也无效。
测量发现中断脚的电压也不正常,在2.1~2.5V之间。并且是四个扩展串口都处于故障状态,我只向其中的一个口发了数据(1个字符),没有超过其fifo。
注:其他字符都能正常接收,只有给他发送0xff、0xfe和0xfd中的任一字符时就死掉了。
以下为程序的初始化代码
void intial_ser_a(void)
{
//串口A
SERA_LCR = 0x83; //8数据位、1停止位、无奇偶校验
//除数锁存访问位 LCR.7=1时可对DLL、DLM进行操作
SERA_DLM = 0x00;
{
//串口A
SERA_LCR = 0x83; //8数据位、1停止位、无奇偶校验
//除数锁存访问位 LCR.7=1时可对DLL、DLM进行操作
SERA_DLM = 0x00;
SERA_DLL = 0x21;//加载波特率除数
SERA_FCR = 0x01; //FCR.1 使能FIFO的发送和接收
//FCR.7 FCR.6 接收器FIFO触发层级
// 0 0 1字节
// 0 1 4字节
// 1 0 8字节
// 1 1 14字节
SERA_MCR = 0x08; //MCR.3=1 外部串行通道中断被使能
SERA_LCR &= 0x7f; //除数锁存访问位 LCR.7=0时可对 IER 进行操作
SERA_IER = 0x07; //使能中断
}
SERA_FCR = 0x01; //FCR.1 使能FIFO的发送和接收
//FCR.7 FCR.6 接收器FIFO触发层级
// 0 0 1字节
// 0 1 4字节
// 1 0 8字节
// 1 1 14字节
SERA_MCR = 0x08; //MCR.3=1 外部串行通道中断被使能
SERA_LCR &= 0x7f; //除数锁存访问位 LCR.7=0时可对 IER 进行操作
SERA_IER = 0x07; //使能中断
}