GPIO學習筆記

2022-08-18 04:15:18 字數 4225 閱讀 4031

用彙編點亮乙個led

1 看原理圖 

gpk4=0 ,led

亮   

gpk4=1

,led

滅2  怎麼讓

gpk4

輸出高低電平 

(看晶元手冊,操作暫存器實現

)配置功能:輸入/輸出/

其他設定其輸出高/

低電平3 檢視晶元手冊

gpk4 [19:16]

0000 = input            0001 = output

0010 = host i/f data[4]  0011 = hsi tx ready

0100 = reserved  0101 = data_cf[4]

0110 = reserved  0111 = reserved

gpkdat 在第4

位寫寫0 

就對應gpk4

gpk[15:0] [15:0] 

when the port is configured as input port, the corresponding bit is the pin state.

when the port is configured as output port, the pin state is the same as the

corresponding bit. when the port is configured as functional pin, the undefined

value will be read.

register    address        r/w    description reset              value

gpkcon0  0x7f008800     r/w  port k configuration register 0   0x22222222

gpkcon1  0x7f008804     r/w  port k configuration register 1   0x22222222

gpkdat   0x7f008808      r/w  port k data register            undefined

gpkpud  0x7f00880c      r/w  port k pull-up/down register     0x55555555

register  address  r/w  description  reset value 

wtcon 0x7e004000 r/w watchdog timer control register  0x8021 

示例**如下:

start.s檔案

..globl _start

_start:

cpu*/

ldr r0, =0x70000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4

/*關閉看門狗

*/ldr r0,=0x7e004000

mov r1,#0

str r1,[r0]

/*設定

gpkcon gpk4

作為輸出引腳

*/ldr r1, =0x7f008800

mov r0,#0x10000000

str r0,[r1]

/*設定

gpkdat

讓gpk4

輸出0*/

ldr r1, =0x7f008808

mov r0,#0

str r0,[r1]

halt:

b halt

makefile檔案             

led.bin: start.o

arm-linux-ld -ttext 0 -o led.elf start.o

arm-linux-objcopy -o binary led.elf led.bin

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

start.o : start.s

arm-linux-gcc -o start.o start.s -c

clean:

rm *.o led.elf led.bin led.dis

編譯 make

將led_on.bin

燒寫到nand flash中,

如同燒寫

linux類似,

將led_on.bin

放到images

目錄下修改friendlyarm.ini

action=install

os=userbin

userbin-image=led_on.bin

點亮四個led

燈,示例**如下:

start.s檔案

.globl _start

_start:

/*硬體相關設定

*/ldr r0,=0x70000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4

/*關閉看門狗

*/ldr r0,=0x7e004000

mov r1,#0

str r1,[r0]

/*設定

gpkcon gpk4/5/6/7

作為輸出

*/ldr r1,=0x7f008800

ldr r0,=0x11110000

str r0,[r1]

/*設定

gpkdat

讓gpk4

輸出0*/

ldr r1,=0x7f0088080

mov r0,#0

loop:

str r0,[r1]

add r0,r0,#1

cmp r0,#16

moveq r0,#0

bl delay

b loop

delay:

mov r2,#0x10000000

delay_loop:

sub r2,r2,#1

cmp r2,#0

bne delay_loop

mov pc,lr

halt:

b halt

makefile檔案同上

用c語言來實現點燈

1 硬體相關設定

2 呼叫c函式

示例**如下:

void delay(){

volatile int i=0x10000000;

while (i--);

int main(){

int i=0;

volatile unsigned long *gpkcon = (volatile unsigned long *)0x7f008800;

volatile unsigned long *gpkdat = (volatile unsigned long *)0x7f008808;

*gpkcon=0x11110000;

while(1){

*gpkdat=i;

i++;

if(i==16)

i=0;

delay();

return 0;

.globl _start

_start:

/*硬體相關設定

*/ldr r0,=0x70000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4

/*關看門狗

*/ldr r0,=0x7e004000

mov r1,#0

str r1,[r0]

/*設定棧

*/ldr sp,=8*1024

bl main

halt:

b halt

led.bin: start.o led.o

arm-linux-ld -ttext 0 -o led.elf start.o led.o

arm-linux-objcopy -o binary led.elf led.bin

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

start.o : start.s

arm-linux-gcc -o start.o start.s -c

led.o:led.c

arm-linux-gcc -o led.o led.c -c

clean:

rm *.o led.elf led.bin led.dis

17 3 15 關於GPIO學習筆記

1 輸入浮空 2 輸入上拉 3 輸入下拉 4 模擬輸入 5 開漏輸出 6 推挽輸出 7 推挽復用 8 開漏復用 埠配置暫存器 32位,共兩個,crl和crh 資料暫存器 32位,共兩個,idr和odr 置位 復位暫存器 32位,乙個,bsrr 復位暫存器 16位,乙個,brr 鎖存暫存器 32位,乙...

stm32學習筆記 GPIO

2011 03 06 15 10 stm32基本上每個引腳都有8種配置模式 浮空輸入 帶弱上拉輸入 帶弱下拉輸入 模擬輸入 推挽輸出 開漏輸出 復用推挽輸出 復用開漏輸出 通常有5種方式使用某個引腳功能,它們的配置方式如下 1 作為普通gpio輸入 根據需要配置該引腳為浮空輸入 帶弱上拉輸入或帶弱下...

NodeMCU 學習筆記(二)GPIO操作

lua語法 函式 function 函式名 引數 幹活,幹活 return 引數,引數 end條件 if 條件 then 幹活,幹活 else 幹活,幹活 1 點亮乙個led燈,電路如上圖。pin 0 0就是d0 gpio.mode pin,gpio.output gpio.write pin,gp...