第一次接触arm,看了半个月的视频,身边有一块44b0的开发板,就拿来试试,4个按键:ExINT4(GPG4)、ExINT5(GPG5)、ExINT6(GPG6);3个led灯:GPC1、GPC2、GPC3,我就是想按下任意一个按键,跳到中断程序去执行。 以下是程序: #include"44b0x.h" #define LED1 1 #define LED2 2 #define LED3 3 #define LED_ALL 4 #define FALSE 0 #define TRUE 1
//申明函数 void IoConfig (void); void IRQ_init(void); void __irq IRQ_Eint4567(void); void LedCol(int LED,int Col); void delay(int n);
//主函数 int Main(void) {
IoConfig(); IRQ_init(); LedCol(LED_ALL, 1); //开所有LED,测试进入主程序 delay(100); LedCol(LED_ALL, 0);//关LED,等待中断 while(1); return 0; }
//延时 void delay(int n) { int i,j; for(i=0;i<n;i++) for(j=0;j<5000;j++); }
//中断初始化 void IRQ_init(void) { //设置IO 口PORT G rPCONG |= 0xff00; rINTMOD =0; //all IPQ中断 rINTCON = 5; //使能IRQ,IRQ向量模式 rEXTINT &= 0x0000ffff; //先清除EXTINT4,5,6,7的相应设置bit位 rEXTINT =0; // 低电平触发 pISR_EINT4567=(unsigned int)IRQ_Eint4567; //设置入口地址 rINTMSK = ~(1<<21 | 1<<26); //打开中断屏蔽4567,全局中断 }
//中断程序 void __irq IRQ_Eint4567(void) { unsigned int dwVal; dwVal= rEXTINTPND;
LedCol(LED_ALL, 1);// 进不来啊?
//后边就不用看了,灯不亮......... //灯没坏,直接点灯没问题
rI_ISPC |= (1<<21);//清中断
}
//LED控制 void LedCol(int LED,int Col) //LED 控制 { switch (LED) { case LED_ALL: if (TRUE == Col) { rPDATC |= 0x0E;//全亮 } else { rPDATC &= ~0x0E;//全灭 } break; default: break; } } /**************************************************************************** 函数名称: IoConfig 功 能: 初始化IO口 参 数: 无 返回 值: 无 ****************************************************************************/ void IoConfig (void) { rPDATC = 0x0000; //输出低电平 rPCONC = 0x5f555555;//GPC1、2、3输出(LED) rPUPC = 0x3000; //上拉电阻
rPDATG = 0xff; //输出高电平 rPCONG = 0xff00; //设置4567为中断模式 rPUPG = 0x00; // 上拉电阻 rSPUCR= 0x4;// 不太清楚这个设置的影响 rSYSCFG = 0x0e; //使用8K字节的指令缓存,write buffer disable rNCACHBE0 = 0xc0002000; //定义非Cache区,从0x2000000到0xbffffff,中断时进入ROM,若不允许CACHE不正常 rEXTINT = 0x0; //所有的外部硬件中断为低电平触发 }
"44b0x.h"中定义了 #define _ISR_STARTADDRESS 0xc7fff00 //SDRAM为8 MB bank6:0x0c000000~0x0c800000
启动程序为44binit.s其中包含头文件 GET option.s GET memcfg.s option.s中定义_ISR_STARTADDRESS EQU 0xc7fff00
ADS1.2编译时RO=0x0C000000;
基本信息都在上边了,求助啊,各位大神......
|