一:LED驱动编写
要编写LED驱动,首先的知道开发板的构造;开发板分为核心板与底板;编写驱动的第一步就是要看开发板,找到LED灯在开发板上的位置及所对应的名字;第一步就要查看核心板电路图,以及底板电路图;最后就是查看开发板手册,然后进行程序编写:
通过看开发板我们可以知道LED灯的位置的核心板上,在核心板上找到LED的电路图,Ctrl+F可以在文档中快捷查找:
通过电路图我们可以看出:LED灯的一端已经接高电平,只要给另一端加低电平LED就会被点亮。
然后查看LED在核心板上的引脚:
由上图我们可以看出,LED1对应的是GPM4_0
然后通过芯片数据手册可以查到它的具体用法:
通过手册我们可以看出:GPM4CON 置一输出,表示控制,置零输入,表示检测,GPM4DAT表示它的值和引脚的电压状态对于,值为一时表示高电平,值为零时表示底电平,下面贴出代码:
1 .global main
2 main:
3 mov ip, sp
4 sub sp, sp, #12
5 stmdb sp!, {fp, ip, lr}
6 add fp, sp, #8
7
8 ldr r3, gpmcon
9 ldr r0, =0x1
10 str r0, [r3]
11
12 ldr r3, gpmdat
13 ldr r0, =0x0
14 str r0, [r3]
15
16 add sp, fp, #4
17 ldmdb sp, {fp, sp, pc}
18
19 gpmcon:
20 .word 0x110002e0
21
22 gpmdat:
23 .word 0x110002e4
下面的用C语言代码是实现四个LED灯的闪烁
1 #define GPM4CON (*(unsigned long *)0x110002e0)//宏定义
2 #define GPM4DAT (*(unsigned long *)0x110002e4)
3
4 void (*udelay)(int) = 0xc3e25f90;
5 int main()
6 {
7 GPM4CON &= ~0xffff;
8 GPM4CON |= 0x1111;
9
10 while(1) {
11 GPM4DAT |= 0xf;//led off
12 udelay(250000);
13 GPM4DAT &= ~0xf;
14 udelay(250000);//led on
15 }
16 }
跑马灯:
1 #define GPM4CON (*(unsigned long *)0x110002e0)
2 #define GPM4DAT (*(unsigned long *)0x110002e4)
3
4 void (*udelay)(int) = 0xc3e25f90;
5
6 int main()
7 {
8
9 GPM4CON &= ~0xffff;
10 GPM4CON |= 0x1111;
11 unsigned long tmp = 0xf;
12
13 while(1) {
14
15 if((tmp & 0xf) == 0) {
16 tmp = 0xf;
17 }
18
19 GPM4DAT = tmp << 1;
20 tmp = GPM4DAT;
21 udelay(250000);
22
23 }
24
25 }
流水灯:
1 #define GPM4CON (*(unsigned long *)0x110002e0)
2 #define GPM4DAT (*(unsigned long *)0x110002e4)
3
4 void (*udelay)(int) = 0xc3e25f90;
5
6 int main()
7 {
8
9 GPM4CON &= ~0xffff;
10 GPM4CON |= 0x1111;
11 unsigned long i = 0;
12 while(1) {
13 GPM4DAT = 0xf;
14 GPM4DAT &= ~(1 << i);//流水
15 udelay(500000);//延时
16 i++;
17 if(i == 4) {
18 i = 0;
19 }
20 }
21
22 }
上面程序总用到的延时函数udelay(),由于U-Boot作为嵌入式Linux系统的引导,不具有标准C库中的内容。要使用像printf函数,延时函数udelay(),就需要u-boot中提供的。u-boot函数内容在u-boot源码文件中就需要u-boot中提供的。u-boot函数内容在u-boot源码文件中的System.map文件中。System.map文件是被内核所使用的符号表。符号表是一个在符号名称与它们的存储器位置间的查询表格。符号名称可能是变量的名称或是函数名称。当要查询符号名称的位置或是特定位置的符号名称时,就会需要System.map。找到函数的对应地址,就可以对它进行使用了;
上一篇:Tiny4412MMU内存管理
下一篇:exynos 4412 时钟配置
推荐阅读最新更新时间:2024-11-23 12:06
推荐帖子
- DSP SCI在使用FIFO发送中断时,配置FIFO深度问题???
- DSPSCI在使用FIFO发送中断时,配置FIFO深度时,不能产生中断,在匹配中断触发位时,并没有触发中断,请问这是怎么回事?DSPSCI在使用FIFO发送中断时,配置FIFO深度问题???不用fifo可以中断吗?
- tjm告辞 TI技术论坛
- ucGUI触摸屏数据输入问题
- 请教一下我用触摸屏输入,修改数据,我是用ucGUI的控件好,还是有其他好的方法呢?ucGUI触摸屏数据输入问题ucosii在STM32F103上移植
- xiaoqzq 实时操作系统RTOS
- SI4432直接模式
- 有没有哪位大虾做过Si4432直接模式的,给小弟指导一下啊,我用si4432做串口透明传输,如果用FIFO模式,串口速率达到9600bps的时候,空中速率要很高啊,我改用直接模式,但不知道咋个弄,资料上介绍很少,而且我是刚接触这块儿不久的一个菜鸟,各种求指导啊SI4432直接模式请问你直接模式做的怎么样了LZ。。遇到同样的问题了直接模式,速率怕做不了太高啊!我用FIFO可以到19200不丢包。不知楼主使用FIFO模式一次最大能发送多少字节,我现在引导码配置为5个字节,同步字两个字节,最多
- morewater RF/无线
- [GD32E231 DIY大赛]——05.硬件原理图和PCB设计
- 概述:结合GD32E231-START-V1.0原理图与项目系统功能的应用,绘制原理图和PCB。本次的设计软件是立创EDA软件,也是我第一次使用,总体感觉上手比较快。对专业软件来说还是有些差距,但是,它的优越性还是相当的明显,有兴趣的朋友可以点击链接(https://docs.lceda.cn/cn/Introduction/Introduction-to-EasyEDA/index.html)去了解一下,这里就不展开说了。1.器件选型结合项目应用,系统主要器件选型表如下图所
- xld0932 GD32 MCU
- 一起“充电”,DIY自己专属应急灯!
- 本活动由Maxim公司冠名支持你关心LED?你关注可充电电池?在热辣的八月,一起来做做最“HOT”的设计吧——应急灯!(关于应急灯的延展:https://bbs.eeworld.com.cn/thread-155627-1-1.html)在这个平台,你可以尽情释放自己的创意,设计出自己理想中的应急灯。最终,20名优秀的创意,将受到非常礼遇:1、Maxim工程师的技术支持;2、单独为你定制PCB;3、单独为你配件;4、还有机会获得惊喜大礼——飞利浦数
- EEWORLD社区 DIY/开源硬件专区
- 我弄了新概念英语电子书,和大家分享--4
- 我弄了新概念英语电子书,和大家分享--4我弄了新概念英语电子书,和大家分享--4这么棒呀!论坛里新增加了电子书的版块儿,大家有好的书籍可以放在那里与大家一起分享了!Re:我弄了新概念英语电子书,和大家分享--4这个主意不错Re:我弄了新概念英语电子书,和大家分享--4真强Re:我弄了新概念英语电子书,和大家分享--4呵呵,好物!谢谢lz分享。Re:我弄了新概念英语电子书,和大家分享--4正找呢,谢谢Re:我弄了新概念英语电子书,和大家分享--4好东东顶一下谢。。
- wangqingtao 嵌入式系统
设计资源 培训 开发板 精华推荐
- ADP1713-3.3-EVALZ,评估板用于演示 ADP1713 线性稳压器的功能
- 4.2V、1 节、便携式锂离子电池充电器
- Geiger counter
- LT1933IDCB 2.5V 降压转换器的典型应用电路
- 用于 ADC 驱动器的 ADA4841-2YRZ 低功耗、低噪声运算放大器的典型应用电路原理图
- DC1281A-G,LTC2209 演示板,高中频,LVDS 输出,185 Msps,16 位 ADC,1MHz < Ain <80MHz
- CN0234
- stc15f2k60s2开发板
- ESP32/8266多模组自动烧录调试架3.0
- X-NUCLEO-IHM02A1,基于用于 STM32 Nucleo 的 L6470 两轴步进电机驱动器的扩展板