前言
一、IMX6ULL 启动流程?
二、LED代码移植
1.硬件介绍
2.代码移植
总结
最近在学习IMX6ULL这个开发板,手边有韦东山老师的imx6ull全功能板子,为了练习学习的初步效果,采用了正点原子的视频课程进行学习。首先移植了一个基本的LED控制实验。
提示:以下是本篇文章正文内容,下面案例可供参考
我们手头上的开发板一般都有直接的拨码开关来控制IMX6ULL的启动方式,常见的有SD卡、USB、EMMC等。这里各位根据开发板设置一下即可。(具体IMX6ULL的启动方式选择和启动设备选择可参考正点原子的,感觉写的不错)。
我这里选择SD卡进行。
正点原子开发板LED原理图如下:
韦东山开发板LED原理图如下:
原子采用的是GPIO1_3,韦东山开发板采用的是GPIO5_3.其配在过程主要如下:
例程中,对应的引脚地址已全部更改,注释保留原子的,具体大家可以上原子网站找,同时为开发板上电,有微弱电流,会使LED亮,为确保修改成功,添加了延时函数,大家调整delay中的r2即可观察到闪烁频率的不同。具体代码如下:
.global _start /* 全局标号 */
/*
* 描述: _start函数,程序从此函数开始执行此函数完成时钟使能、
* GPIO初始化、最终控制GPIO输出低电平来点亮LED灯。
*/
_start:
/* 例程代码 */
/* 1、使能所有时钟 */
ldr r0, =0X020C4068 /* CCGR0 */
ldr r1, =0XFFFFFFFF
str r1, [r0]
ldr r0, =0X020C406C /* CCGR1 */
str r1, [r0]
ldr r0, =0X020C4070 /* CCGR2 */
str r1, [r0]
ldr r0, =0X020C4074 /* CCGR3 */
str r1, [r0]
ldr r0, =0X020C4078 /* CCGR4 */
str r1, [r0]
ldr r0, =0X020C407C /* CCGR5 */
str r1, [r0]
ldr r0, =0X020C4080 /* CCGR6 */
str r1, [r0]
/* 2、设置GPIO5_IO03复用为GPIO1_IO03 */
ldr r0, =0X2290014 /* 将寄存器SW_MUX_GPIO1_IO03_BASE加载到r0中 */
ldr r1, =0X5 /* 设置寄存器SW_MUX_GPIO1_IO03_BASE的MUX_MODE为5 */
str r1,[r0]
/* 3、配置GPIO5_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 低转换率
*/
ldr r0, =0X02290058 /*寄存器SW_PAD_GPIO1_IO03_BASE */
ldr r1, =0X10B0
str r1,[r0]
/* 4、设置GPIO5_IO03为输出 */
ldr r0, =0X020AC004 /*寄存器GPIO1_GDIR */
ldr r1, =0X0000008
str r1,[r0]
flash:
/* 5、打开LED0
* 设置GPIO5_IO03输出低电平
*/
ldr r0, =0X020AC000 /*寄存器GPIO1_DR */
ldr r1, =0
str r1,[r0]
bl delay
ldr r0, =0X020AC000
ldr r1, =8
str r1,[r0]
bl delay
b flash
/*
* 描述: loop死循环
*/
loop:
b loop
// 延时函数:函数名:delay
delay:
ldr r2, =1000000
ldr r3, =0x0
delay_loop:
sub r2, r2, #1 //r2 = r2 -1
cmp r2, r3 // cmp会影响Z标志位,如果r2等于r3则Z=1,下一句中eq就会成立
bne delay_loop
mov pc, lr // 函数调用返回
仅仅用于学习中笔记的记录,LED在不同开发板实现要点:
1、不同开发板启动方式有EMMC、SD卡和USB,这里仅仅是裸机学习,因此可以采用SD卡和USB,这里采用SD卡进行,USB暂未进行。
2、对于不同引脚,应该进行修改
3、用汇编添加了延时函数