`

GPIO学习笔记

阅读更多

用汇编点亮一个led

1看原理图GPK4=0,ledGPK4=1led

2怎么让GPK4输出高低电平(看芯片手册,操作寄存器实现)

配置功能:输入/输出/其他

设置其输出高/低电平

3查看芯片手册

GPK4[19:16]

0000=Input 0001=Output

0010=HostI/FDATA[4] 0011=HSITXREADY

0100=Reserved 0101=DATA_CF[4]

0110=Reserved 0111=Reserved

GPKDAT在第4位写写0就对应GPK4

GPK[15:0][15:0]

Whentheportisconfiguredasinputport,thecorrespondingbitisthepinstate.

Whentheportisconfiguredasoutputport,thepinstateisthesameasthe

correspondingbit.Whentheportisconfiguredasfunctionalpin,theundefined

valuewillberead.

 

RegisterAddressR/WDescriptionResetValue

GPKCON00x7F008800R/WPortKConfigurationRegister00x22222222

GPKCON10x7F008804R/WPortKConfigurationRegister10x22222222

GPKDAT0x7F008808R/WPortKDataRegisterUndefined

GPKPUD0x7F00880CR/WPortKPull-up/downRegister0x55555555

 

 

RegisterAddressR/WDescriptionResetValue

WTCON0x7E004000R/WWatchdogtimercontrolregister0x8021

 

示例代码如下:

start.S文件

..globl_start

_start:

/*硬件的相关设置:把外设的基地址告诉cpu*/

ldrr0,=0x70000000

orrr0,r0,#0x13

mcrp15,0,r0,c15,c2,4

/*关闭看门狗*/

ldrr0,=0x7E00400

movr1,#0

strr1,[r0]

/*设置GPKCONGPK4作为输出引脚*/

ldrr1,=0x7F008800

movr0,#0x1000

strr0,[r1]

/*设置GPKDATGPK4输出0*/

ldrr1,=0x7F008808

movr0,#0

strr0,[r1]

halt:

bhalt

 

 

Makefile文件

led.bin:start.o

arm-linux-ld-Ttext0-oled.elfstart.o

arm-linux-objcopy-Obinaryled.elfled.bin

arm-linux-objdump-Dled.elf>led.dis

 

start.o:start.S

arm-linux-gcc-ostart.ostart.S-c

 

clean:

rm*.oled.elfled.binled.dis

 

编译make

led_on.bin烧写到nandflash,如同烧写linux类似,led_on.bin放到images目录下

修改friendlyARM.ini

Action=install

OS=UserBin

UserBin-Image=led_on.bin

 

 

点亮四个led灯,示例代码如下:

start.S文件

.globl_start

_start:

/*硬件相关设置*/

ldrr0,=0x70000000

orrr0,r0,#0x13

mcrp15,0,r0,c15,c2,4

/*关闭看门狗*/

ldrr0,=0x7e004000

movr1,#0

strr1,[r0]

/*设置GPKCONGPK4/5/6/7作为输出*/

ldrr1,=0x7F008800

ldrr0,=0x11110000

strr0,[r1]

/*设置GPKDATGPM4输出0*/

ldrr1,=0x7F0088080

movr0,#0

loop:

strr0,[r1]

addr0,r0,#1

cmpr0,#16

moveqr0,#0

bldelay

bloop

delay:

movr2,#0x10000000

delay_loop:

subr2,r2,#1

cmpr2,#0

bnedelay_loop

movpc,lr

halt:

bhalt

 

Makefile文件同上

 

 

c语言来实现点灯

1硬件相关设置

2调用c函数

示例代码如下:

voiddelay(){

volatileinti=0x10000000;

while(i--);

}

 

intmain(){

inti=0;

volatileunsignedlong*gpkcon=(volatileunsignedlong*)0x7F008800;

volatileunsignedlong*gpkdat=(volatileunsignedlong*)0x7F008808;

*gpkcon=0x11110000;

while(1){

*gpkdat=i;

i++;

if(i==16)

i=0;

delay();

}

return0;

}

.globl_start

_start:

/*硬件相关设置*/

ldrr0,=0x70000000

orrr0,r0,#0x13

mcrp15,0,r0,c15,c2,4

/*关看门狗*/

ldrr0,=0x7E00400

movr1,#0

strr1,[r0]

 

/*设置栈*/

ldrsp,=8*1024

blmain

Halt:

Bhalt

 

led.bin:start.oled.o

arm-linux-ld-Ttext0-oled.elfstart.oled.o

arm-linux-objcopy-Obinaryled.elfled.bin

arm-linux-objdump-Dled.elf>led.dis

 

start.o:start.S

arm-linux-gcc-ostart.ostart.S-c

led.o:led.c

arm-linux-gcc-oled.oled.c-c

 

clean:

rm*.oled.elfled.binled.dis

 


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics