原理图
image.png
image.png
image.png
image.png
image.png
.text
.global _start
_start:
ldr sp,=0x80000000+0x100000
bl main
void main()
{
volatile unsigned int *pRegLed;
volatile unsigned int *pRegKey;
/* 时钟使能GPIO1 CCM_CCGR1寄存器 */
pRegLed = (volatile unsigned int *)(0x020C406C);
*pRegLed |= (0b11 << 26);
/* 把GPIO1_3设置为GPIO功能 IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 */
pRegLed = (volatile unsigned int *)(0x020E0068);
*pRegLed &= ~(0xf);
*pRegLed |= 0x05;
/* 把GPIO1_18设置为GPIO功能 IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO018*/
pRegKey = (volatile unsigned int *)(0x020E008C);
*pRegKey &= ~(0xf);
*pRegKey |= 0x05;
/* 设置GPIO1_3引脚为输出 GPIO1_GDIR*/
pRegLed = (volatile unsigned int *)(0X0209C004);
*pRegLed |= (0b1 << 3);
/* 设置GPIO1_1引脚为输入 GPIO1_GDIR*/
pRegKey = (volatile unsigned int *)(0X0209C004);
*pRegKey &= ~(0b1 << 1);
/*GPIO1_DR GPIO data register GPIO数据寄存器 */
pRegLed = (volatile unsigned int *)(0X0209C000);
/*GPIO1_DR GPIO data register GPIO数据寄存器 */
pRegKey = (volatile unsigned int *)(0X0209C000);
while (1)
{
/* 读取GPIO1_1引脚 */
if((*pRegKey & (1<<18)) == 0) /* 被按下 */
{
*pRegLed |= (0b1 << 3); //灭
}
else
{
*pRegLed &= ~(0b1 << 3); //亮
}
}
}