驱动开发指南 第八章 汇编LED灯实验
《I.MX6U 嵌入式 x Linux 驱动开发指南 V1.6 6》第八章 汇编LED灯实验
正点原子【第二期】手把手教你学Linux之ARM(MX6U)裸机篇
视频 | 选集 | 时间 |
---|---|---|
P6 | 第6.1讲 汇编LED驱动实验-原理分析 | 35:31 |
P7 | 第6.2讲 汇编LED驱动实验-汇编基本语法 | 28:07 |
P8 | 第6.3讲 汇编LED驱动实验-驱动编写 | 30:55 |
P9 | 第6.4讲 汇编LED驱动实验-编译程序 | 22:45 |
P10 | 第6.5讲 汇编LED驱动实验-烧写bin文件到SD卡中并运行 | 27:43 |
硬件环境
正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)
底板 核心板(EMMC版) 7寸RGB屏1024*600'
SD卡 USB读卡器
硬件原理图
GPIO1_IO03 输出低电平点亮、输出高电平熄灭
根据芯片手册查看寄存器应该如何设置
时钟树 CCM 相关寄存器
CCM_CCGRx 配置为 0xFFFFFFFF | 复位值均为 0xFFFFFFFF
IO复用 IOMUXC 相关寄存器
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 配置为 0x00000005
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 配置为 0x000010B0
IO配置 GPIO 相关寄存器
GPIO1_GDIR 的 bit[3] 配置为 1 时作为输出
GPIO1_DR 的 bit[3] 配置为 0 时输出低电平点亮 | 配置为 1 时输出高电平熄灭
led.s
.global _start
_start:
#if 0
/**
* CCM_CCGR0
* CG1 bit[ 3: 2]:11 aips_tz2_clk_enable
* CG0 bit[ 1: 0]:11 aips_tz1_clk_enable
*/
ldr r0, = 0x020C4068 /* 寄存器 CCGR0 */
ldr r1, = 0x0000000F
str r1, [r0]
/**
* CCM_CCGR1
* CG13 bit[27:26]:11 gpio1_clk_enable
* CG9 bit[19:18]:11 sim_s_clk_enable
*/
ldr r0, = 0x020C406C /* 寄存器 CCGR1 */
ldr r1, = 0x0C0C0000
str r1, [r0]
/**
* CCM_CCGR2
* CG8 bit[17:16]:11 ipmux1_clk_enable
*/
ldr r0, = 0x020C4070 /* 寄存器 CCGR2 */
ldr r1, = 0x00030000
str r1, [r0]
/**
* CCM_CCGR3
* CG10 bit[21:20]:11 mmdc_core_aclk_fast_core_p0_enable
*/
ldr r0, = 0x020C4074 /* 寄存器 CCGR3 */
ldr r1, = 0x00300000
str r1, [r0]
/**
* CCM_CCGR4
* CG7 bit[15:14]:11 pl301_mx6qper2_mainclk_enable
* CG3 bit[11:10]:11 sim_cpu_clk_enable
*/
ldr r0, = 0x020C4078 /* 寄存器 CCGR4 */
ldr r1, = 0x0000C0C0
str r1, [r0]
/**
* CCM_CCGR5
* CG8 bit[17:16]:11 sim_main_clk_enable
*/
ldr r0, = 0x020C407C /* 寄存器 CCGR5 */
ldr r1, = 0x00030000
str r1, [r0]
/**
* CCM_CCGR6
*/
ldr r0, = 0x020C4080 /* 寄存器 CCGR6 */
ldr r1, = 0x00000000
str r1, [r0]
#endif
/* 2、设置 GPIO1_IO03 复用为 GPIO1_IO03 */
ldr r0, = 0x020E0068 /* 将寄存器 SW_MUX_GPIO1_IO03_BASE 加载到 r0 中 */
ldr r1, = 0x00000005 /* 设置寄存器 SW_MUX_GPIO1_IO03_BASE 的 MUX_MODE 为 5 */
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 低转换率
*/
ldr r0, = 0x020E02F4 /*寄存器 SW_PAD_GPIO1_IO03_BASE */
ldr r1, = 0x10B0
str r1, [r0]
/* 4、设置 GPIO1_IO03 为输出 */
ldr r0, = 0x0209C004 /*寄存器 GPIO1_GDIR */
ldr r1, = 0x0000008
str r1, [r0]
/* 5、打开 LED0
* 设置 GPIO1_IO03 输出低电平
*/
ldr r0, = 0x0209C000 /*寄存器 GPIO1_DR */
ldr r1, = 0x00000000
str r1, [r0]
loop:
b loop
Makefile
ARM_LINUX_IMX6ULL=/home/xlbtlmy/Desktop/IMX6ULL/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
PREFIX_IMX6ULL=arm-linux-gnueabihf-
CC=$(ARM_LINUX_IMX6ULL)/$(PREFIX_IMX6ULL)gcc
LD=$(ARM_LINUX_IMX6ULL)/$(PREFIX_IMX6ULL)ld
OBJCOPY=$(ARM_LINUX_IMX6ULL)/$(PREFIX_IMX6ULL)objcopy
OBJDUMP=$(ARM_LINUX_IMX6ULL)/$(PREFIX_IMX6ULL)objdump
IDD=./imxdownload
SD=/dev/sdb
led.bin:led.s
$(CC) -g -c led.s -o led.o
$(LD) -Ttext 0x87800000 led.o -o led.elf
$(OBJCOPY) -O binary -S -g led.elf led.bin
$(OBJDUMP) -D led.elf > led.dis
sd:
chmod x $(IDD)
$(IDD) led.bin $(SD)
sync
clean:
rm -rf *.o *.bin *.elf *.dis load.imx
编译
make
烧录到SD卡
make sd
开发板设置成从SD卡启动
即可观察到LED0点亮
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhebjk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13