CH438 的中断OUT2 一直恒为低电平 是什么原因,外部有串口不断的传输。但是为啥OUT2恒为低电平。这样没法判断啊
MCR是可写寄存器,手动置1后再试下呢,正常在初始化部分OUT 位就会置1?
再初始化部分 对OUT2置1了。
WriteCH438Data( REG_MCR3_ADDR, BIT_MCR_OUT2 /*| BIT_MCR_RTS | BIT_MCR_DTR */ ); 这句语句一运行完,OUT2就恒定为低电平了。
void InitCH438UART3( void )
{
Uint16 div;
Uint8 DLL, DLM;
/**************************************************************************
设置CH438串口3的寄存器
**************************************************************************/
// UART3_Reset();
div = ( Fpclk >> 4 ) / CH438UART3_BPS;
DLM = div >> 8;
DLL = div & 0xff;
WriteCH438Data( REG_LCR3_ADDR, BIT_LCR_DLAB ); /* 设置DLAB为1 */
WriteCH438Data( REG_DLL3_ADDR, DLL ); /* 设置波特率 */
WriteCH438Data( REG_DLM3_ADDR, DLM );
//WriteCH438Data( REG_FCR3_ADDR, BIT_FCR_RECVTG1 | BIT_FCR_RECVTG0 | BIT_FCR_FIFOEN ); /* 设置FIFO模式,触发点为112字节 */
WriteCH438Data( REG_LCR3_ADDR, BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0 | BIT_LCR_PAREN | BIT_LCR_PARMODE0); /* 字长8位,1位停止位、偶校验 */
WriteCH438Data( REG_IER3_ADDR, /*BIT_IER_IEMODEM |*/ BIT_IER1_CK2X | /*BIT_IER_IELINES | BIT_IER_IETHRE |*/ BIT_IER_IERECV ); /* 使能中断 */
WriteCH438Data( REG_MCR3_ADDR, BIT_MCR_OUT2 /*| BIT_MCR_RTS | BIT_MCR_DTR */ ); /* 允许中断输出,DTR,RTS为1 */
//WriteCH438Data(REG_FCR3_ADDR,ReadCH438Data(REG_FCR3_ADDR)| BIT_FCR_TFIFORST|BIT_FCR_RFIFORST);
/* === 20240827 === */
WriteCH438Data(REG_FCR3_ADDR, BIT_FCR_RECVTG1 | BIT_FCR_RECVTG0 | BIT_FCR_TFIFORST | BIT_FCR_RFIFORST | BIT_FCR_FIFOEN);
}
最终发现好像是 fifo溢出以后,清FIFO的需要一定的时间。