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