打印

为什么LPC2103不能产生UART串口中断?

[复制链接]
2870|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
海辰|  楼主 | 2009-12-5 20:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位,我用了LPC2103的串口中断程序时钟不能产生中断什么原因,大家帮忙看看。程序如下:
主程序
int main (void)
{
   
    uiGRcvNew = 0;
   
    PINSEL0 = PINSEL0 & (~0x0F);                                       
    PINSEL0 = PINSEL0 | 0x05;                                           /*  设置I/O连接到UART           */        
    UARTInit();                                                        /*  串口初始化                  */
    U0FCR = 0x01;                                                       /*  使能FIFO,设置8个字节触发点 */
    U0IER = 0x01;                                                       /*  使能接收中断                */      
    IRQEnable();
//VICIntEnClear = 0xffffffff;
    VICIntSelect = 0x00000000;                                          /*  设置所有中断为向量中断      */
    VICVectCntl0 = 0x20 | 0x06;                                         /*  设置串口中断为最高优先级    */
    VICVectAddr0 = (uint32)UART0_IRQ;                                   /*  设置向量地址                */
    VICIntEnable = 1 << 0x06;                                           /*  使能串口中断                */
   
    while(1)  
{                       /*  判断是否有新数据  U0RBR     */
        if (uiGRcvNew == 1)
{                                          
            uiGRcvNew = 0;                    /*  清除标志                    */
   
                  UART0SendStr (uiGRcvBuf, uiGNum);                           /*  向串口发送数据              */
        }
    }
    return 0;
}
中断入口程序
void  __irq  UART0_IRQ (void)
{
    n++;
    uiGNum = 0;
      
    while ((U0IIR & 0x01) == 0)
    {                                        /*  判断是否有中断挂起          */
        switch (U0IIR & 0x0f)
        {                                          /*  判断中断标志                */
        
            case 0x04:                                                  /*  接收数据中断                */
                uiGRcvNew = 1;                                          /*  置接收新数据标志            */
                for (uiGNum = 0; uiGNum < 8; uiGNum++)        /*  连续接收8个字节             */
    {               
                    uiGRcvBuf[uiGNum] = U0RBR;
              
                }
                break;
            
            case 0x0C:                                                  /*  字符超时中断                */
                uiGRcvNew = 1;           
                while ((U0LSR & 0x01) == 1)        /*  判断数据是否接收完毕        */
    {                          
                    uiGRcvBuf[uiGNum] = U0RBR;
                    uiGNum++;
                }
                break;
               
            default: break;
        }
    }
if (uiGRcvNew == 1)
  {                                          
            uiGRcvNew = 0;                                              /*  清除标志                    */
   
         for(uiGNum=0;uiGNum<8;uiGNum++)
            {
               sprintf(cStr,"接收数据为:%d\n",*p);
               ISendStr (0,0,0x30,cStr);   
            }
            
        }
        VICVectAddr = 0x00;
   
}
始终不能产生中断,请问是什么原因?

相关帖子

沙发
liliang9554| | 2009-12-5 22:54 | 只看该作者
看不出来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

32

帖子

0

粉丝