I.MX6ULL裸机编程 编译烧录bin文件

驱动IO步骤

一编写驱动程序

初始化步骤

1.使能时钟,CCGR0~CCGR6这七个寄存器控制这6ull所有外设时钟的使能

2.IO复用,将寄存器IOmux_SW_MUX_CTL_PAD_GPIO1_IO13的bit3~0设置伟0101,这样GPIO1_13就复用伟GPIO

3.寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO13设置GPIO1_13的电气属性。包括压摆率,速度,驱动能力,开漏,上下拉等。

4配置GPIO功能,设置输入输出。以及设置输出的高低电平。

汇编代码示例

.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、设置GPIO1_IO03复用为GPIO1_IO03 */
	ldr r0, =0X020E0068	/* 将寄存器SW_MUX_GPIO1_IO03_BASE加载到r0中 */
	ldr r1, =0X5		/* 设置寄存器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, =0		
   str r1,[r0]

/*
 * 描述:	loop死循环
 */
loop:
	b loop 				

二编译程序

编译过程

1,将.c .s文件编译成.o文件

使用gcc工具

arm-linux-gnueablihf-gcc 

2,  链接 将所有.o文件链接成可执行的.elf文件

同样使用gcc工具

arm-linux-gnueabihf-ld-Ttext 0x87800000 led.o -o led.elf

        链接就是将所有的.o文件连接在一起,并且链接到指定地址。

        一般corte-a系列芯片都没有内部flash

        所以链接起始地址一般RAM区域,对与6ull芯片有128k的内部ram地址范围为0x90000000-0x91FFFFFF。也可一链接到外部flash中。也就是链接到DDR上。自己的芯片的DDR地址为0x80000000-0x8FFFFFFF

        对于本实验的链接起始地址为0x8780000,因为要使用DDR就必须要初始化DDR。对于i.mx6ull来说bin文件不能直接运行,需要添加一个头部,而这个头部信息就包括了初始化DDR的参数,I.MX6ull系列soc内部boot rom会从SD卡,emmc等外置存储中读取初始化参数,然后初始化DDR,并将bin文件拷贝到指定的地方。

        bin运行的地址一定要和链接起始地址一致,位置无关代码除外。

3,将.elf文件转为.bin文件

arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

4,将.elf文件转为汇编文件,反汇编

arm-linux-gnueabihf-objdump -D led.elf > led.dis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值