最近使用2812串口,FIFO模式,发现串口长时间工作后,某些情况下串口会死掉,完全不响应串口接收中断。检查SCIRXST寄存器,发现SCIRXST.FE,SCIRXST.BRKDT位均被置1。BRKDT被置1的原因,datasheet上说是:串口在丢失了一个停止位后连续检测到了10位的低电平… BRKDT叫break detect flag,看手册上说是中断检测标志,但是并没有说检测到错误就会break串口。但是实际测试,2812只要检测到BRKDT位错误,就会把串口BREAK了…此时串口完全死掉,整个系统也死了。我很郁闷啊,接收错误了扔掉这byte数据就行了,break个什么啊..导致整个控制系统都死了。我就是想问大家有人遇到过这种问题吗?如何解决。对SCICTL1寄存器的SW reset位写0倒是能复位串口。但是在程序连续 运行时能否这样做?一检测到错误位BRKDT就软复位串口?会对串口带来其他影响吗? |
我的波特率为115200