师傅,您好;我是上次那个问GPIO配置中断的,我按照您上次提示的写了个配置GPIO来响应中断的例子,在OMAP3530上跑了,但是我发现我的中断处理函数没有被调用,这是怎么回事呢,我的中断调用函数的特征就是看我那个interruptnum 这个变量变化后能被我看到,证明被中断处理函数调用了,但是上板后发现没有调用 程序如下:
global.h文件
#ifndef GLOBAL_H_
#define GLOBAL_H_
#define CONTROL_PADCONF_CAM_D5 0x48002122 //gpio105 低地址 0x48002120
#define GPIO_OE 0x49054034 //GPIO OE寄存器
#define GPIO_IRQENABLE2 0x4905402C //GPIO4 中断使能,隶属于GPIO4
#define GPIO_RISINGDETECT 0x49054048 //中断引脚的中断探测 隶属于GPIO4
#define GPIO_SYSCONFIG 0x49054010 //SYSCONFIG起始重置,belong to GPIO4 。
#define GPIO_LEVELDETECT0 0x49054040 //使用低电平探测 隶属于GPIO4 上升沿触发
#define GPIO_LEVELDETECT1 0x49054044 //使用高电平探测,隶属于GPIO4 下降沿触发
int interrupt=0
#endif /*GLOBAL_H_*/
main 文件
#include
#include<tistdtypes.h>
#include
#include
#include "global.h"
#define EVENT_IVA_BANK_4 76//IVA2_IRQ[31]中断对应的事件是76
#define HW_INT_BANK4 7 //使用的硬中断,中断向量是7号
#define LEVELDETECT0 0x00000001 //低电平检测,上升沿有效
#define LEVELDETECT1 0x00000000
#define MUX_MODE_4 (1<<2) //设置模式为4
#define INPUT_ENABLE (1<<8) // 查看笔记本焊版配置关键字
#define PULL_UP (3<<3) // 设置上拉电位
#define SOFTRESET 0x00000002 // 为sysconfig设置为SOFTRESET
interrupt void hwi7_isr(void)
[
interruptnum++;
interruptnum++;
]
void main(void)
[
*( volatile unsigned int* ) GPIO_SYSCONFIG=SOFTRESET;
*( volatile unsigned int* ) CONTROL_PADCONF_CAM_D5=(MUX_MODE_4|INPUT_ENABLE|PULL_UP);
*( volatile unsigned int* ) GPIO_OE=IRQ_REQUEST;
*( volatile unsigned int* ) GPIO_RISINGDETECT=IRQ_REQUEST;//SCHEDULE_REQUEST|COLLECTION_DONE ;
*( volatile unsigned int* ) GPIO_IRQENABLE2=IRQ_REQUEST ;
*( volatile unsigned int* ) GPIO_LEVELDETECT0=IRQ_REQUEST;
HWI_enable();
HWI_enableWugen(EVENT_IVA_BANK_4); //GPIO1_IVA2_IRQ **IVA2_IRQ[31]
HWI_eventMap(HW_INT_BANK4,EVENT_IVA_BANK_4);
HWI_dispatchPlug(HW_INT_BANK4,(Fxn)&hwi7_isr,-1,NULL);
]
我能够保证所有的寄存器地址没有问题,麻烦高人指点下还有哪里存在问题?没办法,焦急啊。