• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

驱动开发指南 第八章 汇编LED灯实验

武飞扬头像
xlbtlmy
帮助3

《I.MX6U 嵌入式 x Linux 驱动开发指南 V1.6 6》第八章 汇编LED灯实验

正点原子【第二期】手把手教你学Linux之ARM(MX6U)裸机篇

硬件环境

正点原子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
系列文章
更多 icon
同类精品
更多 icon
继续加载