OK6410A 之mmap 方式操作LED流水灯效果
来源:互联网 发布:魅族官网商城下载软件 编辑:程序博客网 时间:2024/05/20 16:13
开发板本身配有LED的驱动,且有测试程序,用MMAP方式,完全是为了实验MMAP功能。
在OK6410板子上,修改了原来的SPI功能,实现了SPI驱动,且测试功能一切正常,但是数据交换速度相当不理想,通过示波器看,有320us的间隔时间内系统在玩耍。
GPIO模拟SPI的速度就更别想了,还慢,其及其浪费系统资源。
于是想通过MMAP方式,直接操作硬件寄存器完成对SPI的 操作,感觉LED功能就像“hello world”一样的经典 ,于是就想到用LED测试mmap的功能,关于MMAP的描述,网上资料繁多,就不搬过来了
直接上代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <fcntl.h>#define uint unsigned int#define uchar unsigned charvoid delay(volatile unsigned int time){volatile unsigned int x,y;for(x=0;x<2000;x++)for(y=0;y<time;y++);}int main(){int fd;int i;volatile unsigned char *map;volatile unsigned int *GPMCON;volatile unsigned int *GPMDAT;volatile unsigned int *GPMPUD;char buf[100];<span style="white-space:pre"></span>//OK6410A的板子已经实现哦,在“/dev/mem”,如下if(-1==(fd=open ("/dev/mem", O_RDWR))) { printf("open dev0 error\n"); _exit(EXIT_FAILURE); } map = (volatile unsigned char*)mmap(NULL,1024*5, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x7f008000);if(map == NULL) { printf("mmap err!\n"); return 0; } GPMCON=(volatile unsigned int*)(map+0x820);GPMDAT=(volatile unsigned int*)(map+0x824);GPMPUD=(volatile unsigned int*)(map+0x828);*GPMCON=0x11111;*GPMPUD=0x00;*GPMDAT=0x1f;printf("init is finishing!\n"); while(1){for(i=0;i<4;i++){*GPMDAT=~(1<<i);delay(15000);//printf("led is %d : \n",i+1);}} munmap((char*)map,1024*5); close(fd);}
直接编译后
烧到板子,流水灯效果就完成了。
0 0
- OK6410A 之mmap 方式操作LED流水灯效果
- led流水灯
- OK6410:LED流水灯
- LED 流水灯闪烁
- LED流水灯
- LED流水灯
- Tiny4412汇编流水灯代码,Tiny4412裸机LED操作
- 第一篇 字符设备驱动程序之LED流水灯驱动
- ARM裸机程序开发之led流水灯程序
- (四)c52学习之旅-流水LED灯
- mini2440 led流水灯实验
- 裸机程序-led流水灯
- 1.LED流水灯分析
- 4.8 LED流水灯程序
- 3、LED流水灯控制
- LED的流水灯实验
- STM32F407VGT芯片的操作之流水灯
- led点阵操作方式
- NYOJ skiing【BFS】
- Android TouchEvent事件传递机制
- Codeforces Beta Round #5 C. Longest Regular Bracket Sequence
- 传真百科:电子邮件能取代传真吗
- POJ 1018 Communication System(DP+离散化)
- OK6410A 之mmap 方式操作LED流水灯效果
- 微服务现状综述
- something about WinPE
- symlink在ln的过程中究竟占用了多少耗时
- socket程序被ctrl+c终止,再次启动报错硕地址已被使用的解决方法
- java对redis的基本操作
- Lucene4.10使用教程(八):Lucene的自定义评分(2)
- recovery输入事件及处理分析
- 网络发送参数拼接与Http异步任务回调打包(一)