一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(上)

LED实验

汇编的方式驱动LED

/*
*LED汇编实验
*创建者:Orange
*2021年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,即3
   str 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) 设置速度
    *bit11     0   关闭开漏使能     设置开漏使能
    *bit12     1   使能Pull/Keeper                     
    *bit13     0   选择Keeper      选择Pull还是Keeper
    *bit15:14  00  100K的下拉电阻   设置上/下拉电阻的大小
    *bit16     0   关闭HYS使能      设置HYS磁滞使能 
    *综上该寄存器的值应设置为0x10b0
    */

    ldr r0, =0x02290058    @IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3的地址
    ldr r1, =0x10b0
    str r1, [r0]           @将r1中的值

    /*设置GPIO 设置是输入还是输出 
     *GPIO5_GDIR寄存器地址为0x020ac004
     *设置GPIO5_GDIR寄存器的bit3为1
     *也就是设置GPIO5_IO03为输出
     */
   ldr r0, =0x0209c004
   ldr r1, =0x8
   str r1, [r0]

   /*打开LED,也就是设置GPIO5_GPIO03为0
    *具体要结合开发板原理图上LED的连接方式来操作
    *由于此处LED另一端连接的是电源,所以设置为0为点亮
    * */
   ldr r0, =0x02090000
   ldr r1, =1
   str r1, [r0]

   loop :
       b loop

汇编驱动LED小结(代码分析):

  1. 全局标号
  2. 使能所有外设时钟(或在芯片手册中)
ldr r1, =0xffffffff 
       ldr r0, =CCGR(时钟控制寄存器)的地址
       str r1, [r0]
  1. 配置对应的复用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,即3
   str r1, [r0]            @将0x00101写入IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器中
  1. 配置此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) 设置速度
    *bit11     0   关闭开漏使能     设置开漏使能
    *bit12     1   使能Pull/Keeper                     
    *bit13     0   选择Keeper      选择Pull还是Keeper
    *bit15:14  00  100K的下拉电阻   设置上/下拉电阻的大小
    *bit16     0   关闭HYS使能      设置HYS磁滞使能 
    *综上该寄存器的值应设置为0x10b0
    */

    ldr r0, =0x02290058    @IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3的地址
    ldr r1, =0x10b0
    str r1, [r0]           @将r1中的值
  1. 设置GPIO是输入还是输出
/*设置GPIO 设置是输入还是输出 
     *GPIO5_GDIR寄存器地址为0x020ac004
     *设置GPIO5_GDIR寄存器的bit3为1
     *也就是设置GPIO5_IO03为输出
     */
   ldr r0, =0x0209c004
   ldr r1, =0x8
   str r1, [r0]
  1. 设置完后便可以对GPIO操作,设置0或1,控制GPIO的动作
/*打开LED,也就是设置GPIO5_GPIO03为0
    *具体要结合开发板原理图上LED的连接方式来操作
    *由于此处LED另一端连接的是电源,所以设置为0为点亮
    * */
   ldr r0, =0x02090000
   ldr r1, =1
   str r1, [r0]
  1. 最后设置一个循环,使程序持续进行
    loop :
    b loop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OrangeQG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值