KEY按键点灯

原理图

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);  //亮
        }    
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容