目录

   

 一、硬件原理

 二、软件原理

1、打开相关GPIO时钟

2、设置IO复用

3、设置IO电气属性

4、设置GPIO使用哪个IO口

5、控制IO输出低电平


 一、硬件原理

点灯就是我们要点亮一个发光二极管,下面看看怎样才能点亮 

现在我们知道如何点亮一个发光二极管了,很简单是不是!

那么我们来看看我们开发板上关于发光二极管的原理图,这里我学习使用的是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 /* 循环不让程序退出 */
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐