S5PV210實現流水燈功能

2021-10-25 05:25:23 字數 1772 閱讀 8336

1.如何點亮led

要求:正極和負極之間有正向的電壓差;

方法:正極已經接了3.3v的電源,負極接在了soc的引腳上,可以通過soc中程式設計控制負極輸出低電平(0v),使得正負極之間有了正向電壓差,led即可點亮。

2.gpio(general purpose input output)

gpio就是晶元中的引腳(晶元中有一部分的引腳是gpio),這類引腳可以通過程式設計控制他的工作模式和電壓的高低;

led就連線在乙個gpio上,可以通過程式設計控制gpio模式的輸入和輸出值來操作led;如果設計電路時led沒有接在gpio引腳上,就無法通過程式設計控制led;

3.led的電路圖

4.gpj0的相關暫存器

gpj0con

配置各個引腳的工作模式

gpj0dat

用於讀/寫引腳;

設定為輸入模式時,讀此暫存器相應位可知相應引腳輸入高/低電平;

設定為輸出模式時,寫此暫存器相應位可操作此引腳輸出高/低電平。

gpj0pud

控制引腳內部弱上拉,下拉

gpj0drv

配置gpio引腳的驅動能力

gpj0conpdn

低功耗模式下的控制及訪問

gpj0pudpdn

低功耗模式下的上下拉

5.程式設計實現流水燈

其實在此處主要使用gpj0con、gpj0dat即可,將gpj0con暫存器設定為output模式,將gpj0dat暫存器的相應位設定為0;

/**

* 彙編實現流水燈功能

* **/

#define gpj0con 0xe0200240

#define gpj0dat 0xe0200244

.globl _start

_start:

ldr r1, = gpj0con // =代表ldr是偽指令,需要編譯器來判斷這個數是否是合法立即數

ldr r0, = 0x11111111

str r0, [r1] // 暫存器間接定址,將暫存器中的值寫入記憶體中

flash:

// 點亮led1

ldr r1, = gpj0dat

ldr r0, = ~(1<<3) // 使用位取反實現點亮單顆led的效果

str r0, [r1]

// 延時

bl delay

// 點亮led2

ldr r1, = gpj0dat

ldr r0, = ~(1<<4)

str r0, [r1]

// 延時

bl delay

// 點亮led3

ldr r1, = gpj0dat

ldr r0, = ~(1<<5)

str r0, [r1]

// 延時

bl delay

b flash

delay:

mov r0, #0x900000

delay_loop:

sub r0, r0, #1 //r2 = r2 -1

cmp r0, #0 // cmp會影響z標誌位,如果r0等於0,則z=1,下一句中eq就會成立

bne delay_loop

mov pc, lr // 函式呼叫返回

S5PV210 裸機中斷

這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...

S5PV210控制蜂鳴器

s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...

S5PV210控制蜂鳴器

s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...