WinXP+eclipse+OpenJTAG
OK6410A 128M DDR 1G NandFlash
建立工程
添加源代码建立好工程后,我们添加源代码。一共有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灯的引脚,那么我们就可以写程序来控制它们了。
打开6410手册,找到GPM的相关寄存器,如下图:
我们先来看配置寄存器,既然要控制LED灯的亮灭,那么就得把GPM0-3设为输出。即:rGPMCON = 0x1111;
接下来看上拉/下拉设置寄存器,根据原理图,我们不需要设置上拉、下拉,所以设置为禁止上/下拉。
即: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
4、调试程序点击Debug调试按钮,弹出对话框,按图片上的步骤操作,在Main标签中的C/C++ Application中填入生成的elf文件的存放路径。
接着在command标签中填入loadbreak mainc
然后我们打开OpenJTAG GUI,连接开发板。
一切OK后,我们点击Debug按钮,就可以进行源码调试了。