×
单片机 > 单片机程序设计 > 详情

mini2440按键裸机程序编写运行

发布时间:2024-05-18 发布时间:
|

开发环境

操作系统:linux

开发板:mini2440

2.原理图

GPGCON控制寄存器地址:


GPGCON控制寄存器功能说明:



3. 操作流程

(只需要操作GPGCON寄存器即可操作K1按键)

a)设置控制寄存器GPGCON为输入功能:00

(即:可读取GPGDAT寄存器的值)


//按键

unsigned long *GPGCON = 0x56000060;

unsigned long *GPGDAT = 0x56000064;

*GPGCON &= 0xffffc33c;//只用到4个按键GPG0 GPG3 GPG5 GPG6,功能设为00:输入功能


b)我们按下按键,想让对应的LED1——4,对应点亮,那么LED设置如下:

//LED

unsigned long *GPBCON = 0x56000010;

unsigned long *GPBDAT = 0x56000014;

*GPBCON &= 0xfffc03ff; //功能设置:输出功能 01

*GPBCON |= 0x00015400;

//1110 0001 1111

*GPBDAT &= 0xfffffe1f;

*GPBDAT |= (0xf<<5);//LED全灭


c)代码如下:

void key(void)

{

//按键

unsigned long *GPGCON = 0x56000060;

unsigned long *GPGDAT = 0x56000064;

// 1100 0011 0011 1100

// c 3 3 c

*GPGCON &= 0xffffc33c;//只用到4个按键GPG0 GPG3 GPG5 GPG6,功能设为00:输入功能

//LED

unsigned long *GPBCON = 0x56000010;

unsigned long *GPBDAT = 0x56000014;

*GPBCON &= 0xfffc03ff;

*GPBCON |= 0x00015400;

//1110 0001 1111

*GPBDAT &= 0xfffffe1f;

*GPBDAT |= (0xf<<5);//全亮

int i;

int n;

for(i = 0; i<5; i++)

{

*GPBDAT &= 0xfffffe1f;

for(n = 0; n <0x100000;n++);

*GPBDAT |= (0Xf<<5);

for(n = 0; n<0x100000;n++);

}

while(1)

{

if((*GPGDAT & (1)) == 0)

{

*GPBDAT &= ~(1<<5);

}

else

{

*GPBDAT |= (1<<5);

}

if((*GPGDAT & (1<<3)) == 0)

{

*GPBDAT &= ~(1<<6);

}

else

{

*GPBDAT |= (1<<6);

}

if((*GPGDAT & (1<<5)) == 0)

{

*GPBDAT &= ~(1<<7);

}

else

{

*GPBDAT |= (1<<7);

}

if((*GPGDAT & (1<<6)) == 0)

{

*GPBDAT &= ~(1<<8);

}

else

{

*GPBDAT |= (1<<8);

}

}

}


d)Makefile文件:

key_test.bin:key_test

arm-linux-objcopy -O binary ./key_test key_test.bin

key_test:key_test.o

arm-linux-ld -Ttext=0x30000000 key_test.o -o key_test

key_test.o:key_test.c

arm-linux-gcc -c key_test.c -o key_test.o

.PHONY:clear copy

clear:

rm -rf key_test.o key_test key_test.bin

copy:

cp key_test.bin /var/lib/tftpboot/


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析