我正在使用一些LED和输入按钮进行Raspberry Pi组装项目。此刻我有一个闪烁的LED和一个按钮来打开另一个LED。现在我想要设置另一个LED,我会遇到一些我做错了或者不太明白的事情。
因此,如果我在一个GPFSEL中有多个LED,我需要在一行代码中设置它们,这样它们就不会互相覆盖。例如:
GPIO端口21是FSEL21 =位5 - 3
GPIO端口27是FSEL27 =位23-21
要将它们设置为输出,我需要将最低有效位设置为1.这些是:十六进制中的0x08和0x200000。
如果我用两行代码执行,例如:
ldr register,=0x08
str register,[base,#GPFSEL2]
ldr register,=0x200000
str register,[base,#GPFSEL2]
它不起作用。
所以我在一行代码中完成了这个工作:
ldr register,=0x200008
str register,[base,#GPFSEL2]
我现在的问题是设置GPFSEL1,因为它有一个输出和一个输入。纪录片说我必须设置000作为输入。
所以我有:
GPIO端口19 =输出为FSEL19 =位29 - 27
GPIO端口17 =输入按钮是FSEL17 =位23-21
GPIO 19 = 0x8000000
GPIO端口17,纪录片说我必须将位设置为000.我正在阅读的教程将掩码设置为0xFF1FFFFF,即Binary中的11111111000111111111111111111111。
现在我不明白我怎么不能把它们放在一起。我必须设置输入吗?如果我不设置任何东西,不应该是000?我试图不在输入中设置任何东西,它作为输入工作,但闪烁的LED变得非常慢,代码中没有任何其他变化。我希望你能告诉我设置这个位的正确方法是什么。
谢谢您的帮助!
要设置输出引脚的功能,您可以使用
ldr r0, [base,#GPFSEL2]
bic r0, #(7 << 3)
bic r0, #(7 << 21)
orr r0, #(1 << 3)
orr r0, #(1 << 21)
str r0, [base,#GPFSEL2]
同上输入,但你可以省略orr
。