这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » UART0 关于串口UART0中断-----我又来了

共2条 1/1 1 跳转至

UART0 关于串口UART0中断-----我又来了

院士
2006-09-17 18:14:16     打赏
UART0 关于串口UART0中断-----我又来了



关键词: UART0     关于     串口     中断     -----     又来    

院士
2006-12-22 22:43:00     打赏
2楼
问 前一段时间,UART0接收中断不能触发,毫不容易搞定了,结果又发现,接收中断触发后不能返回,中段程序执行VICVectAddr=0x00;中断标志寄存器U0IIR值为C4,说明接收数据可用(RDA)中断未清除~~~、郁闷阿!!那位高手给指点指点!!还有,从PC发送30 31 32 33 34 35 36 37后,触发接收中断,然而接收到的数据UART0_Rx_Buff=“77777777”,何解???
相关程序如下:
uint8 UART0_Rx_Buff[8];        //定义UART0接收缓冲区

void  UART0_Ini(void)
{  uint16 Fdiv;

   U0LCR = 0x83;                    // DLAB = 1,可设置波特率
   Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
   U0DLM = Fdiv / 256;                            
   U0DLL = Fdiv % 256;                        
   U0LCR = 0x03;
}
        


void IRQ_UART0_Rx_Set(void)   //设置UART0中断
{
    U0FCR=0x81;  //使能FIFO,并设置触发深度为8字节
    U0IER=0x01;  //使能接收数据可用中断和接收超时中断
    
    VICIntSelect=0x00000000;    //使能所有通道为IRQ中断
    VICVectCntl2=0x26;   //UART0中断分配到IRQ slot2,
                              //优先级次与I2C和外部中断3(键盘中断)
    VICVectAddr2=(int)IRQ_UART0_Rx;    //设置UART0向量地址
    VICIntEnable=0x00000040;        //使能UART0中断
    
}

void  UART0_SendByte(uint8 data)
{  U0THR = data;                    // 发送数据

   while( (U0LSR&0x40)==0 );        // 等待数据发送完毕
}


void ISendBuf(void)
{
    uint8 i;
    
    for(i=0;i<8;i++)
    {
        UART0_SendByte(UART0_Rx_Buff[i]);//发送缓冲区
                                              //UART0_Rx_Buff[]数据
        
    }
    
    while((U0LSR&0x20)==0);
    
}


void __irq IRQ_UART0_Rx(void)
{
    uint8    i;
    
//    if(0x04==(U0IIR&0x0F))
    for(i=0;i<8;i++)
    {
        UART0_Rx_Buff[i]=U0RBR;    //读取FIFO中的数据存储与
                        //缓冲区UART0_Rx_Buff[8],该操作自动清除标志位        
    }
    
    ISendBuf();  //将接收到的数据发回
    
    VICVectAddr=0x00;
    
}


void main(void)
{
  PINSEL0    =0x800A8055;//设置引脚功能(PWM2.4.5.6;P0.15.16.30(EIN0/2/3);
  PINSEL1    =0x20000402; //P0.0/1为UART0;P0.2/3为I2C有效;其他均为I/O,

  UART0_Ini();     //初始化串口模式
  IRQ_UART0_Rx_Set();//接收中断设置  
  .
  .
  .
  .

}

还望高手指教阿~~~~~谢谢啦先!!
1: 没有清中断标志UART的中断标志U0IIR,在中断执行结束前必须读取U0IIR来清除中断。
但,实际发现,中断清除后,但不执行可以跳出中断,但全速运行却挑不出中断!!
高手们是不是觉得问题太菜了,给个会话儿啊!!! 2: 读RBR之前要先读LSR

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]