我的处理器是LM3S9B92,我想利用UART的IrDA功能,让NEC编码的红外遥控器发送红外信号后,在主板上利用HS0038B红外接收器接收到红外信号后传送到MCU,HS0038B与MCU的PB0管脚相连。主要是利用PB0管脚的复用功能U1RX,以下是我的初始化及中断处理函数。现在的问题是我无法进入中断处理函数,中断处理函数已在启动文件中注册,哪位大虾指导下是怎么回事,小弟不甚感激。
这是初始化函数
void
InitInfraredRemoteControl(void)
{
//
// Enable GPIO port B which is used for UART1 pins.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//
// Select the alternate (UART) function for these pins.
// TODO: change this to select the port/pin you are using.
//
GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0);
//
// 禁止UART1
//
UARTDisable(UART1_BASE);
//
// 配置UART1为IrDA模式
//
HWREG(UART1_BASE + UART_O_CTL) |= UART_CTL_SIREN;
//
// Configure the UART1 for 115,200, 8-N-1 operation.
// This function uses SysCtlClockGet() to get the system clock
// frequency. This could be also be a variable or hard coded value
// instead of a function call.
//
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
UARTIntDisable(UART1_BASE,UART_INT_TX);
//
// 设置UART1接收中断及接收超时中断
//
UARTIntEnable(UART1_BASE,UART_INT_RX | UART_INT_RT);
//
// IFLS中断级别选择
//
HWREG(UART1_BASE + 0X34) = (0X01 << 3);
//
// 使能UART1
//
UARTEnable(UART1_BASE);
//
// 使能UART1中断
//
IntEnable(INT_UART1);
//
// 开总中断
//
IntMasterEnable();
}
下面是我的中断处理函数
void
UART1RxIntHandler(void)
{
unsigned long ulStatus;
//
// 获得中断状态
//
ulStatus = HWREG(UART1_BASE + 0x40);
//
// 清除等待响应的中断
//
UARTIntClear(UART1_BASE,ulStatus);
//
// 检查是都有未响应的传输中断
//
if(ulStatus & (UART_INT_RX | UART_INT_RT))
{
while(UARTCharsAvail(UART1_BASE))
{
UARTprintf("接收到红外遥控器的数据是:0x%x\n",UARTCharNonBlockingGet(UART1_BASE));
}
}
UARTprintf("进入红外数据接收处理函数了\n");
}