imx6ull用C语言实现按键点灯代码

imx6ull用C语言实现按键点灯代码,第1张

int main(void)
{
	volatile unsigned int *pRegLed;	/* 加上volatile是为了告诉编译器这个寄存器的 *** 作是易变的,编译器不要去优化这个寄存器 */
									/* 假设我不加上这个volatile,让pRegLed =     tmp,这条语句很有可能会编译器优化掉 */

	volatile unsigned int *pRegKey2;
									
	/* 使能GPIO5和GPIO4 */
	/* 对于imx6ull来说,GPIO5默认就是使能状态,无需 *** 作 */

	/* 使能GPIO4 */
	pRegKey2 = (volatile unsigned int *)(0x020C4074);
	*pRegKey2 |= (3<<12);
									
	/* 把GPIO5_3设置为GPIO功能 */	
	pRegLed = (volatile unsigned int *)(0x02290000 + 0x14);
	*pRegLed |= (0x5);		/* 将pRegLed中的内容取出来然后,将bit0和bit3位写成1 */ 

	/* 把GPIO4_14设置为GPIO功能  20E_01B0h*/	
	pRegKey2 = (volatile unsigned int *)(0x020E01B0);
	*pRegKey2 &= ~(0xf);	/* 设置之前先清零,最保险的做法 */
	*pRegKey2 |= (0x5);		
	
	/* 把GPIO5_3设置为输出引脚 */
	pRegLed = (volatile unsigned int *)(0x020AC004);
	*pRegLed |= (1<<3);

	/* 把GPIO4_14设置为输入引脚 20A_8004*/
	pRegKey2 = (volatile unsigned int *)(0x020A8004);
	*pRegKey2 &= ~(1<<14);

	pRegLed = (volatile unsigned int *)(0x020AC000);
	pRegKey2 = (volatile unsigned int *)(0x020A8000);
	
	while(1)
	{
		if((*pRegKey2 & (1 << 14)) == 0)	/* key2被按下 */
		{
			/* 设置GPIO5_3输出0 */
			*pRegLed &= ~(1<<3);
		}
		else
		{
			/* 设置GPIO5_3输出1 */
			*pRegLed |= (1<<3);
		}
	}
}

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

原文地址:https://www.54852.com/langs/790717.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存