.globl _start
_start: //设置开机键按下后运行程序 ldr r0, =0x1002330c ldr r1,[r0] orr r1,r1,#0x300 str r1,[r0]
// 关闭看门狗 ldr r0, =0x10060000 mov r1, #0 str r1, [r0]
// 设置栈,以便调用c函数 ldr sp, =0x02060000
// 调用c函数 bl main
halt: b halt key.c#define GPM1CON (*(volatile unsigned long *) 0x11000280) #define GPM1DAT (*(volatile unsigned long *) 0x11000284) #define GPX1CON (*(volatile unsigned long *) 0x11000C20) #define GPX1DAT (*(volatile unsigned long *) 0x11000C24)
#define GPX2CON (*(volatile unsigned long *) 0x11000C40) #define GPX2DAT (*(volatile unsigned long *) 0x11000C44)
static void GPIO_Init(void) { /*LED_INIT*/ GPM1CON &= ( ~(0xF << 16)); GPM1CON |= (0x1 << 16); GPM1DAT &= 0x0;
GPX1CON &= ( ~(0xF << 12)); GPX1CON |= (0x1 << 12); GPX1DAT &= 0x0;
//GPX2CON &= ( ~(0xF << 8)); //GPX2CON |= (0x1 << 8); //GPX2DAT |= (0x1 << 2);
/*KEY_INIT*/ GPX2CON &= ~0xFF; GPX2CON |= 0x00;
GPX2CON &= ( ~(0xFF <<16)); GPX2CON |= (0x00 << 16);
GPX2DAT &= 0x0; }
void delay(int time) { while (time--) ; }
int main(void) { unsigned char keyValue1 ; unsigned char keyValue2 ; GPIO_Init(); while(1) { keyValue1 = GPX2DAT; keyValue1 &= (~(0xFF << 2)); keyValue2 = GPX2DAT >> 4; keyValue2 &= (~(0xFF << 2));
switch(keyValue1){ case 0x01: GPM1DAT |= (0x1 << 4); GPX1DAT |= (0x1 << 3); break; case 0x02: GPM1DAT |= (0x1 << 4); break; default : GPM1DAT &= ~(0x1 << 4); GPX1DAT &= ~(0x1 << 3); break; } switch(keyValue2){ case 0x01: GPM1DAT |= (0x1 << 4); GPX1DAT &= ~(0x1 << 3); delay(0x10000); GPX1DAT |= (0x1 << 3); GPM1DAT &= ~(0x1 << 4); delay(0x10000); break; case 0x02: GPX1DAT |= (0x1 << 3); break; default : GPM1DAT &= ~(0x1 << 4); GPX1DAT &= ~(0x1 << 3); break; } } return 0; }
|