一,alpha的LED灯硬件原理分析
STM32 IO初始化流程
①,使能GPIO时钟
②,设置IO复用,复用为GPIO
③,配置GPIO的电气属性推挽,上拉下拉
④,使用GPIO,输出高/低电平
MX6ULL IO初始化
①,使能时钟,CCGR0-CCGR6这7个寄存器控制着6ULL所有外设时钟的使能,为了简单,设置CCGR0-CCGR6这7个寄存器全部为0XFFFFFFF,相当于使能所有外设时钟。
②,IO复用,将寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO_IO03的bit3~0设置为0101=5,这样GPIO1_IO03就复用为GPIO。
③,寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO_IO03是设置GPIO1_IO03的电气属性。包括压摆率,速度,驱动能力,开漏,上下拉等。
④,配置GPIO功能,设置输入输出,设置GPIO1_DR寄存器bit3为1,也就是设置为输出模式。设置GPIO1_DR寄存器的bit3,为1表示输出高电平,为0表示输出低电平
二,汇编基础
_start:是汇编起始标志
LDR指令将地址立即数加载到寄存器Rx中,@是注释符
比如LMX6UL有个寄存器GPIO1_GDIR,其地址为0x0209C004
示例:LDR R0,=0x0209C004 @将寄存器地址0x0209C004加载到R0中
示例:LDR R1,[R0] @读取地址0x0209C004中的数据到R1寄存器中
上述示例将寄存器GPIO1_GDIR中的值,读取到的寄存器值保存在R1寄存器中
STR指令将一个存储器中数据写入另一个存储器Rx中
比如LMX6UL寄存器GPIO1_GDIR的值为0x20000002
示例:LDR R0,=0x0209C004 @将寄存器地址0x0209C004加载到R0中
示例:LDR R1, =0x20000002 @R1保存要写入到寄存器的值,R1=0x20000002
示例:STR R1, [R0] @将R1的值写入到R0中所保存的地址中
@用汇编实现int a,b a=b 假设a地址为0x20,b地址为0x30
LDR R0,=0X30 @读取b的值到R0中
LDR R1,[R0] @读取R0的值到R1中
LDR R0,=0X20 @读取a的值到R0中
STR R1,[R0] @将R1的值写到R0中