最近linux用户层开发ch432t的驱动,发现通过串口发送数据是正常的,但是就是读取不正常,没有接收的数据时读取IIR寄存器值为0xc1,这个正常,但接收到数据时IIR的值0xc7,这个不符合技术手册,如果此时再读取LSR的值,返回无规律多个0x7f,读取RBR的值也不对。后来我改用单片机调试也是这种问题。这是什么原因?下面是我单片机初始化ch432t的代码
Fdiv = (1843200 / 16) / CH432T_Uart0_BPS; // 设置波特率
high_byte = Fdiv / 256;
low_byte = Fdiv % 256;
CH432T_WriteByte(CH432T_IER0, 0x80);// 设置串口复位
CH432T_WriteByte(CH432T_LCR0, 0x80);// 设置DLAB 为1
CH432T_WriteByte(CH432T_DLL0, low_byte);// 设置波特率除数寄存器-低位
CH432T_WriteByte(CH432T_DLM0, high_byte);// 设置波特率除数寄存器-高位
CH432T_WriteByte(CH432T_FCR0, 0xC7);// 设置FIFO控制寄存器,使能FIFO14字节缓冲
CH432T_WriteByte(CH432T_LCR0, 0x03);// 设置线路控制寄存器
CH432T_WriteByte(CH432T_IER0, 0x01);// 设置中断使能寄存器
CH432T_WriteByte(CH432T_MCR0, 0x08); // 允许中断请求输出
Fdiv = (1843200 / 16) / CH432T_Uart0_BPS; // 设置波特率
high_byte = Fdiv / 256;
low_byte = Fdiv % 256;
CH432T_WriteByte(CH432T_IER1, 0x80);// 设置串口复位
CH432T_WriteByte(CH432T_LCR1, 0x80);// 设置DLAB 为1
CH432T_WriteByte(CH432T_DLL1, low_byte);// 设置波特率除数寄存器-低位
CH432T_WriteByte(CH432T_DLM1, high_byte);// 设置波特率除数寄存器-高位
CH432T_WriteByte(CH432T_FCR1, 0xC7);// 设置FIFO控制寄存器,使能FIFO14字节缓冲
CH432T_WriteByte(CH432T_LCR1, 0x03);// 设置线路控制寄存器
CH432T_WriteByte(CH432T_IER1, 0x01);// 设置中断使能寄存器
CH432T_WriteByte(CH432T_MCR1, 0x08); // 允许中断请求输出
CH432T PCB原理就是按照技术手册的 ,如下: