平台:44b0
调试软件:Codewarrior for ARM 1.2(因为烧写了U-BOOT,所以初始地址我设置为了0x0c008000)
在线调试器:J-LINK
工程包含文件:Init.s,Main.c
Init.s:
IMPORT Main
IMPORT key
WTCON EQU 0X01D30000
AREA Init,CODE,READONLY
ENTRY
B RESET
B .
B .
B .
B .
B .
B IRQ
ldr r0,=WTCON ;watch dog disable
ldr r1,=0x0
str r1,[r0]
RESET
BL Main
IRQ
STMFD SP!,{R0-R12,LR}
BL key
LDMFD SP!,{R0-R12,LR}
SUBS PC,LR,#4
END
Main.c:
#define rPCONC (*(volatile unsigned *)0X01D20010)
#define rPDATC (*(volatile unsigned *)0X01D20014)
#define rPUPC (*(volatile unsigned*) 0X01D20018) //LED相关寄存器
#define PCONG (*(volatile unsigned*)0X01D20040)
#define PDATG (*(volatile unsigned*)0X01D20044)//外部中断
#define PUPG (*(volatile unsigned*)0X01D20048)
#define EXTINT (*(volatile unsigned*)0X01D20050)
#define EXTINTPND (*(volatile unsigned*)0X01D20054)
#define INTCON (*(volatile unsigned*)0X01E00000)
#define INTMOD (*(volatile unsigned*)0X4A000004)
#define INTMSK (*(volatile unsigned*)0X4A000008)
#define INTPND (*(volatile unsigned*)0X01E00004)
#define I_ISPC (*(volatile unsigned*)0X01E00024)
void key(void);
int Main()
{
unsigned int i;
rPCONC=0X55555554;//设置PCONC为输出口,连接LED
rPDATC=0X0000;//LED灭
rPUPC=0X3000;
PCONG|=0XFF00;//设置PCONG为外部中断源
PUPG|=0X0;
INTMOD|=0X0;//IRQ中断模式
EXTINT|=0X22222222;//上升沿触发
INTCON|=0X05;//非向量中断模式
INTMSK|=0X00FFFF;//中断屏蔽寄存器,允许EINT0,EINT1,EINT2,EINT3中断
while(1)
{
rPDATC=0xFFFFFFFF;//LED亮
}
return(0);
}
void key(void)//外部中断函数
{
rPDATC=~rPDATC;//取反LED,按键控制LED的亮灭
I_ISPC=0X0;//清除中断标志位
}
一、程序运行时,当我按下按键时(外部中断源),程序提示错误,好像是不能进入中断。
二、当不用J-LINK,中用AXD软件仿真时,不知道用什么方法仿真外部中断,就像keil.c51 有I/O/口仿真外部中断那种。
请各位高手指点。