#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include "gpio.h"
unsigned char *map_base=NULL;
int dev_fd;
int gpio_init(void){
dev_fd = open("/dev/mem", O_RDWR | O_SYNC);
if (dev_fd < 0)
{
printf("\nopen(/dev/mem) failed.\n");
return -1;
}
map_base=(unsigned char *)mmap(0,MAP_SIZE,PROT_READ|PROT_WRITE,
MAP_SHARED,dev_fd,REG_BASE);
return 0;
}
int gpio_enable(int gpio_num,int val){
int offset,gpio_move;
if(gpio_num > 31)
{
offset = 4;
gpio_move = gpio_num- 32;
}
else
{
offset = 0;
gpio_move = gpio_num;
}
if(val==0)
{
//GPIO 使能 in
*(volatile unsigned int *)(map_base + GPIO_EN +offset) |= (1<<gpio_move);
//printf("Enable GPIO%d in\n",gpio_num);
}
else
{
//GPIO 使能 out
*(volatile unsigned int *)(map_base + GPIO_EN +offset) &= ~(1<<gpio_move);
//printf("Enable GPIO%d out\n",gpio_num);
}
return 0;
}
int gpio_close(void){
if (dev_fd < 0)
{
printf("\nopen(/dev/mem) failed.\n");
return -1;
}
munmap(map_base,MAP_SIZE);// 解除映射关系
if(dev_fd)
{
close(dev_fd);
}
return 0;
}
int gpio_write(int gpio_num, int val){
int offset, gpio_move;
if(gpio_num > 31)
{
offset = 4;
gpio_move = gpio_num- 32;
}
else
{
offset = 0;
gpio_move = gpio_num;
}
if(val == 1)
{// 输出高
*(volatile unsigned int *)(map_base + GPIO_OUT +offset) |= (1<<gpio_move);
}
else
{// 输出低
*(volatile unsigned int *)(map_base + GPIO_OUT +offset) &=~(1<<gpio_move);
}
return 0;
}
int gpio_read(int gpio_num){
int offset, gpio_move;
//////////////////BUG
if(gpio_num==44)gpio_num=48;
if(gpio_num==45)gpio_num=49;
if(gpio_num==46)gpio_num=50;
if(gpio_num==47)gpio_num=51;
if(gpio_num==48)gpio_num=44;
if(gpio_num==49)gpio_num=45;
if(gpio_num==50)gpio_num=46;
if(gpio_num==51)gpio_num=47;
if(gpio_num > 31)
{
offset = 4;
gpio_move = gpio_num - 32;
}
else
{
offset = 0;
gpio_move = gpio_num;
}// 读取
return (*(volatile unsigned int *)(map_base + GPIO_IN +offset) >> gpio_move) & 0x01;
}
一个基于龙芯嵌入式开发板的小区门禁系统.zip
版权申诉
94 浏览量
2024-04-28
22:44:03
上传
评论
收藏 20KB ZIP 举报
我慢慢地也过来了
- 粉丝: 6286
- 资源: 3956
最新资源
- tensorflow-1.5.0-cp27-cp27m-win-amd64.whl
- Python源代码数据分析师.zip
- 基于边缘查找,SVM,KCF实现的物体识别与跟踪算法
- 基于c++的Opencv实现KCF跟踪算法(未使用官方函数)
- Unity RuntimeTransformGizmos插件
- 实现一个JavaWeb图书管理系统
- (完整版)计算机一级MS-Office真题及答案-推荐文档.doc
- 人工蜂鸟优化算法AHA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用
- 基于C++ 的KCF的目标跟踪算法,打开摄像头,选中跟踪的目标,实时跟踪并返回坐标
- 毕业设计 - 基于JAVA的病历管理系统设计与实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈