BeagleBone DIY 之继续继续 继电器的GPIO操作
[复制链接]
BeagleBone的GPIO方式控制继电器 继电器接口有: DOUT1 GPIO1_6 DOUT2 GPIO1_7 DOUT3 GPIO1_2 DOUT4 GPIO1_3 DOUT5 GPIO1_13 DOUT6 GPIO1_12 DOUT7 EHRPWM2B ? DOUT8 GPIO0_26 DOUT9 GPIO1_15 DOUT10 GPIO1_14 GPIO有8中工作模式,分别为MODE0-MODE7,不同的工作模式GPIO具有不同的功能。通常情况下,默认的工作模式为MODE7,但不是所有的GPIO都设置为MODE7。 GPIOc操作需要二个步骤: 1. 选定具体GPIO口,设置GPIO口的工作模式; 2.编写控制程序。 GPIO的工作模式设定 任何一个GPIO口都可以。注意: GPIO的拉电流最大只有8mA。 BeagleBone的引脚工作模式设置: /sys/kernel/debug/omap_mux文件下有每个引脚的模式设定文件。 输入:# ls /sys/kernel/debug/omap_mux就可以查看到。 由下表可知对应设置文件为gpmc_ad6。同理,GPIO1_7对应的文件为gpmc_ad7,TIMER4对应的文件为gprnc_advn_ale。 图表在BONE_SRM.pdf PAGE 55可以查到。
继电器1(DOUT1腿)对应 GPIO1_6 首先查看GPIO1_6引脚的工作模式,在中断输入:# #cat /sys/kernel/debug/omap_mux/gpmc_ad6回车后可以看到如下内容: root@beaglebone:/# cat sys/kernel/debug/omap_mux/gpmc_ad6 name: gpmc_ad6.gpio1_6 (0x44e10818/0x818 = 0x0037), b NA, t NA mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE7 signals: gpmc_ad6 | mmc1_dat6 | NA | NA | NA | NA | NA | gpio1_6 root@beaglebone:/# 由上可知GPIO1_6工作模式为OMAP_MUX_MODE0(MODE0),寄存器的数据为0x0000,而作为普通I/O口工作模式为MODE7,所以需要更改工作模式。MODE7。 有关GPIO的寄存器可以参考AM335X技术参考手册:spruh73f.dpf 在终端内输入:# echo 7 > /sys/kernel/debug/omap_mux/gpmc_ad6,即可通过管道设置GPIO1_6的寄存器值为0x0007,再次输入:#cat /sys/kernel/debug/omap_mux/gpmc_ad可以看到如下内容: root@beaglebone:/# echo sys/kernel/debug/omap_mux/gpmc_ad6 sys/kernel/debug/omap_mux/gpmc_ad6 root@beaglebone:/# cat sys/kernel/debug/omap_mux/gpmc_ad6 name: gpmc_ad6.gpio1_6 (0x44e10818/0x818 = 0x0037), b NA, t NA mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE7 signals: gpmc_ad6 | mmc1_dat6 | NA | NA | NA | NA | NA | gpio1_6 root@beaglebone:/#可以看到工作模式已经更改为MODE7,至此就完成了GPIO的工作模式设置。
2. 编写控制程序 GPIO的配置文件在/sys/class/gpio root@beaglebone:/# ls sys/class/gpio/ export gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport root@beaglebone:/# 控制程序: 1,配置GPIO:在/sys/class/gpio目录下可以看到文件export,调用该文件以实现配置。该文件对所有GPIO编号,从0开始。GPIOn_x的编号为32*n+x,例如此处用的GPIO1_6的编号为32*1+6=38。在终端输入:# echo "38" > /sys/class/gpio/export, root@beaglebone:/# echo "38" > /sys/class/gpio/export root@beaglebone:/# ls sys/class/gpio/ export gpio38 gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport root@beaglebone:/# 在此回到目录/sys/class/gpio下,可以看到产生了一个新的目录./gpio38,里面包含了该IO口的输入输出设置等配置文件。export文件只有root写权限,执行上述命令或者以后用C编写的可执行文件要以ROOT身份执行。 设置GPIO的方向(输入输出): # echo "out" > /sys/class/gpio/gpio38/direction,即设置该GPIO为输出。 设置GPIO的输出电平:输入: #echo "1" > /sys/class/gpio/gpio38/value,即设置GPIO输出高电平,输入echo "0" > /sys/class/gpio/gpio38/value设置GPIO输出低电平。 关闭GPIO:在终端输入:#echo "38" > /sys/class/gpio/unexport,即删除GPIO配置文件,可以看到目录gpio38已经被删除。
下面是C语言编写的GPIO控制例程,实现继电器1的每隔5秒动作一次。
#include
#include
#include
#include
int main(void)
{
FILE *p=NULL;
int i=0;
p = fopen("/sys/class/gpio/export","w");
fprintf(p,"%d",38);
fclose(p);
p = fopen("/sys/class/gpio/gpio38/direction","w");
fprintf(p,"out");
fclose(p);
for(i=0;i<1000;i++)
{
p = fopen("/sys/class/gpio/gpio38/value","w");
fprintf(p,"%d",1);
sleep(5);
fclose(p);
p = fopen("/sys/class/gpio/gpio38/value","w");
fprintf(p,"%d",0);
sleep(5);
fclose(p);
}
p = fopen("/sys/class/gpio/unexport","w");
fprintf(p,"%d",38);
fclose(p);
return 0;
}
回到前面: 继电器接口对应文件有: DOUT1 GPIO1_6 gpmc_ad6 DOUT2 GPIO1_7 gpmc_ad7 DOUT3 GPIO1_2 gpmc_ad2 DOUT4 GPIO1_3 gpmc_ad3 DOUT5 GPIO1_13 gpmc_ad13 DOUT6 GPIO1_12 gpmc_ad12 DOUT7 EHRPWM2B gpmc_ad9 DOUT8 GPIO0_26 gpmc_ad10 DOUT9 GPIO1_15 gpmc_ad15 DOUT10 GPIO1_14 gpmc_ad14 首先设置模式为GPIO 7 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad6 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad7 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad2 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad3 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad13 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad12 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad9 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad10 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad15 # echo 7 > sys/kernel/debug/omap_mux/gpmc_ad14
也可以运行程序: #include
#include
#include
#include
int main(void)
{
FILE *p=NULL;
int i=0; For(i =1;i < 11; i++;) { Switch(i) { Case 1:
p = fopen("sys/kernel/debug/omap_mux/gpmc_ad6","w");
break; Case 2:
p = fopen("sys/kernel/debug/omap_mux/gpmc_ad7","w");
break; Case 3:
p = fopen("sys/kernel/debug/omap_mux/gpmc_ad2","w");
break; Case 4: p = fopen("sys/kernel/debug/omap_mux/gpmc_ad3","w");
break; case 5: p = fopen("sys/kernel/debug/omap_mux/gpmc_ad13","w");
break; case 6: p = fopen("sys/kernel/debug/omap_mux/gpmc_ad12","w");
break; case 7: p = fopen("sys/kernel/debug/omap_mux/gpmc_ad9","w");
break; case 8: p = fopen("sys/kernel/debug/omap_mux/gpmc_ad10","w");
break; case 9: p = fopen("sys/kernel/debug/omap_mux/gpmc_ad15","w");
break; case 10: p = fopen("sys/kernel/debug/omap_mux/gpmc_ad14","w");
break; } fprintf(p,"%d",7);
fclose(p); }
}
其次参数GPIO操作文件 其次编写相应程序:1,程序中产生相应文件去操作 也可以在程序外面产生。
[ 本帖最后由 damiaa 于 2012-10-24 00:00 编辑 ]
|