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函式...