用C汇编代码实现imx6ull点灯

用C汇编代码实现imx6ull点灯,第1张

一、GPIO的 *** 作方法(参考)

二、看原理图找到一个led灯,确定引脚(搜索led)

如图所示:
① 将GPIO5_3设置为输出引脚,输出低电平有压差灯就亮,输出高电平就灭
② 将GPIO5_3设置为GPIO模式需要 *** 作的寄存器是SNVS_TAMPER3

三、查看imx6ull的芯片手册

1.打开CCM (clock controller module) :其中各种子模块中有GPIO模块

上图所示:控制每组GPIO是否使能的寄存器(imx6ull默认都是使能的)
其中CCGP1[CG15]控制的是GPIO5的是否使能

2.打开IOMUX Controller

往下划

上图显示,每一个引脚都有一个寄存器去设置其工作为什么模式

芯片手册中搜索SNVS_TAMPER3寄存器

图片中涉及:
① 该寄存器的地址(基地址+偏移地址)
② 将bit3-bit0设置为101,即可将该引脚设置为GPIO模式

3.打开GPIO章节

直接看寄存器吧:

上图:
① 第二个寄存器设置的是:输入输出模式
② 第一个寄存器设置的是:output模式:高/低电平(1/0)
③ 第三个寄存器(引脚状态寄存器)设置的是:input模式
上图为GPIOx的方向寄存器,一个bit代表一个引脚,设置为0为input输入,设置为1位output输出,另外两个寄存器类似

查看上图中的基地址:可以直接搜索该寄存器获取基地址/绝对地址
如:

四、C语言实现点灯 *** 作
1. main函数

void delay(volatile int d)
{
	while(d--);
}

int main(void)
{
	volatile unsigned int *pReg;	/* 加上volatile是为了告诉编译器这个寄存器的 *** 作是易变的,编译器不要去优化这个寄存器 */
									/* 假设我不加上这个volatile,让pReg =     tmp,这条语句很有可能会编译器优化掉 */
	/* 使能GPIO5 */
	/* 对于imx6ull来说,GPIO5默认就是使能状态,无需 *** 作 */
									
	/* 把GPIO5_3设置为GPIO功能 */	
	pReg = (volatile unsigned int *)(0x02290000 + 0x14);
	*pReg |= (0x5);		/* 将pReg中的内容取出来然后,将bit0和bit3位写成1 */ 
	
	/* 把GPIO5_3设置为输出引脚 */
	pReg = (volatile unsigned int *)(0x020AC004);
	*pReg |= (1<<3);

	pReg = (volatile unsigned int *)(0x020AC000);

	while(1)
	{
		/* 设置GPIO5_3输出1 */
		*pReg |= (1<<3);
		delay(1000000);
		
		/* 设置GPIO5_3输出0 */
		*pReg &= ~(1<<3);
		delay(1000000);
	}
}

2.汇编文件代码

.text
.global  _start
_start: 	

	/* 使能GPIO5 */
	/* 对于imx6ull来说,GPIO5默认就是使能状态,无需 *** 作 */

	/* 把GPIO5_3设置为GPIO功能 */
	LDR R0, =0x02290014
	LDR R1, [R0]
	ORR	R1, R1, #0X5
	STR R1, [R0]

	/* 把GPIO5_3设置为输出引脚 */
	LDR R0, =0x020AC004
	LDR R1, [R0]
	ORR R1, R1, #(1<<3)
	STR R1, [R0]

	LDR R2, =0x020AC000

Loop:
	/* 设置GPIO5_3输出1 */
	LDR R1, [R2]
	ORR R1, R1, #(1<<3)
	STR R1, [R2]

	LDR R0, =1000000
	BL Delay	/* 当我们用BL指令来调用Delay函数的时候,LR寄存器就会保存
	下一条指令的地址,当Delay函数执行完毕了,Delay函数就会将LR赋给PC,就会返回来 */

	/* 设置GPIO5_3输出0 */
	LDR R1, [R2]
	BIC R1, R1, #(1<<3)
	STR R1, [R2]

	LDR R0, =1000000
	BL Delay

	B Loop

Delay:
	SUBS R0, R0, #1
	BNE Delay
	MOV PC, LR

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/789946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存