OK6410裸机开发之LED灯
来源:互联网 发布:数据库的连接 编辑:程序博客网 时间:2024/04/30 05:11
平台:WinXP+eclipse+OpenJTAG
开发板:OK6410A 128M DDR 1G NandFlash
---------------------------------------------------------
PS:CSDN的贴图功能太不人性化了,感觉好麻烦!
这段时间一直在翻看OK6410裸机开发的教程,现在准备自己动手写一写,并记录下来调试过程和遇到的问题。
这一节是关于LED灯的操作,比较简单,如同51单片机上开发流水灯一样简单。
1、建立工程
首先,我们建立一个项目,打开eclipse,file——>new——>C Project,项目名称写入OK6410_LED,点击下一步。
然后点击Finish,我们就可以在左侧的项目资源管理器中看见我们刚建立的工程了。
2、添加源代码
建立好工程后,我们添加源代码。一共有3个文件:start.S、led.c、Makefile
右键项目名称——>new——>file,写入start.S(下同)。
先来写start.S,因为我们要通过start.S来跳入我们c函数的入口处
.globl _start_start: /* Peri port setup */ ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff) /* Disable Watchdog */ ldr r0, =0x7E004000 @看门狗寄存器地址为0x7E004000 mov r1, #0 str r1, [r0] @往看门狗寄存器写入0,关闭看门狗,否则板子会不断重启 /* 设置栈 */ ldr sp, =8*1024 @此时栈大小不能大于8K,因为现在可用的内存只有8K @NAND Flash中的代码在复位后会移到SRAM中,而SRAM只有8K大小 bl main @跳入C程序的main函数处执行halt: b halt
接下来写Led.c
首先我们看一下OK6410开发板的原理图,发现LED1-4灯分别对应GPM0-3,找到控制LED灯的引脚,那么我们就可以写程序来控制它们了。
打开6410手册,找到GPM的相关寄存器,如下图:
我们先来看配置寄存器,既然要控制LED灯的亮灭,那么就得把GPM0-3设为输出。
即:rGPMCON = 0x1111;
接下来看上拉/下拉设置寄存器,根据原理图,我们不需要设置上拉、下拉,所以设置为禁止上/下拉。
即:rGPMPUD = 0x00;
最后就是用高低电平来控制LED亮灭了。
rGPMDAT = 0x1F;//4个LED灯都亮
下面是led.c的完整代码:
/**************************************************************************************** File Name : Led.c** File Description : OK6410流水灯.** Author : 踏雪059* Dept. : HackSnow* Created Date : 2013/1/15* Version : 1.0***************************************************************************************/ #define rGPMCON (*(volatile unsigned *)(0x7F008820))#define rGPMDAT (*(volatile unsigned *)(0x7F008824))#define rGPMPUD (*(volatile unsigned *)(0x7F008828)) void msDelay(int time){ volatile unsigned int i,j; for(i = 0; i < 2000000; i++) for(j=0; j<time; j++);} void GPIO_Init(void){ rGPMCON = 0x11111; rGPMPUD = 0x00; rGPMDAT = 0X1F;} void LedTest(void){ volatile unsigned int i; while (1) { for(i=0; i<4; i++) { rGPMDAT = ~(1<<i); msDelay(10); } }}int main(void){ GPIO_Init(); LedTest(); return 0;}
最后我们来搞定Makefile文件:
all:led.binled.bin: start.o led.o arm-elf-ld -Ttext 0 -o led.elf start.o led.o arm-elf-objcopy -O binary led.elf led.bin arm-elf-objdump -D led.elf > led.dis start.o : start.S arm-elf-gcc -g -o start.o start.S -c led.o : led.c arm-elf-gcc -g -o led.o led.c -c clean: rm *.o led.elf led.bin led.dis
注意:在arm-elf-gcc后面一定要记得带上-g参数,不然我们无法进行调试的。还有就是最好不要在编译代码是添加优化选项,即-O参数,优化以后,反汇编代码和源代码就不对应了,对于调试来说是个麻烦。
3、编译程序
下面我们来进行编译,右键项目名称,点击Build Project,完成后如下图,在左边会多出几个文件。
4、调试程序
点击Debug调试按钮,弹出对话框,按图片上的步骤操作,在Main标签中的C/C++ Application中填入生成的elf文件的存放路径。
点击Debugger标签,在GDB common file中填入6410初始化文件s3c6410_gdb.init,这个文件网上应该可以搜到。
接着在command标签中填入
load
break main
c
然后我们打开OpenJTAG GUI,连接开发板。
一切OK后,我们点击Debug按钮,就可以进行源码调试了。
贴图贴的我好累,好多都是一些eclipse的使用,后面的章节就不贴这部分的图了。
- OK6410裸机开发之LED灯
- OK6410裸机开发之LED灯
- OK6410之裸机led
- ok6410裸机下跑led灯
- OK6410裸机程序 ----led
- OK6410裸机开发之Beep
- OK6410裸机开发之KEY
- S5PV210 裸机开发驱动之LED灯
- 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇
- FL2440裸机开发之LED
- 裸机开发之点亮LED
- 【OK6410裸机程序】点亮LED
- ARM裸机程序开发之led流水灯程序
- ok6410-第06篇-裸机led程序
- OK6410上裸机点亮LED程序
- OK6410裸机开发之Ubuntu上Openocd环境搭建
- OK6410------裸机开发平台搭建
- ARM裸机程序之LED灯
- 获取安装的应用程序信息
- [MFC]动态控件实现 程序执行流程 [大三TJB_708]
- Oracle 10.2.0.1静默升级至10.2.0.4(Linux)
- LCD Driver Test for Linux2.6.xx+ARM9
- 关于Linux系统性能瓶颈定位分析(一),Nginx状态页测试(待续)
- OK6410裸机开发之LED灯
- compile/Link option setting in VC++6
- eclipse 代理设置
- 在Liunx环境下编译android程序
- Bluetooth OPP Profile
- STL中list结构体元素排序
- MIT OS 5. 小结@ Lab1
- android 4.1 "Mobile networks" 选项 不存在
- 找出一个字符串中的最长palindrome子串