代码如下:
/ UART初始化
void uartInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_UART1); // 使能UART模块
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD); // 使能RX/TX所在的GPIO端口
IntMasterEnable();
GPIOPinTypeUART(GPIO_PORTD_BASE, // 配置RX/TX所在管脚为
GPIO_PIN_2 | GPIO_PIN_3); // UART收发功能
UARTConfigSet(UART1_BASE, // 配置UART端口
9600, // 波特率:115200
UART_CONFIG_WLEN_8 | // 数据位:8
UART_CONFIG_STOP_ONE | // 停止位:1
UART_CONFIG_PAR_NONE); // 校验位:无
/* UARTFIFOLevelSet(UART0_BASE, // 设置发送和接收FIFO深度
UART_FIFO_TX4_8, // 发送FIFO 为2/8深度(4B)
UART_FIFO_RX1_8); // 接收FIFO 为6/8深度(12B)*/
UARTIntEnable(UART1_BASE,UART_INT_RX);
IntEnable(INT_UART1);
IntMasterEnable();
UARTEnable(UART1_BASE); // 使能UART端口
}
void UART1_ISR(void)
{
unsigned long ulStatus;
ulStatus=UARTIntStatus(UART1_BASE,true); // 读取当前中断状态
UARTIntClear(UART1_BASE,ulStatus);// 清除中断状态
UARTCharPut(UART1_BASE,'Y');
}
// 主函数(程序入口)
int main(void)
{
clockInit(); // 时钟初始化:晶振,6MHz
SysCtlPeriEnable(LED_PERIPH); // 使能LED所在的GPIO端口
GPIOPinTypeOut(LED_PORT, LED_PIN); // 设置LED所在管脚为输出
uartInit(); // UART初始化
for(;;);
}
以上是我写的一段中断接收代码,我用串口调试助手给M3发数据,可是中断处理函数在触发执行一次后就不再触发了 尽管我接着给M3发送数据 可是中断就是触发不了 请大家帮小弟分析分析原因 小弟刚接触M3系列单片机 不胜感激
回复 沙发 Study_Stellaris 的帖子
恩 我照做了 然后就好了 谢谢大侠
大侠,能不能介绍一下,你是如何注册中断的,我现在怀疑我的中断
回复 5楼 jinhailu2011 的帖子
你去启动文件startup_ewarm.c 里面注册
方法如下:
首先声明一下你用到的中断处理函数 如:void UART1_ISR(void);
然后在中断函数表中根据注释找到相应的串口1中断函数那行 如:IntDefaultHandler, // UART1 Rx and Tx
把这行的IntDefaultHandler,换成UART1_ISR, 然后就注册完成了