多语言展示
当前在线:650今日阅读:60今日分享:41

eclipse arm 裸机开发之LED灯

重点学习eclipse arm 裸机开发环境搭建。
工具/原料
1

WinXP+eclipse+OpenJTAG

2

OK6410A 128M DDR 1G NandFlash

方法/步骤
1

建立工程

2

添加源代码建立好工程后,我们添加源代码。一共有3个文件:start.S、led.c、Makefile右键项目名称——>new——>file,写入start.S(下同)。先来写start.S,因为我们要通过start.S来跳入我们c函数的入口处[plain] view plaincopy.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灯的引脚,那么我们就可以写程序来控制它们了。

3

打开6410手册,找到GPM的相关寄存器,如下图:

4

我们先来看配置寄存器,既然要控制LED灯的亮灭,那么就得把GPM0-3设为输出。即:rGPMCON = 0x1111;

5

接下来看上拉/下拉设置寄存器,根据原理图,我们不需要设置上拉、下拉,所以设置为禁止上/下拉。

6

即:rGPMPUD = 0x00;最后就是用高低电平来控制LED亮灭了。rGPMDAT = 0x1F;//4个LED灯都亮下面是led.c的完整代码:[cpp] view plaincopy/************************************************************************************** * *   File Name : Led.c **************************************************************************************/                                                                                  #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 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,完成后如下图,在左边会多出几个文件。

7

4、调试程序点击Debug调试按钮,弹出对话框,按图片上的步骤操作,在Main标签中的C/C++ Application中填入生成的elf文件的存放路径。

9

接着在command标签中填入loadbreak mainc

10

然后我们打开OpenJTAG GUI,连接开发板。

11

一切OK后,我们点击Debug按钮,就可以进行源码调试了。

推荐信息