师傅,您好;我是上次那个问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<std.h>
#include<tistdtypes.h>
#include<hwi.h>
#include<gio.h>
#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);
}
我能够保证所有的寄存器地址没有问题,麻烦高人指点下还有哪里存在问题?没办法,焦急啊。
jia xiaobo:
我用示波器查看了 有来自外界稳定的中断源 方波型中断 通过导线连在GPIO105号线上
BlackSword(三寸丁):
你是在做DSP下面的测试吗?
IRQ_REQUEST是多少呢? 还有绑定的中断号,怎么看怎么不对!
jia xiaobo:
回复 BlackSword(三寸丁):
是在DSP下测试,但是环境不是CCS 是linux 下,忘了条语句:#define GPIO_PIN (1<<9) #define IRQ_REQUEST GPIO_PIN
IRQ_REQUEST就是 是(1<<9) 因为我想105=32*3+9
jia xiaobo:
回复 BlackSword(三寸丁):
是在DSP下测试,但是环境不是CCS 是linux 下,忘了条语句:#define GPIO_PIN (1<<9) #define IRQ_REQUEST GPIO_PIN
IRQ_REQUEST就是 是(1<<9) 因为我想105=32*3+9
jia xiaobo:
回复 jia xiaobo:
绑定的中断号就是7 请问不对在什么地方?
BlackSword(三寸丁):
回复 jia xiaobo:
请问你的中断号7是怎么算出来的?
jia xiaobo:
回复 BlackSword(三寸丁):
我看中断4-7都可以做中断号,我的中断事件是76号 看表,请问这个可以计算么?
BlackSword(三寸丁):
回复 jia xiaobo:
每一个系统上每一个引脚能发生的中断的中断号都是固定的。除非是你自己做的中断映射表。可不可以把你说的表贴出来看一下。
jia xiaobo:
回复 BlackSword(三寸丁):
师傅,我这个没有看中断映射表,我自己也没有做,是中断向量表么?
jia xiaobo:
回复 jia xiaobo:
师傅 这样联系太麻烦,你可以给我扣扣,或者加我扣扣么,方便些。447219661