标题: MCU轮巡检测程序 [打印本页]
作者: Resandom 时间: 2019-12-10 18:20
标题: MCU轮巡检测程序
.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;
}
作者: admin 时间: 2019-12-10 23:01
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |