LM3S9B92怎么接收来至红外遥控器的信号



  我现在的问题是怎么接收来至红外遥控器的信号。我想利用UART的IrDA功能,但是不成功,接收不到红外遥控器发送来的信号。主板上的连接是:利用红外接收器HS0038B,其输出引脚与MCU的PB0相连,想利用PB0的复用功能U1Rx。然后我按下面的程序初始化UART,以及中断处理函数,但读接收FIFO的数据时,始终没有。不知故障出现在哪里,哪位高手能指导下。(我的红外遥控器发送的信号是NEC编码)

void
InitInfraredRemoteControl(void)
{
 //
    // Enable the peripherals used by this part.
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);    
 
 //
    // Enable processor interrupts.
    //
    ROM_IntMasterEnable();

  //
    // Set GPIO B0 as UART pin.
    //
    GPIOPinConfigure(GPIO_PB0_U1RX);
    ROM_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0);

 //
 // 禁止UART1
 //
 UARTDisable(UART1_BASE);

 //
 // 配置UART1为IrDA模式
 //
 HWREG(UART1_BASE + UART_O_CTL) |= UART_CTL_SIREN;

 //
 // Enables the transmit and receive FIFOs.
 //
 UARTFIFOEnable(UART1_BASE);

 //
    // Configure the UART for 115,200, 8-N-1 operation.
    //
    ROM_UARTConfigSetExpClk(UART1_BASE, ROM_SysCtlClockGet(), 115200,
                            (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                             UART_CONFIG_PAR_NONE));

 //
 // IFLS中断级别选择
 //
 HWREG(UART1_BASE + 0X34) = (0X01 << 3);

 //
 // 使能UART1
 //
 UARTEnable(UART1_BASE);

 //
    // Enable the UART interrupt.
    //
    ROM_IntEnable(INT_UART1);
    ROM_UARTIntEnable(UART1_BASE, UART_INT_RX );


}

//************************************************************************************
//
// 接收中断处理函数
//
//************************************************************************************
void
UART1RxIntHandler(void)
{
 unsigned long ulStatus;

    //
    // Get the interrrupt status.
    //
    ulStatus = UARTIntStatus(UART1_BASE, true);
 UARTprintf("ulStatus=0x%x\n",ulStatus);
    //
    // Clear the asserted interrupts.
    //
    UARTIntClear(UART1_BASE, ulStatus);

    //
    // Loop while there are characters in the receive FIFO.
    //
  while(ROM_UARTCharsAvail(UART1_BASE))
    {
             UARTprintf("接收到红外遥控器的数据是:0x%x\n",UARTCharNonBlockingGet(UART1_BASE));
    }
    UARTprintf("进入红外数据接收处理函数了\n");

}

 

不管我用遥控器怎么发射信号都无法进入中断处理函数中,但是在PB0引脚用示波器是能够看到遥控器发送来的信号的,然后我在主函数的while循环中利用以下函数读取接收FIFO中的数据,但是也始终读取不到。

  if(UARTCharsAvail(UART1_BASE))
     UARTprintf("接收到红外遥控器的数据是:%d\n",UARTCharNonBlockingGet(UART1_BASE));
  UARTprintf("UARTCharNonBlockingGet接收到红外遥控器的数据是:%d\n",UARTCharNonBlockingGet(UART1_BASE));
  UARTprintf("UARTCharGet接收到红外遥控器的数据是:%d\n",UARTCharGet(UART1_BASE));