????最近linux用戶層開發(fā)ch432t的驅(qū)動(dòng),發(fā)現(xiàn)通過串口發(fā)送數(shù)據(jù)是正常的,但是就是讀取不正常,沒有接收的數(shù)據(jù)時(shí)讀取IIR寄存器值為0xc1,這個(gè)正常,但接收到數(shù)據(jù)時(shí)IIR的值0xc7,這個(gè)不符合技術(shù)手冊,如果此時(shí)再讀取LSR的值,返回?zé)o規(guī)律多個(gè)0x7f,讀取RBR的值也不對。后來我改用單片機(jī)調(diào)試也是這種問題。這是什么原因?下面是我單片機(jī)初始化ch432t的代碼
Fdiv = (1843200 / 16) / CH432T_Uart0_BPS; ? ? // 設(shè)置波特率
? ? high_byte = Fdiv / 256;
low_byte = Fdiv % 256;
CH432T_WriteByte(CH432T_IER0, 0x80);// 設(shè)置串口復(fù)位
CH432T_WriteByte(CH432T_LCR0, 0x80);// 設(shè)置DLAB 為1
CH432T_WriteByte(CH432T_DLL0, low_byte);// 設(shè)置波特率除數(shù)寄存器-低位?
CH432T_WriteByte(CH432T_DLM0, high_byte);// 設(shè)置波特率除數(shù)寄存器-高位
CH432T_WriteByte(CH432T_FCR0, 0xC7);// 設(shè)置FIFO控制寄存器,使能FIFO14字節(jié)緩沖
CH432T_WriteByte(CH432T_LCR0, 0x03);// 設(shè)置線路控制寄存器
CH432T_WriteByte(CH432T_IER0, 0x01);// 設(shè)置中斷使能寄存器
? ? CH432T_WriteByte(CH432T_MCR0, 0x08); ? ? ?// 允許中斷請求輸出
Fdiv = (1843200 / 16) / CH432T_Uart0_BPS; ? ? // 設(shè)置波特率
? ? high_byte = Fdiv / 256;
low_byte = Fdiv % 256;
CH432T_WriteByte(CH432T_IER1, 0x80);// 設(shè)置串口復(fù)位
CH432T_WriteByte(CH432T_LCR1, 0x80);// 設(shè)置DLAB 為1
CH432T_WriteByte(CH432T_DLL1, low_byte);// 設(shè)置波特率除數(shù)寄存器-低位?
CH432T_WriteByte(CH432T_DLM1, high_byte);// 設(shè)置波特率除數(shù)寄存器-高位
CH432T_WriteByte(CH432T_FCR1, 0xC7);// 設(shè)置FIFO控制寄存器,使能FIFO14字節(jié)緩沖
CH432T_WriteByte(CH432T_LCR1, 0x03);// 設(shè)置線路控制寄存器
CH432T_WriteByte(CH432T_IER1, 0x01);// 設(shè)置中斷使能寄存器
? ? CH432T_WriteByte(CH432T_MCR1, 0x08); ? ? ?// 允許中斷請求輸出
CH432T PCB原理就是按照技術(shù)手冊的 ,如下: