#include<stdio.h>
#include<unistd.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define PIO_BASE_ADDRESS 0x01C20800
typedef struct
{
unsigned int CFG[4];
unsigned int DAT ;
unsigned int DRV0;
unsigned int DRV1;
unsigned int PUL0;
unsigned int PUL1;
}PIO_Struct;
typedef struct
{
PIO_Struct Pn[7];
}PIO_Map;
typedef enum
{
PA = 0,
PB = 1,
PC = 2,
PD = 3,
PE = 4,
PF = 5,
PG = 6,
}PORT;
typedef enum
{
IN = 0x00,
OUT = 0x01,
AUX = 0x02,
INT = 0x06,
DISABLE = 0x07,
}PIN_MODE;
PIO_Map *PIO = NULL;
unsigned int *gpio_map;
void GPIO_Init(void)
{
unsigned int fd;
unsigned int addr_start, addr_offset;
unsigned int PageSize, PageMask;
if((fd = open("/dev/mem",O_RDWR)) == -1)
{
printf("open error\r\n");
return;
}
PageSize = sysconf(_SC_PAGESIZE); //頁大小
PageMask = (~(PageSize-1)); //頁掩碼
// printf("PageSize:%d,PageMask:%.8X\r\n",PageSize,PageMask);
addr_start = PIO_BASE_ADDRESS & PageMask;
addr_offset = PIO_BASE_ADDRESS & ~PageMask;
// printf("addr_start:%.8X,addr_offset:%.8X\r\n",addr_start,addr_offset);
if((gpio_map = mmap(NULL,PageSize*2,PROT_READ|PROT_WRITE, MAP_SHARED,fd,addr_start)) == NULL)
{
// printf("mmap error\r\n");
close(fd);
return;
}
// printf("gpio_map:%.8X\r\n",gpio_map);
PIO = (PIO_Map *)((unsigned int)gpio_map + addr_offset);
// printf("PIO:%.8X\r\n",PIO);
close(fd);
}
void GPIO_ConfigPin(PORT port,unsigned int pin,PIN_MODE mode)
{
if (gpio_map == NULL)
return;
PIO->Pn[port].CFG[pin / 8] &= ~((unsigned int)0x07 << pin % 8 * 4);
PIO->Pn[port].CFG[pin / 8] |= ((unsigned int)mode << pin % 8 * 4);
}
void GPIO_SetPin(PORT port,unsigned int pin,unsigned int level)
{
if (gpio_map == NULL)
return;
if(level) PIO->Pn[port].DAT |= (1 << pin);
else PIO->Pn[port].DAT &= ~(1 << pin);
}
void main()
{
char i;
// printf("this is main!\n\n");
GPIO_Init();
GPIO_ConfigPin(PE,5,OUT);
// for(i=0;i<150;i++)
{
GPIO_SetPin(PE,5,1);
// sleep(0.1);
// GPIO_SetPin(PE,5,0);
// sleep(0.1);
}
}
全志linux C應(yīng)用程序mmap方式驅(qū)動GPIO
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門贬墩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妄呕,你說我怎么就攤上這事陶舞。” “怎么了绪励?”我有些...
- 文/不壞的土叔 我叫張陵吊说,是天一觀的道長论咏。 經(jīng)常有香客問我,道長颁井,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任蠢护,我火速辦了婚禮雅宾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葵硕。我一直安慰自己眉抬,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布懈凹。 她就那樣靜靜地躺著蜀变,像睡著了一般。 火紅的嫁衣襯著肌膚如雪介评。 梳的紋絲不亂的頭發(fā)上库北,一...
- 文/蒼蘭香墨 我猛地睜開眼椅文,長吁一口氣:“原來是場噩夢啊……” “哼喂很!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皆刺,我...
- 正文 年R本政府宣布末融,位于F島的核電站,受9級特大地震影響暇韧,放射性物質(zhì)發(fā)生泄漏勾习。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一懈玻、第九天 我趴在偏房一處隱蔽的房頂上張望巧婶。 院中可真熱鬧,春花似錦涂乌、人聲如沸艺栈。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽湿右。三九已至,卻和暖如春罚勾,著一層夾襖步出監(jiān)牢的瞬間毅人,已是汗流浹背峦阁。 一陣腳步聲響...