打印
[ZLG-ARM]

LM3S600的UART接收不能RX中断问题,急!!

[复制链接]
2522|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dairen|  楼主 | 2010-3-31 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
lm, UART, se, pi, IO
void uartInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_75V);
SysCtlClockSet(
      SYSCTL_USE_PLL           
//      SYSCTL_USE_OSC
      |SYSCTL_OSC_MAIN
      |SYSCTL_XTAL_6MHZ
      |SYSCTL_SYSDIV_5);                       //  设置晶振为时钟源  
//      |SYSCTL_SYSDIV_1);                       //  设置晶振为时钟源            
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);            //  使能UART模块
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);            //  使能RX/TX所在的GPIO端口
// UARTFIFOLevelSet(UART0_BASE,
//      UART_FIFO_TX1_8,
//      UART_FIFO_RX1_8);
    GPIOPinTypeUART(GPIO_PORTA_BASE,                        //  配置RX/TX所在管脚为
                    GPIO_PIN_0 | GPIO_PIN_1);               //  UART收发功能
    UARTConfigSet(UART0_BASE,                               //  配置UART端口
                  250000,                                   //  波特率:250K
                  UART_CONFIG_WLEN_8 |                      //  数据位:8
                  UART_CONFIG_STOP_TWO |                    //  停止位:2
                  UART_CONFIG_PAR_NONE);                    //  校验位:无
    UARTEnable(UART0_BASE);                                 //  使能UART端口
UARTIntEnable(UART0_BASE,UART_INT_RX | UART_INT_RT | UART_INT_FE);  
IntEnable(INT_UART0);

// IntPrioritySet(INT_UART0,0x00);
}

void UART0_ISR(void)
{
    unsigned long ulStatus;
uchar i;
    ulStatus = UARTIntStatus(UART0_BASE, true);                 //  读取当前中断状态
    UARTIntClear(UART0_BASE, ulStatus);                         //  清除中断状态  
if(ulStatus & UART_INT_FE){           //接收帧错误中断和暂停错误中断
  RxAddr = 0;
  RecFig = false;
  HeadFig = true;
  i = GPIOPinRead(GPIO_PORTA_BASE,PIN4);
  GPIOPinWrite(GPIO_PORTA_BASE,PIN4,~i);
}
    else if ((ulStatus & UART_INT_RX)||(ulStatus & UART_INT_RT))          //  若是接收中断
    {
  i = GPIOPinRead(GPIO_PORTA_BASE,PIN3);
  GPIOPinWrite(GPIO_PORTA_BASE,PIN3,~i);
  if(RecFig == true){
   if(UARTCharsAvail(UART0_BASE)== true){
    RxBuf[RxAddr] = UARTCharGetNonBlocking(UART0_BASE);
    RxAddr++;
    if(RxAddr > 512)
    {
     RxAddr = 0;
     RecFig = false;
     HeadFig = false;           
    }     
   }
  }
  else
  {
     if(HeadFig == true){
    if(UARTCharsAvail(UART0_BASE)== true){      
     if( UARTCharGetNonBlocking(UART0_BASE) == 0){
      RxAddr = 0;
      RecFig = true;
      Dmx_Sign = 200;         
     }
     else {
      RxAddr = 0;
      RecFig = false;         
     }
     HeadFig = false;
    }
   }     
  }  
    }  
}
不知道问题出在哪里了,请大侠们帮我看看,谢谢了!!!

相关帖子

沙发
hulan1985| | 2010-4-1 15:31 | 只看该作者
发现不出来

使用特权

评论回复
板凳
eyue| | 2010-4-3 11:02 | 只看该作者
你在startup_ewarm文件中是否有加 中断函数的声明?

使用特权

评论回复
地板
liliang9554| | 2010-4-4 21:50 | 只看该作者
有可能

使用特权

评论回复
5
dairen|  楼主 | 2010-4-8 08:59 | 只看该作者
我用KEIL,已经加了,可以其他的中断,比如RT OE BE PE TX等等,就是不能RX中断,
晕!!!!!!!!!!!!!!!!

使用特权

评论回复
6
五谷道场| | 2010-4-9 22:08 | 只看该作者
放平心态~~~

使用特权

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

本版积分规则

9

主题

26

帖子

0

粉丝