10 orangepi裸板控制IO
来源:互联网 发布:大学生常用电脑软件 编辑:程序博客网 时间:2024/06/11 19:14
控制器就是相当于一个接口,这个接口用于与特定用途的硬件模块通信及数据的交互.
gpio 表示通用的IO接口,这些接口上面可以接不同的硬件模块
GPIO口共分成组: GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOL
每组里面有数据不等的IO口.
PA21表示GPIOA组的第21个IO口.
GPIO口都是多功能的, 可以做输入, 输出, 外部中断, 作控制器的引脚.
GPIO口使用前都需要配置具体做什么用途.
GPIO口是硬件的引脚, SOC厂家一般都会由控制器来管理,并给我们提供内存接口(就是通改变一个地址上的值)来让我们的代码来控制IO口.
统一编址: 内存芯片的地址与控制器的配置内存接口是在同一地址范围里的. arm基本上都是统一编址, 也就意味着我们改变控制器的相关配置时,对控制的配置接口(配置寄存器)像内存一般访问即可.
////////////////////////////////////////////////////////
4.22. Port Controller(CPU-PORT) // P316The chip has 7 ports for multi-functional input/out pins. They are shown below:Port A(PA): 22 input/output portPort C(PC): 19 input/output portPort D(PD): 18 input/output portPort E(PE) : 16 input/output portPort F(PF) : 7 input/output portPort G(PG) : 14 input/output portPort L(PL) : 12 input/output portgpio控制器的配置寄存器的基地址为: 0x01C20800每组IO口的配置寄存器都有4个, 因每个IO需要3位来配置, 所以分成4个寄存器Pn_CFG0(IO: 0 ~ 7) // PA基地址: 0x01C20800, PC: 0x01c20848Pn_CFG1(IO: 8 ~ 15) // PA: 0x01c20804, PC: 0x01c2084cPn_CFG2(IO: 16 ~ 21) // PA: 0x01c20808, PC: 0x01c20850Pn_CFG3(目前没有) // PA: 0x01c2080c, PC: 0x01c20854Pn_DAT //PA: 0x01c20810, PC: 0x01c20858 可以通这个配置寄存器查看或都改变相应IO口的电平状况. 在这个寄存器里每个IO口只占用一位, 第几个IO口就是第几位.Pn_DRV0 //0x01c20814, PC: 0x01c2085c用于配置IO口的输出电流Pn_DRV1 //0x01c20818, PC: 0x01c20860Pn_PUL0 //0x01c2081c, PC: 0x01c20864 和于配置相应的IO口的默认电平是高还是低(上拉/下拉), 也就是当外面不来改变电平时是处于什么电平状态。如果外面有改变,则随外面的改变而改变Pn_PUL1 //0x01c20820, PC: 0x01c20868
输入是指IO口只可以用于获取电平,不能改变电平.
输出是指IO口即可以改变电平,也可以获取电平.
/////////////////////////////
开发板上有个led灯, 在电路图里搜”STATUS-LED”, 可以看到此led是接PA15, PA15输出高电平时亮.
所以可以改变PA15为输出,控制它输出高低电平就可以控制led灯的亮灭.
简单测试时可以在uboot上使用”mw”, “md”来配置或获取IO口的电平.
uboot: // 改变配置寄存器PA_CFG1(0x01c20804)的第28~30位的值为1 mw.l 0x01c20804 0x10000000 1 //PA15口作输出 mw.l 0x01c20810 0x8000 1 //第15位的值为1,即PA组的第15个IO口输出高电平. mw.l 0x01c20810 0 1 //led灭
//////////
写C代码来控制led灯循环亮灭.
test.c
typedef volatile unsigned int u32; #define PA_CFG1 (*(u32 *)0x01c20804) #define PA_DATA (*(u32 *)0x01c20810) void delay(int val); void _start() { int i; PA_CFG1 &= ~(7 << 28); PA_CFG1 |= 1 << 28; // PA15 as output for (i = 0; i < 10; i++) { PA_DATA |= 1 << 15; // PA15 同电平, led亮 delay(1000); PA_DATA &= ~(1<<15); // 低电平, led灭 delay(1000); } } void delay(int val) { val *= 0xffff; //没什么目标,就是把延时的数变大点 while (val--) ; } 编译: arm-linux-gnueabihf-gcc test.c -c -o test.o -march=armv5 arm-linux-gnueabihf-ld test.o -o test arm-linux-gnueabihf-objcopy -O binary test test.bin 然后把test.bin下载到板上内存里, 最后"go 下载地址"执行
///////////////////////////
掌握控制IO口的方法后,就可以在Ext-Port扩展口里外接一些简单的硬件模块来玩了.
- 10 orangepi裸板控制IO
- 14 orangepi 内核里控制IO口
- orangepi zero gpio控制
- 11 orangepi裸板实现printf函数
- 移植MT7601U AP Linux 驱动至Orangepi-PC2开发板
- 01 OrangePi uboot编译
- 03 OrangePi 内核编译
- 01 OrangePi uboot编译
- io控制符
- 树莓派IO控制
- C++ IO格式控制
- 网络IO控制
- 3.0 IO控制LED
- STM32f103 IO输出控制
- C++ IO-流控制
- 07 OrangePi 配置telnet服务
- OrangePi-One Android 源码编译
- orangepi开启yuv摄像头驱动
- php 在本地解压 反压缩 zip rar
- Python练习7-统计日记中最重要的词
- 设计模式之饿汉单例
- C++内存越界(转)
- Mybatis代码自动生成配置文件
- 10 orangepi裸板控制IO
- 重启计算机后 iis MYsql重启出现1069错误 数据库无法启动怎么办?
- 宽带相关问题
- 【html】网页常用分享代码大全(前端必备)
- Python 静态方法和类方法
- Socket的错误码和描述(中英文翻译)
- 2D制图实战之绘制星球
- SPP-Net中的特征映射关系
- 设计模式之懒汉单例线程安全