CH432T读寄存器问题

    最近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原理就是按照技术手册的 ,如下:blob.png

从IIR寄存器中读出0xc7肯定是不对的。你的问题都是出现在读上面,有没有测试一下读函数是否正常?

有一个SCR寄存器可以用来测试,先写再读,看看和写的是否一致。另外初始化复位完成后延时10ms比较好。


只有登录才能回复,可以选择微信账号登录