我正在做外部中断的一个小实验
int Main(void)
{
ClkGet();
UART_Init(UART0);
LED_Init(LED1);
EINT_init();
UART_SendStr(UART0,"ALL INIT OK!");
while(1);
}
以上是主函数, EINT_init();是中断初始化函数,函数的内容如下
void EINT_init(void)
{
UART_SendStr(UART0,"1OK!");
rGPGCON = (rGPGCON & 0xFFFFFFFC) | (0x02<<0); // 设置GPG0引脚为外部中断EINT8功能
rEXTINT1 = (0x2<<0); // 外部中断EINT8设置为下降沿触发
VICVectAddr[5] = (uint32) IRQ_Eint; // 中断向量地址设置
rPRIORITY = 0x00000000; // 使用默认的固定的优先级
rINTMOD = 0x00000000; // 中断模式寄存器,所有中断均为IRQ中断,1--FIQ/0--IRQ
rINTMSK = ~0x00000020; // 中断屏蔽寄存器,使能EINT8中断
rEINTMASK = ~0x00000100; // 外部中断屏蔽寄存器,使能EINT8
UART_SendStr(UART0,"2OK!");
IRQEnable(); // 使能IRQ中断(CPSR)
UART_SendStr(UART0,"3OK!");
}
一些列的UART_SendStr(UART0,"*OK!");是我测试程序能执行到什么地方而加的,有个奇怪的现象,UART_SendStr(UART0,"3OK!");这一句都执行了,为什么
UART_SendStr(UART0,"ALL INIT OK!");这一句却没执行,也就是说 EINT_init();这个函数没返回怎么会有这种现象呢??????
我测试了一下问题可能出在IRQEnable();这一函数,这个函数是通过软中断返回到启动代码将CPSR的I位清零而打开IRQ的,具体代码如下,熟悉ZLG模板的应该清楚。
IRQEnable ;//使能IRQ中断
MRS R0,CPSR
BIC R0,R0,#IRQMSK
MSR SPSR_c,R0
MOVS PC,LR
各位高手帮忙看一下把,呵呵,问题出在哪?开发板为MINI2440
我要赚赏金打赏帖 |
|
|---|---|
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
我要赚赏金
