ARM裸機之點亮LED

2021-09-24 10:25:48 字數 2920 閱讀 5450

實驗開發版:s5pv210

1、什麼是gpio?

general purpose input output (通用輸入/輸出)簡稱為gpio,屬於晶元引腳的一部分。

嵌入式系統中常常有數量眾多,但是結構卻比較簡單的外部裝置/電路,對這些裝置/電路有的需要cpu為之提供控制手段,有的則需要被cpu用作輸入訊號。而且,許多這樣的裝置/電路只要求一位,即只要有開/關兩種狀態就夠了,比如燈亮與滅。對這些裝置/電路的控制,使用傳統的序列口或並行口都不合適。所以在微控制器晶元上一般都會提供乙個「通用可程式設計io介面」,即gpio。

2、點亮led的原因

點亮led要求正極與負極之間有一定的正向電壓差。

熄滅led就是讓正極與負極之間沒有電壓差。

3、查詢原理圖

d22:正極接3.3v,負極接引腳gpj0_3。

d23:正極接3.3v,負極接引腳gpj0_4。

d24:正極接3.3v,負極接引腳gpj0_5。

d25:正極接3.3v,負極接引腳pwmtout1(gpd0_1)。

d26:正極接5v,負極接地。

可以通過程式設計控制gpio引腳輸出低電平,產生電壓差。

4、查詢資料手冊

設定gpj0con控制暫存器,gpj0_3、gpj0_4、gpj0_5引腳為output工作模式,使其能輸出電壓。

設定gpj0dat資料暫存器,gpj0_3、gpj0_4、gpj0_5引腳相應位為0(低電平)。

5、點亮led的步驟:

(1)設定gpj0con控制暫存器,gpj0_3、gpj0_4、gpj0_5引腳為output工作模式,使其能輸出電壓。

(2)設定gpj0dat資料暫存器,gpj0_3、gpj0_4、gpj0_5引腳相應位為0(0為低電平,1為高電平)。

6、彙編**實現led流水燈

.global _start//鏈結屬性改為外部

_start:

//配置gpj0_3 ~ gpj0_5為輸出模式

ldr r0, =0xe0200240

ldr r1, =0x00111000

str r1, [r0]

//配置

gpd0_1

為輸出模式

ldr r0, =0xe02000a0

ldr r1, =0x00000010

str r1, [r0]

loop_led:

//配置

gpj0_3

為低電平

ldr r0, =0xe0200244

ldr r1, =((0<<3) | (1<<4) | (1<<5))

str r1, [r0]

//延時

bl delay

//配置

gpj0_4

為低電平

ldr r0, =0xe0200244

ldr r1, =((1<<3) | (0<<4) | (1<<5))

str r1, [r0]

//延時

bl delay

//配置

gpj0_5

為低電平

ldr r0, =0xe0200244

ldr r1, =((1<<3) | (1<<4) | (0<<5))

str r1, [r0]

//延時

bl delay

//配置

gpj0_3 ~ gpj0_5

為高電平

ldr r0, =0xe0200244

ldr r1, =((1<<3) | (1<<4) | (1<<5))

str r1, [r0]

//配置

gpd0_1

為低電平

ldr r0, =0xe02000a4

ldr r1, =(0<<1)

str r1, [r0]

//延時

bl delay

//配置

gpd0_1

為高電平

ldr r0, =0xe02000a4

ldr r1, =(1<<1)

str r1, [r0]

b loop_led

// 延時功能

delay:

ldr r1, =0

ldr r2, =7777777

loop_delay:

sub r2, r2, #1

cmp r1, r2

bne loop_delay

mov pc, lr

7、c語言**實現流水燈

// 暫存器巨集定義

#definegpj0con(0xe0200240)

#definegpj0dat(0xe0200244)

#define gpd0con(0xe02000a0)

#define gpd0dat(0xe02000a4)

#define rgpj0con(*(volatile unsigned int *)gpj0con)

#define rgpd0con(*(volatile unsigned int *)gpd0con)

#definergpj0dat(*(unsigned volatile int *)gpj0dat)

#definergpd0dat(*(unsigned volatile int *)gpd0dat)

// 延時函式

void delay_time(void)

void illumine_led(void)

}

裸機開發之點亮LED

基於x210開發板的led燈點亮。查閱底板原理圖可以得到,四個led引腳分別為 其中pwmtout1引腳與核心板的gpd0 1引腳相連,所以可以通過操作gpd0 1引腳來操作d25。gpio,general purpose input output的簡稱,屬於晶元上的一部分引腳,這部分引腳可以被程式...

ARM裸機led控制

define gpj0con 0xe0200240 define gpj0dat 0xe0200244 global start 將 start設定為外部屬性 start ldr r0,0x11111111 偽指令編譯器判斷是否為合法立即數 一般都是偽指令 ldr r1,gpj0con str r0...

ARM邏輯 點亮LED

一.led的工作特性及原理圖 d26為電源指示燈 其他led正極接到vdd3.3v 負極接到4個io口 要點亮led要將負極所接到額io口為低電平 發現gpio 通用輸入輸出 口之後需要去找到控制響應io的暫存器 gpio就是晶元的引腳 作為gpio的這類引腳,功能和特點是可以被程式設計控制它的工作...