目录
一、硬件原理
点灯就是我们要点亮一个发光二极管,下面看看怎样才能点亮
现在我们知道如何点亮一个发光二极管了,很简单是不是!
那么我们来看看我们开发板上关于发光二极管的原理图,这里我学习使用的是IMX6ULL_Linux开发板。下图,我们看到开发板上已经默认给LED灯正极一个3V3的拉高高电平了,我们想要点亮它只需要在另外一端提供低电平即可。
如上就是点亮一个LED灯的本质,是不是灰常简单!
下面我们来看看,如何使用软件来实现提供低电平。
二、软件原理
1、打开相关GPIO时钟
2、设置IO复用
3、设置IO电气属性
4、设置GPIO使用哪个IO口
5、控制IO输出低电平
上面的过程,是不是看起来和STM32很相似,但是在IMX6ULL中,用的是ARM内核,与STM32像相比较起来,其外设的命名规范是不同的,下面我们来详细的解释下:
查看相关原理图,我们看到,和LED0相关的外设是GPIO1的IO3,我们首先打开GPIO1的外设时钟
翻看参考手册,在700页我们看到,GPIO1的时钟在CCM_CCGR1中设置,为了简便我们可以把所有的外设时钟都打开,将CCM_CCGR0~6写入0xffffffff即可。
下面我们使用汇编代码来配置
.global _start /**/
_start:
/* 1.On All Clock 1、打开相关GPIO时钟*/
/* On CMM_CCGR1 */
ldr r0, =0x020c4068
ldr r1, =0xffffffff
str r1, [r0]
/* On CMM_CCGR2 */
ldr r0, =0x020c406c
ldr r1, =0xffffffff
str r1, [r0]
/* On CMM_CCGR3 */
ldr r0, =0x020c4070
ldr r1, =0xffffffff
str r1, [r0]
/* On CMM_CCGR4 */
ldr r0, =0x020c4078
ldr r1, =0xffffffff
str r1, [r0]
/* On CMM_CCGR5 */
ldr r0, =0x020c407c
ldr r1, =0xffffffff
str r1, [r0]
/* On CMM_CCGR6 */
ldr r0, =0x020c4080
ldr r1, =0xffffffff
str r1, [r0]
/* 2.set IO use to GPIO1_IO03 2、设置IO复用*/
ldr r0, =0x020e0068
ldr r1, =0x5
str r1, [r0]
/* 3、配置GPIO1_IO03的IO属性
*bit 16:0 HYS关闭
*bit [15:14]: 00 默认下拉
*bit [13]: 0 kepper功能
*bit [12]: 1 pull/keeper使能
*bit [11]: 0 关闭开路输出
*bit [7:6]: 10 速度100Mhz
*bit [5:3]: 110 R0/6驱动能力
*bit [0]: 0 低转换率
*/
/* 3.set electric attribute 3、设置IO电气属性*/
ldr r0, =0x020e02F4
ldr r1, =0x10B0
str r1, [r0]
/* set GPIO to output 4、设置GPIO使用哪个IO口*/
ldr r0, =0x0209c004
ldr r1, =0x8
str r1, [r0]
/* On GPIO1_DR IO03 output 5、控制IO输出低电平*/
ldr r0, =0x0209c000
ldr r1, =0x0
str r1, [r0]
loop:
b loop /* 循环不让程序退出 */
文章评论