香橙派 one plus 的控制gpio的资料太少了,找了半天也找到。

平时stm32单片机玩的比较多, 可不可以像 单片机一样直接用寄存器控制IO呢。答案是可以的,但稍许不同,需要多一步虚拟地址映射,其他就一样了,文末附代码;

数据手册 和 原理图 可前往 香橙派官网下载。

一、首先查阅 原理图 得到 LED的引脚;为PL4  ,PL7

 

二、查看数据手册了解寄存器功能

功能框图

包含的寄存器

其中红框起来的是主要的,剩下的是中断 ,以及电平的格式,暂时不看。CFG用于功能选择,DAT是输入输出数据寄存器,DRV是输出强度,PUL是上拉下拉控制。

同时GPIO L的基址 为0x07022000 ,寄存器的地址就是 址址 + 上表给出的偏移地址 ,n=0指GPIOL  n=1指GPIOM。

部分寄存器详细描述:

__________________________________部分寄存器 end________________________________________

功能组合寄存器配置要求

三、代码编写

定义结构,申明GPIOL, GPIOM

接下来干的的事就是和写单片机库差不多了。

按道理讲这么写应该就完事了,但linux与单片机不同,不允许直接把数据手册中的地址赋值给指针,访问 硬件寄存器。必须得通过虚拟地址映射,将GPIO的地址映射到一个虚拟地址,然后通过这个地址访问,所以增加了一下代码

这个函数把映射后的虚拟地址计算偏移后 赋值给了  GPIOL  GPIOM。借鉴了他人的代码[

https://github.com/duxingkei33/orangepi_PC_gpio_pyH3/blob/master/pyA20/gpio/gpio_lib.c

]。

主要的函数就是mmap(),具体可以百度  sys/mman.h  这个头文件

删除虚拟地址映射

最后就是测试了,实际发现 香橙给的原理图似乎有问题   红色的灯与 绿色的灯对调了,这里我的板子 正常状态是红色的灯灭,绿色亮起,所以操作的是GPIOL  7,

编译  ,运行  可以点亮!!!

代码:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/select.h>
#include <pthread.h>
#include <unistd.h>
#include <sched.h>#define PLPM_BASE 0x07022000#define __IO volatiletypedef struct
{__IO uint32_t CFG[4];__IO uint32_t DAT;__IO uint32_t DRV[2];__IO uint32_t PUL[2];
} GPIO_Typedef;void * var_addr_satr=0;
unsigned int var_addr_size=0;void *gpio_base= 0;
GPIO_Typedef *GPIOL= 0;
GPIO_Typedef *GPIOM= 0;#define GPIO_PULL_DISABLE 0
#define GPIO_PULL_UP      1
#define GPIO_PULL_DOWN    2int gpio_init(void){int fd;unsigned int addr_start,addr_offset;unsigned int PageSize,PageMask;fd=open("/dev/mem",O_RDWR);if(fd<0){return -1;}PageSize = sysconf(_SC_PAGESIZE);PageMask = ~(PageSize-1);printf("take PageSize=%d\n",PageSize);addr_start =  PLPM_BASE & PageMask ;addr_offset=  PLPM_BASE & ~PageMask;var_addr_size =  PageSize*2;var_addr_satr = (void*) mmap(0,\var_addr_size,\PROT_READ | PROT_WRITE,\MAP_SHARED,\fd,\addr_start);if(var_addr_satr == MAP_FAILED){return -1;}gpio_base = var_addr_satr;gpio_base += addr_offset;printf("take var addr = 0x%8x\n",(unsigned int)var_addr_satr);printf("make gpio_base = 0x%8x\n",(unsigned int)gpio_base);close(fd);GPIOL = (GPIO_Typedef *)gpio_base;GPIOM = (GPIO_Typedef *)gpio_base+0x0024;return 0;
}int gpio_deinit(void)
{int fd;fd=open("/dev/mem",O_RDWR);if(fd<0){return -1;}if(munmap(var_addr_satr,var_addr_size) == 0){printf("remove var addr ok\n");}else{printf("remove var addr erro\n");}close(fd);return 0;
}void gpio_fun_select(GPIO_Typedef *GPIOX,int pin,int fun_number)
{int index;int offs;uint32_t tmp;if(pin>32){return ;}index = pin/8;offs = (pin%8)*4;tmp = GPIOX->CFG[index];tmp &= ~(0x0f<<offs);tmp |= fun_number<<offs;GPIOX->CFG[index] = tmp;
}void gpio_write(GPIO_Typedef *GPIOX,int pin,int value)
{uint32_t tmp;tmp = GPIOX->DAT ;tmp &= ~(1<<pin);tmp |= value<<pin;GPIOX->DAT = tmp;
}int gpio_read(GPIO_Typedef *GPIOX,int pin)
{return (int)((GPIOX->DAT)>>pin & 1);
}void gpio_drv_level(GPIO_Typedef *GPIOX,int pin,int level)
{int index=0;int offs;uint32_t tmp;if(pin>15){index = 1;}offs = pin%16;tmp = GPIOX->DRV[index];tmp &= ~(0x03<<offs);tmp |= level<<offs;GPIOX->DRV[index] = tmp;
}void gpio_pull(GPIO_Typedef *GPIOX,int pin,int code)
{int index=0;int offs;uint32_t tmp;if(pin>15){index = 1;}offs = pin%16;tmp = GPIOX->PUL[index];tmp &= ~(0x03<<offs);tmp |= code<<offs;GPIOX->PUL[index] = tmp;
}int main(void)
{printf("this pin test\n");if(gpio_init( )!=0){printf("gpio init erro\n");return -1;}gpio_fun_select(GPIOL,7,1);gpio_pull(GPIOL,7,GPIO_PULL_DISABLE);gpio_drv_level(GPIOL,7,2);gpio_write(GPIOL,7,1);gpio_deinit( );return 0;
}

香橙派 One Plus 像单片机一样硬件寄存器 控制GPIO 点灯相关推荐

  1. 【香橙派4B】1、重刷系统

    目录 准备材料 准备软件 准备系统镜像文件 下载镜像 解压镜像包 烧录镜像到SD卡 格式化SD卡 烧录镜像 SD卡烧录镜像到香橙派4B 买回来的香橙派4B,刚上电是安卓的系统,无法进行开发,所以需要进 ...

  2. 【踩坑日记 · 嵌入式 Linux】在香橙派 Zero 2 上编译安装 CH340 驱动(OrangePi Zero 2)

    前言 最近想尝试在 Linux 下编写和烧录 51 单片机程序,需要用到 CH340 模块,但是香橙派 Zero 2 没有预装它的驱动,所以需要下载 CH340 驱动的源码手动编译安装.在这里记录一下 ...

  3. c# .net iot树莓派/香橙派用到物联网包Iot.Device.bindings 支持设备说明文档

    c# .net iot树莓派(进口,贵)/香橙派(国产,功能相同,性价比高)用到物联网包Iot.Device.bindings 支持设备说明文档 我们c# .net iot开发树莓派/香橙派都需要用到 ...

  4. orangepi——香橙派使用初识

    特点:         CPU 全志H616四核64位1.5GHz高性能Cortex-A53处理器         GPU MaliG31MP2 SupportsOpenGLES1.0/2.0/3.2 ...

  5. 香橙派Pi5基于Qt5视频硬编码编译

    香橙派Pi5视频通过Qt5硬编码编译 文章目录 香橙派Pi5视频通过Qt5硬编码编译 前言 一.RKMpp和RKMpi是什么? 二.编译RKMPP 1.下载地址 2.文件结构 3.开始编译 4.编译M ...

  6. 香橙派(Orange Pi)树莓派开发板USBCAN适配器usb转can调试软件使用教程

    一.硬件准备 1.windows7电脑*1 2.Orange Pi zero开发板*1(可以不带显示设备,六叶树的USBCAN调试软件可以使用远程桌面) 硬件要求很低,不需要显示屏,相当于只要手里有1 ...

  7. 香橙派orangepi pc plus h3 uboot保存环境变量失败解决——Unable to use mmc 1:1... Failed (1)

    前言 环境介绍: 1.编译环境 Ubuntu 18.04.5 LTS 2.SDK orangepi Linux 5.4 SDK 3.uboot v2020.04 一.现象 根据<OrangePi ...

  8. 香橙派mqtt阿里云终端(二) --python3.5环境配置以及阿里云环境测试

    书接上回,我搭好了树莓派所需的环境以及往我的个人服务网站上添加了我的树莓派终端,过程当中也是踩了不少坑,不过总算是过来了.接下来切入正题. 目录 python环境以及包配置 基础包安装 阿里云服务器配 ...

  9. 内网穿透-神卓互联-香橙派使用帮助教程

    神卓互联-liunx 搭建香橙派教程 大家好,今天示范一下,在香橙派上安装神卓互联,给家里,弄一个固定公网地址.是不是很帅,给可以家里,NAS .网盘.存储等设备,配一个固定的外网访问地址,在外面,随 ...

  10. Linux-ARM架构,全志H616香橙派开发笔记

    一.前期准备工作 1.材料准备 ①SD卡及读卡器 ②CH340USB转232串口 ③全志H616香橙派和type-C转USB供电线 ④ PC一台 ⑤SD卡格式化软件SD Card Formatter. ...

最新文章

  1. 美国实行公共场所禁用面部识别设备 IBM跨界饮食业利用AI开发美食
  2. SNS 好像遇到了拐点?
  3. 每日一皮:不允许穿格子衫之后...
  4. nginx虚拟主机概念和类型介绍
  5. 显著增加bash交互舒适度的.inputrc
  6. IntelliLight: a Reinforcement Learning Approach for Intelligent Traffic Light Control 论文阅读
  7. JS学习笔记4-JavaScript 注释
  8. oracle job 每月前十天运行_Tensorflow源码解析7 -- TensorFlow分布式运行时
  9. 求不小于N且二进制串包含K个1的最小的数字
  10. eclipse14配置tomcat Server Locations
  11. 求最大值 最小值 下标 及格率 c语言,输入某班的C语言成绩,计算输出其及格率...
  12. mysql查询周数_MySQL如何获取一个指定日期所对应本年度的周数(WEEK函数)呢?
  13. 微信公众平台开发学习
  14. 堡垒机的作用与选型经验
  15. java 吉时开奖网数据爬取中奖的数据
  16. 对于CNN卷积神经网络的前向传播和反向传播的理解
  17. threejs 相关材质属性配置
  18. 全球与中国医疗设备固定器市场市场深度调研及市场前景预测报告2022-2028年
  19. matlab中表示拉普拉斯分布_拉普拉斯分布的随机数
  20. android mipmap的作用,Android 中的mipmap 和drawable的区别

热门文章

  1. vivo手机如何隐藏应用 vivo手机隐藏应用方法
  2. Java:class6 继承
  3. hibernate hbb.xml 映射关系
  4. 20189319《网络攻防》第二周作业
  5. 华为softco直接用语音服务器注册IMS返回403错误代码
  6. 怎么用u盘装红帽linux系统,如何使用U盘安装RedHat Linux系统?
  7. 反甩锅成功后思考——RST 报文
  8. Hadoop3.2.1 RPC通讯 一锅端
  9. 全向轮机器人运动学分析
  10. 计算机视觉会议论文写作建议顺序及注意事项