LED实验
汇编的方式驱动LED
/**LED汇编实验*创建者:Orange*03月04日*/.global _start @全局标号_start:/*使能所有外设时钟 */ldr r0, =0x020c4068 @CCGR0的地址ldr r1, =0xffffffff @要向CCGR0写入的数据str r1, [r0] @将0xffffffff写入到CCGR0中ldr r0, =0x020c406c @CCGR1的地址str r1, [r0]ldr r0, =0x020c4070 @CCGR2的地址str r1, [r0]ldr r0, =0x020c4074 @CCGR3的地址str r1, [r0]ldr r0, =0x020c4078 @CCGR4的地址str r1, [r0]ldr r0, =0x020c407c @CCGR5的地址str r1, [r0]ldr r0, =0x020c4080 @CCGR6的地址str r1, [r0]/*配置GPIO5_IO3的PIN复用为GPIO,也就是*设置IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = 3*IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290014*/ldr r0, =0x02290014@IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3的地址ldr r1, =3 @关闭该口的软件输入功能,复用为GPIO,则应赋值0x1010,即3str r1, [r0] @将0x00101写入IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器中/*配置SNVS_TAMPER3的电气属性 也就是寄存器:*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290058**bit0:0 为低速率 压摆率设置*bit5:3 110 R0/6的驱动能力 设置驱动能力(Drive Strength Field)*bit7:6 10 medium(100MHz) 设置速度*bit110 关闭开漏使能设置开漏使能*bit121 使能Pull/Keeper *bit130 选择Keeper选择Pull还是Keeper*bit15:14 00 100K的下拉电阻 设置上/下拉电阻的大小*bit160 关闭HYS使能设置HYS磁滞使能 *综上该寄存器的值应设置为0x10b0*/ldr r0, =0x02290058 @IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3的地址ldr r1, =0x10b0str r1, [r0] @将r1中的值/*设置GPIO 设置是输入还是输出 *GPIO5_GDIR寄存器地址为0x020ac004*设置GPIO5_GDIR寄存器的bit3为1*也就是设置GPIO5_IO03为输出*/ldr r0, =0x0209c004ldr r1, =0x8str r1, [r0]/*打开LED,也就是设置GPIO5_GPIO03为0*具体要结合开发板原理图上LED的连接方式来操作*由于此处LED另一端连接的是电源,所以设置为0为点亮* */ldr r0, =0x02090000ldr r1, =1str r1, [r0]loop :b loop
汇编驱动LED小结(代码分析):
全局标号使能所有外设时钟(或在芯片手册中)ldr r1, =0xffffffff ldr r0, =CCGR(时钟控制寄存器)的地址str r1, [r0]
配置对应的复用IO口为GPIO
/*配置GPIO5_IO3的PIN复用为GPIO,也就是*设置IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = 3*IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290014*//*配置GPIO5_IO3的PIN复用为GPIO,也就是*设置IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = 3*IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290014*/ldr r0, =0x02290014@IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3的地址ldr r1, =3 @关闭该口的软件输入功能,复用为GPIO,则应赋值0x1010,即3str r1, [r0] @将0x00101写入IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器中
配置此GPIO口的电气属性,比如压摆率、驱动能力、是否开漏、上下拉电阻的大小、是否使能PULL/Keeper、是否打开HYS磁滞使能等等
/*配置SNVS_TAMPER3的电气属性 也就是寄存器:*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290058**bit0:0 为低速率 压摆率设置*bit5:3 110 R0/6的驱动能力 设置驱动能力(Drive Strength Field)*bit7:6 10 medium(100MHz) 设置速度*bit110 关闭开漏使能设置开漏使能*bit121 使能Pull/Keeper *bit130 选择Keeper选择Pull还是Keeper*bit15:14 00 100K的下拉电阻 设置上/下拉电阻的大小*bit160 关闭HYS使能设置HYS磁滞使能 *综上该寄存器的值应设置为0x10b0*/ldr r0, =0x02290058 @IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3的地址ldr r1, =0x10b0str r1, [r0] @将r1中的值
设置GPIO是输入还是输出
/*设置GPIO 设置是输入还是输出 *GPIO5_GDIR寄存器地址为0x020ac004*设置GPIO5_GDIR寄存器的bit3为1*也就是设置GPIO5_IO03为输出*/ldr r0, =0x0209c004ldr r1, =0x8str r1, [r0]
设置完后便可以对GPIO操作,设置0或1,控制GPIO的动作
/*打开LED,也就是设置GPIO5_GPIO03为0*具体要结合开发板原理图上LED的连接方式来操作*由于此处LED另一端连接的是电源,所以设置为0为点亮* */ldr r0, =0x02090000ldr r1, =1str r1, [r0]
最后设置一个循环,使程序持续进行
loop :
b loop