【OK210试用体验】3.0裸机驱动的编写---LED篇 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】3.0裸机驱动的编写---LED篇

中科院 ( 楼主 ) 2015-9-18 16:59:27  只看该作者 倒序浏览
对于裸机程序的编写,和51,和arm m系列的芯片并没有什么不同,根据原理图和芯片的datasheet来进行程序的编写,基本的编译器就是arm-gcc,需要你自己搭建交叉编译环境。
先附上底板LED原理图


四个LED引脚分别连着16,17,18,19引脚


四个灯对应的是GPH2_0,GPH2_1,GPH2_2,GPH2_3这几个引脚,
接下来找到对应datasheet的说明:


这个地址非常重要重要,重要的事情要说说2次




为了使引脚为输出模式。要给GPH2CON赋值为0001,


要给相应的GPH2DAT那一位赋1
对应的启动文件代码就不多说了
  1. .global _start

  2. _start:

  3.         bl        main                                                       

  4. halt:
  5.         b halt


复制代码
还有需要将输出下拉






有了以上的基础,就可以写出主干函数

  1. #define GPH2CON        (*(volatile unsigned long *)0xE0200C40)
  2. #define GPH2DAT        (*(volatile unsigned long *)0xE0200C44)
  3. #define GPD0CON          (*(volatile unsigned long *)0xE02000A0)
  4. #define GPH2PUD        (*(volatile unsigned long *)0xE0200C48)
  5. void clock_init(void);
  6. void putc(char c);
  7. void uart_init(void);
  8. void putout(char * c);
  9. int print(const char *fmt, ...);
  10. static void Delay(int count)
  11. {
  12.             volatile int i, j = 0;
  13.             volatile static int loop = 800000000/10000;
  14.             for(;count > 0;count--)
  15.                     for(i=0;i < loop; i++) { j++; }
  16. }
  17. void main(void)
  18. {
  19.    int i;
  20.            GPH2CON = (GPH2CON & ~0xFFFF0000) | 0x11110000; //设置高4为管脚为输出方式
  21.     GPH2PUD=(0x55<<16)&GPH2PUD;//设置为下拉方式
  22.         clock_init();
  23.     uart_init();
  24.         for( i=4;i<8;i++)//关闭led
  25.         {
  26.                 GPH2DAT |= ( 1<< i);
  27.                 Delay(100000);       
  28.         }
  29.   char print[40]={'l','e','d','1',' ','i','s',' ','o','p','e','n'};
  30.   char print1[40]={'l','e','d','1',' ','i','s',' ','c','l','o','s','e'};
  31.         while(1)
  32.         {
  33.                 for( i=4;i<8;i++)//循环点亮led
  34.                 {      
  35.                       print[3]= i+45;
  36.                         print1[3]= i+45;
  37.                         GPH2DAT &= ~( 1<< i);            
  38.                       putout(print);//输出打印信息  
  39.                         Delay(300000);       
  40.                         GPH2DAT |= ( 1<< i);
  41.                       putout(print1);// 输出打印信息
  42.                         Delay(300000);       
  43.                 }
  44.        
  45.         }

  46. }
复制代码


然后就可以去完成makefile了,写个裸机的LED的驱动不难吧


LED1120150918163618.png (20.09 KB, 下载次数: 29)

LED1120150918163618.png

4个回复

中科院 发表于 2015-9-18 17:03:17

核心板的原理图PDF文件


底板原理图PDF
dz_ltf 发表于 2015-9-29 15:16:43
为什么你的引脚对应的寄存器是GPH2的四个寄存器 而我的是MP04系列的 难道板子还是也不一样的吗???!!!
中科院 发表于 2015-9-30 12:27:02
dz_ltf 发表于 2015-9-29 15:16
为什么你的引脚对应的寄存器是GPH2的四个寄存器 而我的是MP04系列的 难道板子还是也不一样的吗???!!!

都可以。。。。。。。。。。。。。。
dz_ltf 发表于 2015-9-30 13:55:20
中科院 发表于 2015-9-30 12:27
都可以。。。。。。。。。。。。。。

能具体解释下吗  
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-22 10:45 , Processed in 0.662480 second(s), Total 70, Slave 50 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表