s3c2440 gpio实验
来源:互联网 发布:mac壁纸软件推荐 编辑:程序博客网 时间:2024/05/22 00:44
实验一
目的:用汇编点亮一个led灯
代码:
led_on.s
. text
.global _start
_start:
ldr r1, =0x56000050;此处用mov报错
mov r2, #0x100
str r2,[r1]
ldr r1, =0x56000054
mov r2, #0x00
str r2, [r1]
MAIN_LOOP:
B MAIN_LOOP
Makefile:
led_on.bin:led_on.s
arm-linux-gcc -c led_on.s -o led_on.o
arm-linux-ld -Ttext 0x0000000 led_on.o -o led_on_elf
arm-linux-objcopy -O binary -S led_on_elf led_on.bin
clean:
rm -f led_on.bin led_on_elf *.o
将程序下载到nand flash并以nand flash方式启动,nand flash的前4k内容会自动拷贝到片内的SRAM中,以SRAM为0地址开始执行。
实验二
目的:用c语言点亮一个led
代码:
crt0.s
.text
.global _start
_start:
ldr r1, =0x53000000 @关闭看门狗
mov r2, #0x00
str r2, [r1]
mov sp, #1024*4@设置堆栈,由于是nand flash启动,现在程序在片内SDRAM中,最大为4k
bl main
halt_loop:
b halt_loop
led_on_c.c
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
int main(void)
{
GPFCON = 0X100;
GPFDAT = 0X00;
return 0;
}
Makefile:
led_on_c.bin:crt0.o led_on_c.o
arm-linux-ld -Ttext 0x0 crt0.o led_on_c.o -o led_on_c_elf
arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
arm-linux-objdump -D -m arm led_on_c_elf > led_on_c.dis
crt0.o:crt0.s
arm-linux-gcc -c -g -o crt0.o crt0.s
led_on_c.o:led_on_c.c
arm-linux-gcc -c -g -o led_on_c.o led_on_c.c
clean:
rm -f led_on.bin led_on_elf *.o
实验三
目的:轮流点亮三个led
crt0.s
.text
.global _start
_start:
ldr r0, =0x53000000@关闭看门狗
mov r1, #0x00
str r1, [r0]
ldr sp, =1024*4@此时为nand flash启动,4kb程序自动拷贝到内部SRAM,此时内存最大为1024*4
bl main
halt_loop:
b halt_loop
leds.c
//三个灯D10~D12分别对应引脚GPF4~GPF6
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
void delay(unsigned int dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
int led_pin_num;
GPFCON = 0x1500;
for(led_pin_num = 4; led_pin_num < 7; led_pin_num++){
delay(30000);
GPFDAT = 1<<led_pin_num;
if(led_pin_num == 6)
led_pin_num = 3;
}
return 0;
}
Makefile:
leds.bin : crt0.S leds.c
arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S
arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c
arm-linux-ld -Ttext 0x0000000 crt0.o leds.o -o leds_elf
arm-linux-objcopy -O binary -S leds_elf leds.bin
arm-linux-objdump -D -m arm leds_elf > leds.dis
clean:
rm -f leds.dis leds.bin leds_elf *.o
实验四:
目的:按下按键点亮led,松开熄灭led
crt0.s
.text
.global _start
_start:
ldr r0, =0x53000000@关闭看门狗
mov r1, #0x00
str r1, [r0]
ldr sp, 1024*4@设置堆栈
bl main
halt_loop:
b halt_loop
key_led.c
//三个led灯D10~D12分别对应引脚GPF4~GPF6,按键S2~S4分别对应引脚GPF0、GPF2、GPG3
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPGCON (*(volatile unsigned long *)0x56000060)
#define GPGDAT (*(volatile unsigned long *)0x56000064)
#define GPF4_OUT (1<<8)
#define GPF5_OUT (1<<10)
#define GPF6_OUT (1<<12)
#define GPF4_MSK (3<<8)
#define GPF5_MSK (3<<10)
#define GPF6_MSK (3<<12)
#define GPF0_IN (0)
#define GPF2_IN (0<<4)
#define GPG3_IN (0<<6)
#define GPF0_MSK (3)
#define GPF2_MSK (3<<4)
#define GPG3_MSK (3<<6)
int main()
{
unsigned char key_value = 1;
//GPF4~GPF6为输出
GPFCON &= ~(GPF4_MSK | GPF5_MSK GPF6_MSK);
GPFCON |= (GPF4_OUT | GPF5_OUT | GPF6_OUT);
//GPF0和GPF2位输入
GPFCON &= ~(GPF0_MSK | GPF2_MSK);
GPFCON |= (GPF0_in | GPF2_in);
//GPG3为输入
GPGCON &= ~(GPG3_MSK);
GPGCON |= GPG3_IN;
while(1){
key_value = GPFDAT;
if(key_value & (1))
GPFDAT |= (1<<4);
else
GPFDAT &= (~(1<<4));
if(key_value & (1<<2))
GPFDAT |= 1<<5;
else
GPFDAT &= (~(1<<5));
key_value = GPGDAT;
if(key_value & (1<<3))
GPFDAT |= 1<<6;
else
GPFDAT &= 1<<6;
}
return 0;
}
Makefile:
key_led.bin : crt0.S key_led.c
arm-linux-gcc -g -c -o crt0.o crt0.S
arm-linux-gcc -g -c -o key_led.o key_led.c
arm-linux-ld -Ttext 0x0000000 -g crt0.o key_led.o -o key_led_elf
arm-linux-objcopy -O binary -S key_led_elf key_led.bin
arm-linux-objdump -D -m arm key_led_elf > key_led.dis
clean:
rm -f key_led.dis key_led.bin key_led_elf *.o
- s3c2440 gpio实验
- s3c2440 -gpio
- S3C2440-GPIO
- S3C2440 gpio
- S3C2440--GPIO控制.
- s3c2440 GPIO (转)
- 1、GPIO接口--s3c2440
- s3c2440的GPIO
- s3c2440的GPIO控制
- S3C2440之GPIO
- s3c2440的GPIO驱动
- S3C2440-GPIO之button
- S3C2440 gpio + main
- GPIO实验
- GPIO实验
- s3c2440-gpio-button(keyboard)驱动
- S3C2440-GPIO和jlink配置
- S3C2440裸机实验
- 使用jquery时老是提示$未定义
- Flutter框架基础
- 【Scikit-Learn 中文文档】Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器
- js中的时间与日期处理
- 最小费用最大流
- s3c2440 gpio实验
- jQuery页面加载初始化常用的三种方法
- 位运算--python
- easyui 老版本(1.31版本及以下的版本怎么添加多重验证)
- 处理对象的多种状态及其相互转换——状态模式(一)
- Eclipse使用TODO标签管理任务及自定义TODO标签
- Restful Api接口规范
- iOS支持WKWebView的Hybrid开源框架GPHybrid
- FASTX-Toolkit安装在指定目录下