老周,好几个人碰到串口不稳定问题,请指教一下
1:UART1中断设置
// UART1中断设置
VICVectAddr4 = (uint32)IRQ_UART1_SERVERS; // 设置UART1中断向量地址
VICVectCntl4 = 0x27; // UART1通道分配到第4通道
VICIntEnable = 0x00000080| VICIntEnable; // 使能UART1中断
// 设置串行口UART1的引脚功能
PINSEL0 = (PINSEL0 & 0xfff0ffff) | 0x00050000; // 选择管脚为UART1
U1LCR = 0x83; // 允许访问分频因子寄存器
U1DLM = (Fpclk / (16*DRIVER_UART1_BPS))/256; // 设置波特率
U1DLL = (Fpclk / (16*DRIVER_UART1_BPS))%256; // 设置波特率
U1LCR = 0x03; // 禁止访问分频因子寄存器 且设置为8,1,n
U1IER = 0x03; // 发送中断,接收中断,BIT0是RBR使能中断,BIT1是THRE使能中断
U1FCR = 0x00; // 初始化FIFO
2:中断程序
void __irq IRQ_UART1_SERVERS(void)
{
uint8 UART1_IRQ_CHOICE,UART1_RBR_TEMP; // 程序变量
UART1_IRQ_CHOICE = U1IIR; // 读状态,同时清中断
if(UART1_IRQ_CHOICE & 0x02) // 发送中断
{
;
}// 发送服务程序结束
if(UART1_IRQ_CHOICE & 0x04) // 接收中断
{
UART1_RBR_TEMP = U1RBR; // 从寄存器取出数据
}// 接收服务程序结束
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
3: 只要串口不活动,就不会经常出现系统重启动问题
4: 串口只发送也不会出现系统重启动问题
5: 一旦串口出现接收中断,就如上现的中断程序,在接收中断里什么都不做
,也会出现系统重启动问题
6: 起初是怀疑电源问题,换了N种电源,做了N种测试,我断定是串口接收中
断的问题,但是我程序减到接收数据什么都不做,还是出现重启动
7: 以上现象,我断定是串口接收中断的设置问题,但这是老周你的设置
很多人碰到这种现象了,请老周你帮帮忙,大家项目都很紧啊!