迅为龙芯2K1000开发板通过汇编控制GPIO

上一小节,我们使用了 C 语言控制了 gpio,这一小节我们来看一下如何使用汇编来控制 gpio 呢?有的

同学可能会有疑问了,既然我们可以使用 C 语言来控制 gpio,为什么我们还要使用更底层的汇编语言呢,

如果我们要使用 C 语言,是不是需要等待 C 语言环境建立起来才可以使用呢,那他是不是就要比汇编稍微

的慢一些呢,如果我们想让他上电立马就确定 gpio 管脚的电平的状态,使用汇编会更好些。

我们打开 Targets/LS2K/ls2k/start.S 下的 start.S 文件,我们在 9.4.2 小节里面已经确定了他的位置,这里

就不在赘述了。

然后我们在第 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)这种写法就是给 v0 地址偏移 0x10,v0 地址是 0xbfe10500,偏移 0x10 就是 0xbfe10510,即

输出数据寄存器

ld v1, 0x10(v0)

/*

*给数据寄存器写 1 输出高电平

*/

or v1, a0

sd v1, 0x10(v0) //on

/*

*延迟

*/

dli a2,0xffff

//delay

1:

subu a2, 0x1

nop

bgtz a2, 1b

/*

*给数据寄存器写 0 输出低电平

*/

or v1, a0

xor v1, a0

//off

sd v1, 0x10(v0)

/*

*延迟

*/

dli a2,0xffff

//delay

2:

subu a2, 0x1

nop

bgtz a2, 2b

如下图所示:

迅为龙芯2K1000开发板通过汇编控制GPIO_第1张图片

你可能感兴趣的:(汇编,单片机,嵌入式硬件)