
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);
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)