我正在做外部中断的一个小实验 
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										
					
					
							
					
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
			
			
			
						
			
 我要赚赏金
