迅為龍芯2K1000開(kāi)發(fā)板通過(guò)匯編控制GPIO
上一小節,我們使用了 C 語(yǔ)言控制了 gpio,這一小節我們來(lái)看一下如何使用匯編來(lái)控制 gpio 呢?有的
同學(xué)可能會(huì )有疑問(wèn)了,既然我們可以使用 C 語(yǔ)言來(lái)控制 gpio,為什么我們還要使用更底層的匯編語(yǔ)言呢,
如果我們要使用 C 語(yǔ)言,是不是需要等待 C 語(yǔ)言環(huán)境建立起來(lái)才可以使用呢,那他是不是就要比匯編稍微
的慢一些呢,如果我們想讓他上電立馬就確定 gpio 管腳的電平的狀態(tài),使用匯編會(huì )更好些。
我們打開(kāi) Targets/LS2K/ls2k/start.S 下的 start.S 文件,我們在 9.4.2 小節里面已經(jīng)確定了他的位置,這里
就不在贅述了。
然后我們在第 487 行輸入以下代碼,同樣,這里還是用 gpio0 給大家舉例
/*
*設置使用 GPIO 的方向為輸出
*/
li v0, 0xbfe10500
ld v1, (v0)
dli a0, (1<<0)
//gpio0
or v1, a0
xor v1, a0
sd v1, (v0)
/*
*找到 GPIO 輸出數據寄存器
*/
//0x10(v0)這種寫(xiě)法就是給 v0 地址偏移 0x10,v0 地址是 0xbfe10500,偏移 0x10 就是 0xbfe10510,即
輸出數據寄存器
ld v1, 0x10(v0)
/*
*給數據寄存器寫(xiě) 1 輸出高電平
*/
or v1, a0
sd v1, 0x10(v0) //on
/*
*延遲
*/
dli a2,0xffff
//delay
1:
subu a2, 0x1
nop
bgtz a2, 1b
/*
*給數據寄存器寫(xiě) 0 輸出低電平
*/
or v1, a0
xor v1, a0
//off
sd v1, 0x10(v0)
/*
*延遲
*/
dli a2,0xffff
//delay
2:
subu a2, 0x1
nop
bgtz a2, 2b
如下圖所示:
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。