平台: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函数的入口处

[plain] view plaincopy
  1. .globl _start
  2. _start:
  3. /* Peri port setup */
  4. ldr r0, =0x70000000
  5. orr r0, r0, #0x13
  6. mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)
  7. /* Disable Watchdog */
  8. ldr r0, =0x7E004000         @看门狗寄存器地址为0x7E004000
  9. mov r1, #0
  10. str r1, [r0]                @往看门狗寄存器写入0,关闭看门狗,否则板子会不断重启
  11. /* 设置栈 */
  12. ldr sp, =8*1024             @此时栈大小不能大于8K,因为现在可用的内存只有8K                                                          @NAND Flash中的代码在复位后会移到SRAM中,而SRAM只有8K大小
  13. bl main                     @跳入C程序的main函数处执行
  14. halt:
  15. 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
  1. /**************************************************************************************
  2. *
  3. *   File Name : Led.c
  4. *
  5. *   File Description : OK6410流水灯.
  6. *
  7. *   Author : 踏雪059
  8. *   Dept. : HackSnow
  9. *   Created Date : 2013/1/15
  10. *   Version : 1.0
  11. *
  12. **************************************************************************************/
  13. #define rGPMCON          (*(volatile unsigned *)(0x7F008820))
  14. #define rGPMDAT          (*(volatile unsigned *)(0x7F008824))
  15. #define rGPMPUD          (*(volatile unsigned *)(0x7F008828))
  16. void msDelay(int time)
  17. {
  18. volatile unsigned int i,j;
  19. for(i = 0; i < 2000000; i++)
  20. for(j=0; j<time; j++);
  21. }
  22. void GPIO_Init(void)
  23. {
  24. rGPMCON  = 0x11111;
  25. rGPMPUD  = 0x00;
  26. rGPMDAT  = 0X1F;
  27. }
  28. void LedTest(void)
  29. {
  30. volatile unsigned int i;
  31. while (1)
  32. {
  33. for(i=0; i<4; i++)
  34. {
  35. rGPMDAT  = ~(1<<i);
  36. msDelay(10);
  37. }
  38. }
  39. }
  40. int main(void)
  41. {
  42. GPIO_Init();
  43. LedTest();
  44. return 0;
  45. }

最后我们来搞定Makefile文件:

[cpp] view plaincopy
  1. all:led.bin
  2. led.bin: start.o led.o
  3. arm-elf-ld -Ttext 0 -o led.elf start.o led.o
  4. arm-elf-objcopy -O binary led.elf led.bin
  5. arm-elf-objdump -D led.elf > led.dis
  6. start.o : start.S
  7. arm-elf-gcc -g -o start.o start.S -c
  8. led.o : led.c
  9. arm-elf-gcc -g -o led.o led.c -c
  10. clean:
  11. 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灯相关推荐

  1. Linux嵌入式系统开发之Led开发——应用篇(一)

    与Linux嵌入式系统开发之Led开发--驱动篇(一),对于的应用篇 看看咱们的开发板,有四个led灯,对吧,这次就是向办法用程序来点亮它,请看下边的代码: #include <stdlib.h ...

  2. Raspberry PI 系列 —— 裸机点亮LED灯

    Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...

  3. 复旦微FMQL(国产Zynq) 【IAR裸机开发之PS】——前言

    关注+星标公众号,及时获取更多技术分享~ 作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 前一段时间写了不少使用Xilinx的Zynq芯片的文章,说实话在整个开发过程中几乎没有遇到什么疑难杂症 ...

  4. 驱动开发之 LED(for mini2440)

    开发环境:ubuntu16.04 64bit Linux内核版本:linux-2.6.32.2 1.编写mini2440_leds.c 在/linux-2.6.32.2/drivers/char目录下 ...

  5. Zynq 【SDK裸机开发之PS】——串口接收缓存

    最近项目上在使用Zynq开发,也是第一次使用,期间会遇到各种各样的问题,属于Zynq本身问题的我会更新到我的另一篇博客<Zynq开发调试踩坑指南>中,这个版块将会陆续记录我自身在程序开发中 ...

  6. IMX6ULL裸机开发之点亮LED灯

    裸机点亮LED灯 该实验使用正点原子的linux开发板和下载工具 知识储备 GPIO时钟控制器 在<IMX6ULL用户手册>中,时钟控制器模块介绍在第18章 首先看CCM Clock Ga ...

  7. 基于Cortex-A7架构的嵌入式linux ARM裸机开发<2>——LED灯闪烁(C版本)

    文章目录 一.利用汇编初始化C环境 二.C语言部分实验程序编写 三.Makefile程序编写 四.链接脚本程序编写 五.编译及烧录 利用汇编编写LED灯点亮程序我们已经实现过了,所以这里不再着重讲解基 ...

  8. TQ210_裸机编程(一)——点亮LED灯

    TQ210_裸机编程点亮LED灯 首先查看 TQ210 的底板原理图: 我们可以看到 两个 LED 分别接到 S5PV210 的 GPC0_3 和 GPC0_4 引脚. 这里用了 NPN 三极管,具有 ...

  9. linux开发板led怎么亮,飞凌OK6410开发板(裸板) 第一个点亮LED灯程序

    飞凌OK6410开发板(裸板) 第一个点亮LED灯程序,主要的C程序,完整程序请下载附件. #define rGPMCON          (*(volatile unsigned *)(0x7F0 ...

最新文章

  1. 贾扬清感谢信:阿里开源10年,致敬千万开源人
  2. AI赌神升级!无惧bluff,6人局德扑完胜世界冠军,训练只用了8天
  3. linux putty 永久修改字体大小
  4. 通讯录的初步了解与使用
  5. C++ 析构函数设为虚函数的好处
  6. error while loading shared libraries: libiconv.so.2: cannot open shared object file
  7. pickle 在python 2和python 3中兼容性问题
  8. WordPress中自带的处理AJAX请求的HOOK
  9. ajax请求后台php数据时查看报错parse error
  10. 【Xamarin.Android】探索android的底部导航视图
  11. Python装饰器、metaclass、abc模块学习笔记
  12. caffe 使用自带的_net.py绘制网络图问题
  13. ERP采购管理 金蝶
  14. 奇迹1.03H服务端开服架设文件Data文件详解
  15. 最常用激活函数公式(更新中)
  16. 2018 蓝桥杯省赛 A 组模拟赛(一) 青出于蓝胜于蓝
  17. 流媒体技术原理与应用
  18. [转贴]去除迅雷广告和弹出广告窗口
  19. Android GreenDao3数据库升级,数据迁移
  20. java同步与死锁_Java入门——同步与死锁

热门文章

  1. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )
  2. 【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
  3. 【嵌入式开发】 ARM 关闭 MMU ( 存储体系 | I/D-Cache | MMU | CP15 寄存器 | C1 控制寄存器 | C7 寄存器 | 关闭 MMU )
  4. centos 6.2用yum安装中文输入法
  5. Py中enumerate方法【转载】
  6. C++程序设计基础(8)main函数
  7. 将秒(非时间戳)转化成 ** 小时 ** 分
  8. 一个转角---程序猿
  9. MySQL数据库 高级查询(一)
  10. alert和console的区别