我现在的问题是怎么接收来至红外遥控器的信号。我想利用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));