主题 : 一个有意思的问题,请大家进来帮忙解答一下 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 11127
精华: 0
发帖: 28
金钱: 145 两
威望: 32 点
贡献值: 0 点
综合积分: 56 分
注册时间: 2009-11-27
最后登录: 2014-01-22
楼主  发表于: 2010-01-15 21:04

 一个有意思的问题,请大家进来帮忙解答一下

我正在做外部中断的一个小实验
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的,具体代码如下
IRQEnable                          ;//使能IRQ中断
         MRS    R0,CPSR
         BIC    R0,R0,#IRQMSK
         MSR    SPSR_c,R0
         MOVS   PC,LR


各位高手帮忙看一下把,呵呵,问题出在哪?
级别: 新手上路
UID: 11832
精华: 0
发帖: 37
金钱: 185 两
威望: 37 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2009-12-22
最后登录: 2017-03-13
1楼  发表于: 2010-01-15 21:26
你使能下降沿中断之前 先清除中断标志
而且我认为你的中断跳转可能不是跳转到你想要的地方
如果你没有启用mmu的话
程序遇到中断就会跳转到norflash里面读取中断跳转地址的
你可以参考一下我写的ucos的中断跳转方式
如果采用了mmu 我就不知道了
我做mmu的试验老跑飞 郁闷ing
ucos 播放视频 TCPIP 都不会 呵呵
级别: 新手上路
UID: 11127
精华: 0
发帖: 28
金钱: 145 两
威望: 32 点
贡献值: 0 点
综合积分: 56 分
注册时间: 2009-11-27
最后登录: 2014-01-22
2楼  发表于: 2010-01-16 19:17
是不是IRQEnable();将EINT_init(void)
的返回地址给破坏了,出问题的地方还没有涉及到中断处理呢,是在初始化的时候
级别: 新手上路
UID: 11832
精华: 0
发帖: 37
金钱: 185 两
威望: 37 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2009-12-22
最后登录: 2017-03-13
3楼  发表于: 2010-01-17 20:06
你在地址 0x00000018设置一个断点 你就知道中断跳去那里了
根本没有跳转到你希望的地方
ucos 播放视频 TCPIP 都不会 呵呵