一、现在原理图上找到对应的硬件连接关系(找led连接的引脚)
--该板子由一个底板和一个最小系统板组成
--先在底板找led1找到其对应的网络标号是led0

--再根据led0这个网络标号找到在插接件的B47这(其实此时已经找到在gpio3那了)

--再去核心板上查找得到GPIO1_IO3

二、由于引脚数量有限,所以多个控制器共用一个引脚(点灯使用gpio来控制)
--使用一个选通门(用MUXIO_SW来控制这个选通门)选择引脚功能
--使用PAD_SW控制电气特性
--配置引脚方向
--输出高低电平

三、根据手册配置功能
1、gpio内部图

--此次只用配置两个寄存器dir/dr 方向和数据

1、GPIO1_DR 第三位置0(低电平)或置1 (高电平)

2、GPIO1_DIR 第三位置1,引脚方向为输出
2、在MUX中配置MUX_MODE
--将其配置成GPIO_IO3 mode值为0101
3、在IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03中低四位配置成0x10b0,GPIO1_IO03
引脚使用默认的电气属性

四、汇编
cpp
.global _start
_start:
ldr pc, =_reset_handler
ldr pc, =_software_handler
ldr pc, =_undef_handler
ldr pc, =_prefetch_abort_handler
ldr pc, =_data_abort_handler
nop
ldr pc, =_irq_handler
ldr pc, =_fiq_handler
_software_handler:
b _software_handler
_undef_handler:
b _undef_handler
_prefetch_abort_handler:
b _prefetch_abort_handler
_data_abort_handler:
b _data_abort_handler
_irq_handler:
b _irq_handler
_fiq_handler:
b _fiq_handler
_reset_handler:
/*DDR 0x80000000 ~ 0xA0000000*/
cpsid i /*disable irq*/
ldr sp, =0x81000000 /*init system mode stack 16M */
cps #0x12 /*change to irq mode */
/*
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0x12
msr cpsr_c, r0
*/
ldr sp, =0x82000000 /*init irq mode stack 16M */
cps #0x1f /* change to system mode */
/*
mrs r0, cpsr
orr r0, r0, #0x1f
msr cpsr_c, r0
*/
cpsie i /* enable irq */
bl led_init
led:
bl led_on
bl led_delay
bl led_off
bl led_delay
b led
code_end:
b code_end
led_init:
ldr r0, =0x20e0068
ldr r1, [r0]
bic r1, r1, #0x1f
orr r1, r1, #0x05
str r1, [r0]
ldr r0, =0x20e02f4
ldr r1, [r0] /*unuse*/
ldr r1, =0x10b0
str r1, [r0]
ldr r0, =0x209c004
ldr r1, [r0]
orr r1, r1, #(1 << 3)
str r1, [r0]
ldr r0, =0x209c000
ldr r1, [r0]
orr r1, r1, #(1 << 3)
str r1, [r0]
bx lr
led_on:
ldr r0, =0x209c000
ldr r1, [r0]
bic r1, r1, #(1 << 3)
str r1, [r0]
bx lr
led_off:
ldr r0, =0x209c000
ldr r1, [r0]
orr r1, r1, #(1 << 3)
str r1, [r0]
bx lr
led_delay:
ldr r0, =0x80000
loop_delay:
sub r0, r0, #1
cmp r0, #0
bge loop_delay
bx lr
五、编译并下载
