我必须将我的 GSM 模块与基于 ARM9 的 AM1808 连接起来。
我已将所有 GPIO 引脚分配给 Da850.c 以及 mux.h 文件。我成功创建了一个 uImage 并将该图像插入到我的 Flash 中。
我需要处理用户应用程序中的一些 GPIO。
我知道我们可以从内核空间处理 GPIO,但我需要从用户空间处理。
例如,我为 GSM 模块分配了一个用于电源键的 GPIO。我需要通过应用程序更改引脚方式(高或低)。
好的,我编写了以下代码来从用户空间访问它,
#include <stdio.h>
#include <time.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <unistd.h>
#include "GSMpwr.h"
#define BS_GSM_PWR_REGISTER 0x01E26014
#define BS_DCDS_MASK 0x00000004
int fd; // Memory device descriptor
unsigned long *pPWR;
unsigned short GetGSMpwr(void)
{
#if defined __HOST_ARM
unsigned long dcd_value = *pPWR;
return (pwr_value >> 7) & 0x01;
#endif
}
void InitializeGSMpwr(void)
{
#if defined __HOST_ARM
int page_size = getpagesize();
unsigned int MAP_addr;
unsigned int reg_addr;
unsigned char *pTemp; // Pointer to GSMpwr register
/*
* Open memory and get pointer to GSMpwr register in the FPGA
*/
if((fd = open("/dev/mem", O_RDWR | O_SYNC)) < 0)
{
printf("failed to open /dev/mem");
return;
}
else
{
MAP_addr = (BS_GSM_PWR_REGISTER & ~(page_size - 1));
pTemp = (unsigned char *)mmap(NULL, page_size,(PROT_READ | PROT_WRITE),MAP_SHARED,fd,MAP_addr);
if((pTemp == MAP_FAILED) || (pTemp == NULL))
{
printf("failed to map /dev/mem");
return;
}
else
{
printf(“Memory Mapped at Address %p. \n”,pTemp);
}
virt_addr = map_base + (control & MAP_MASK);
reg_addr = (BS_GSM_PWR_REGISTER & (page_size - 1));
pPWR = (unsigned long*)(pTemp + reg_addr);
printf("GSM PWR PIN mapped in Application\n");
}
我只能通过这段代码读取该引脚,现在我想使用该引脚作为输出,并希望以 3 秒的时间间隔走高和走低。
最简单的方法是利用 GPIO 支持sysfs
,您可以在其中控制所有导出的 GPIO。请看一下Linux内核 GPIO 文档 https://www.kernel.org/doc/Documentation/gpio.txt, 尤其,用户空间的 Sysfs 接口 part.
启用 GPIO 支持后sysfs
(GPIO_SYSFS
),GPIO 控制将非常简单:
Example
GPIO=22
cd /sys/class/gpio
ls
echo $GPIO > /sys/class/gpio/export
ls
请注意,第一个 ls 中 gpio22 不存在,但在将 GPIO 22 导出到用户空间后确实存在。
cd /sys/class/gpio/gpio$GPIO
ls
有一些文件可以设置方向并检索当前值。
echo "in" > direction
cat value
您可以配置 GPIO 进行输出并设置值。
echo "out" > direction
echo 1 > value
示例取自here https://www.ridgerun.com/developer/wiki/index.php/How_to_use_GPIO_signals.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)