我的第一个led实验--基于arm6410
来源:互联网 发布:张爱玲一生 知乎 编辑:程序博客网 时间:2024/05/20 13:19
花了一天的时间,终于成功把我的led给点亮了。程序参考《嵌入式linux完全开发手册》
本程序是由crt0.S,led_on_c.c,Makefile三个文件组成 。其中crt0.S文件是程序入口,完成设置指针功能,然后程序就设置到led_on_c.c文件中的main函数运行。
以下为crt0.S程序
@*************************************************************************** ***
2 @ File:crt0.S
3 @ 功能:通过它转入C程序
4 @*************************************************************************** ***
5
6 .text
7 .global _start
8 _start:
9 ldr r0, =0x7E004000 @ WATCHDOG寄存器地址
10 mov r1, #0x0
11 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断
重启
12
13 ldr sp, =4*1024 @ 设置堆栈,注意:不能大于4k, 因为现> 在可用的内存只有4K
14 @ nand flash中的代码在复位后会移到内
部ram中,此ram只有4K
15 bl main @ 调用C程序中的main函数
16 halt_loop:
17 b halt_loop
~
程序注释:
1、我的WATCHDOG寄存器地址是WTCON地址,参照S3C6410手册,得知其地址为0x7E004000;
2、在设置堆栈的时候,我完全是参照书上的,本来想写自己的SDRAM地址+1024*4的,但是不明白,俺是菜鸟,就囫囵吞枣吧。
希望能懂的朋友不吝赐教。
以下为led_on_c.c程序:
#define GPMCON (*(volatile unsigned long *)0x7F008820)
2 #define GPMDAT (*(volatile unsigned long *)0x7F008824)
3
4 int main()
5 {
6 GPMCON = 0x00000001; // 设置GPM0为输出口, 位[3:0]=0b0001
7 GPMDAT = 0x00000000; // GPM输出0,LED1点亮
8
9 return 0;
10 }
11
程序注释:
1、TE6410开发板,共有4个LED,连接在GPM0、GPM1、GPM2、GPM3因此对GPM操纵即可实现控制LED。
参考S3C6410手册,得知GPMCON的地址为0x7F008820,GPMDAT 地址为0x7F008824;
2、GPMCON = 0x00000001; // 设置GPM0为输出口,也就是控制该GM0口为输出口;
3、GPMDAT = 0x00000000; // GPM输出0,LED0点亮。实际上我的是低电平熄灭,高电平点亮。但是led一开始就亮着的。。。
以下为Makefile:
1 led_on_c.bin : crt0.S led_on_c.c
2 arm-linux-gcc -g -c -o crt0.o crt0.S
3 arm-linux-gcc -g -c -o led_on_c.o led_on_c.c
4 arm-linux-ld -Ttext 0x0000000 -g crt0.o led_on_c.o -o led_on_c_elf
5 arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
6 arm-linux-objdump -D -m arm led_on_c_elf > led_on_c.dis
7 clean:
8 rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o
程序注释:
1、led_on_c.bin : crt0.S led_on_c.c//此行意义为 目标(led_on_c.bin ):依赖(crt0.S led_on_c.c)
那么就要产生这两个依赖文件
2、arm-linux-gcc -g -c -o crt0.o crt0.S //命令,产生crt0.o文件
3、arm-linux-gcc -g -c -o led_on_c.o led_on_c.c//命令,产生led_on_c.o文件
4、arm-linux-ld -Ttext 0x0000000 -g crt0.o led_on_c.o -o led_on_c_elf//命令,产生led_on_c_elf文件
5、arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin//命令,产生led_on_c.bin文件
6 arm-linux-objdump -D -m arm led_on_c_elf > led_on_c.dis//将结果转换为汇编码,放入led_on_c.dis文件中
7 clean:
8 rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o //没有依赖,当输入make clean时,强制执行8行命令
最后make,就产生了所需要的led_on_c.bin文件。
好,下面是关键。
1、启动DNW,进入uboot状态。(如何进入?就是在开发板以上电的2~3秒内按下空格键,即可看到DNW进入uboot。当然前提是你安装了uboot)
2、敲入命令:DNW c0008000 然后就是回车,
3、会提示你输入data,于是选择USB Port---》transmit---》led_on_c.bin
4、等10秒左右,不管它有没有反应,敲回车键,即可进入uboot minglhang
5、敲入命令:go c0008000
好了,这个时候你就可以看到你的led亮起来了!
- 我的第一个led实验--基于arm6410
- 我的第一个GPIO实验,点亮一盏LED
- 我的第一个实验
- 我的第一个嵌入式linux驱动(基于韦东山led驱动)
- 我的第一个嵌入式linux驱动(基于韦东山led驱动)2_完善1
- 我的第一个嵌入式linux驱动(基于韦东山led驱动)3_完善2
- 我写的第一个LED驱动的心得
- ZigBee基础实验-点亮第一个LED
- 第一个实验 stm32t103c8t6 点亮led
- 我的第一个FPGA实验
- 我的第一个汇编程序,led流水灯
- 我的第一个struts2(基于myeclipce2016)
- 我的第一个板子--8个LED灯轮回显示
- 1.2.第一个实验——点亮LED灯
- 1.2.第一个实验——点亮LED灯
- 我的第三次上机实验3-1第一个项目
- 实验一 基于NIOSII的LED控制系统
- 基于fl2440开发板的led实验
- 在ubuntu10.10版本中如何利用framebuf来驱动fb0设备
- POSIX线程:API
- IE6上Gzip+Etag问题的解决方案
- 无法通过“控制面板”卸载 Office 2003、Office 2007 或 Office 2010 套件的情况下,如何才能将其卸载?
- python模块之smtplib: 用python发送SSL/TLS安全邮件
- 我的第一个led实验--基于arm6410
- Rational Rose 2003安装配置
- 如何查询oracle表的前几条记录
- 黑马程序员训练营:网络编程
- Android: 启动init.rc 中service的权限问题
- 笑笑
- Firefox的getter和setter带来的安全隐患
- 纠结的一个晚上
- 8 Best Search Engines You Should Visit To Find High Quality Icons