使用C6748和C5509A对nRF24L01驱动进行数据传输
1. 写在前面
今天下午做了一个C5509A和C6748两个DSP的数据传输,经由RF24L01设备传输,都是模拟SPI协议,对于两个DSP来说,无非是配GPIO引脚,写好时序和延时。C5509A的GPIO口配置比较好说,关键是C6748的引脚实在是不好弄,网上也没有太多的资料,而且对于C6748来说,不一样厂家生产出来的Demo板子,编程库也是不一样的,我用的是RK的板子,经过一下午的研究,反正配置是学会了。过几天在TI上下载C6748的原库重新编一下。
2. C5509A的GPIO口配置
C5509A有CSL编程标准库,#include "csl_gpio.h",按照API文档写没什么太大难度。在本设计中的C5509A用的是普通IO口,没用HGPIO和MCBSP的GPIO。使用普通IO口也就是GPIO0-GPIO7(非BGA封装没有GPIO5)不需要像C2000系列一样配置MUX寄存器,直接可以用宏函数操作。
2.1 方向配置
方向配置可以单个配置也可以一起配置。
2.1.1 单个配置
函数GPIO_pinDirection(Uint32 mask, Uint16 value);
GPIO_pinDirection( GPIO_PIN0, ); // 配置GPIO0号为输入方向
GPIO_pinDirection( GPIO_PIN1, ); // 配置GPIO1号为输出方向
2.1.2 一起配置
宏函数GPIO_RSET(IODIR,0x80); 高位对应GPIO7,低位对应GPIO0,可以一起赋值。
GPIO_RSET(IODIR,0x80); // 7 6 5 4 3 2 1 0
2.2 写操作
2.2.1 单个写操作
GPIO_pinWrite( GPIO_PIN3, ); // gpio3口拉高
GPIO_pinWrite( GPIO_PIN4, ); // GPIO4口拉低
2.2.2 整体写操作
GPIO_RSET(IODAT,0xFF); // GPIO7-GPIO0 全部写高
2.3 读操作
GPIO_pinRead( GPIO_PIN3 ); // 读GPIO3 引脚的电平,前提是GPIO3配置为输入引脚
2.4 小结
以上就为对于C5509A的GPIO口配置,通过这样的配置我们可以模拟很多时序了,也可以驱动很多外设传感器。至于高端的无缝接口尚未研究。先研究到这里。类似的,本设计中需要模拟RF24L01的时序,对于几个引脚CE,IRQ,MOSI,MISO,SCK,CSN都需要占用GPIO口,本文设计就分配了GPIO0-GPIO7的引脚,宏定义如下:
//==============================================================================
#define RF24L01_CE_0 GPIO_pinWrite( GPIO_PIN4,0 )
#define RF24L01_CE_1 GPIO_pinWrite( GPIO_PIN4,1 )
//=============================RF24L01_CSN端口==================================
#define RF24L01_CSN_0 GPIO_pinWrite( GPIO_PIN6,0 )
#define RF24L01_CSN_1 GPIO_pinWrite( GPIO_PIN6,1 )
//=============================RF24L01_SCK======================================
#define RF24L01_SCK_0 GPIO_pinWrite( GPIO_PIN3,0 )
#define RF24L01_SCK_1 GPIO_pinWrite( GPIO_PIN3,1 )
//============================= RF24L01_MOSI端口================================
#define RF24L01_MOSI_0 GPIO_pinWrite( GPIO_PIN1,0 )
#define RF24L01_MOSI_1 GPIO_pinWrite( GPIO_PIN1,1 )
//=============================MISO端口=========================================
#define RF24L01_MISO_0 GPIO_pinWrite( GPIO_PIN0,0 )
#define RF24L01_MISO_1 GPIO_pinWrite( GPIO_PIN0,1 )
//==========================IRQ状态============================================
#define RF24L01_IRQ_0 GPIO_pinWrite( GPIO_PIN7,0 )
#define RF24L01_IRQ_1 GPIO_pinWrite( GPIO_PIN7,1 )
//-------------------------------------------------------------------------------
5.3 C6748的IO口配置
C6748的GPIO口初始化程序如下。
void GPIO_INIT( void )
{
RK6748_pinmuxConfig(,0x80088808,0x80088808); // 需要配合一个软件算出这个值。
RK6748_pinmuxConfig(,0x00800000,0x00800000);
RK6748_pinmuxConfig(,0x00800000,0x00800000);
GPIO_setDir( GPIO_BANK6, GPIO_PIN13, GPIO_INPUT ); // IRQ
GPIO_setDir( GPIO_BANK6, GPIO_PIN15, GPIO_OUTPUT ); // MOSI
GPIO_setDir( GPIO_BANK6, GPIO_PIN1, GPIO_OUTPUT ); // CSN
GPIO_setDir( GPIO_BANK6, GPIO_PIN11, GPIO_INPUT ); // MISO
GPIO_setDir( GPIO_BANK6, GPIO_PIN12, GPIO_OUTPUT ); // SCK
GPIO_setDir( GPIO_BANK0, GPIO_PIN8, GPIO_OUTPUT ); // CE
printf("GPIO initi finish! \n");
}
使用C6748和C5509A对nRF24L01驱动进行数据传输的更多相关文章
- nRF24L01+不能接收或接收偶尔异常等问题实战分享
nRF24L01+接收异常问题综述 在调试nRF24L01+无线收发模块的时候,最具标志性的环节就是在接收端可以收到数据.在实际应用调试中,会出现很多意想不到的情况,造成nRF24L01+模块接收端无 ...
- linux驱动面试题2
1.什么是GPIO? general purpose input/output GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的 ...
- linux驱动面试题整理
1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也 ...
- Linux I2C核心、总线和设备驱动
目录 更新记录 一.Linux I2C 体系结构 1.1 Linux I2C 体系结构的组成部分 1.2 内核源码文件 1.3 重要的数据结构 二.Linux I2C 核心 2.1 流程 2.2 主要 ...
- 韦东山yy公开课笔记(2)--各种杂的问题
1. 编译器的版本和glibc库有对应关系吗,如何查看glibc的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带glibc被编译生成的 . ...
- STC8H开发(五): SPI驱动nRF24L01无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- NRF24L01无线通讯模块驱动
NRF24L01 无线模块,采用的芯片是 NRF24L01,该芯片的主要特点如下: )2.4G 全球开放的 ISM 频段,免许可证使用. )最高工作速率 2Mbps,高校的 GFSK 调制,抗干扰能力 ...
- C6748的GPIO口配置使用
2018年1月17日更新: 这几天用了创龙的C6748的库,对于GPIO配置十分不爽,我移植了RK6748的库,用起来十分酸爽,把下面的文件加入到工程中,然后include头文件后就可以使用.非常好使 ...
- [stm32] NRF24L01+USART搞定有线和无线通信
前言 一般进行远程监控时,2.4G无线通信是充当远程数据传输的一种方法.这时就需要在现场部分具备无线数据发送装置,而在上位机部分由于一般只有串口,所以将采集到的数据送到电脑里又要在上位机端设计一个数据 ...
随机推荐
- Qtl和JS、HTML通信/交互
http://www.cnblogs.com/sigma0/p/7346727.html Qt的QWebChannel和JS.HTML通信/交互驱动百度地图 0 前言 我一个研究嵌入式的,不知道怎么就 ...
- VC简单嵌入汇编
转自:http://blog.csdn.net/arcsinsin/article/details/8126473 内嵌汇编的使用方法是: __asm { 语句 } 你可以把它插入程序中 ...
- java面试之----堆(heap)、栈(stack)和方法区(method)
JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method)也叫静态存储区. 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的 ...
- Hive的UDF(用户自定义函数)开发
当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function). 测试各种内置函数的快捷方法: 创建一个 dual 表 ...
- Python 调度算法 死锁 静动态链接(七)
1 select poll epoll的区别 基本上select有3个缺点: 连接数受限 查找配对速度慢 数据由内核拷贝到用户态 poll改善了第一个缺点 epoll改了三个缺点. (1)select ...
- Struts的学习-eclipse与idea与struts的连接
1.建立一个空白工程(里面是没有文件的). 可以在文件放置找到项目文件夹 2.点击托管项目到码云 (ps:没有码云帐号的自己注册) 3.按快捷键:ctrl+alt+shift+s 呼出项目结构管理器, ...
- 最重要的“快捷键” IntelliJ IDEA
转载:http://www.youmeek.com/intellij-idea-part-iii-hotkeys-explain/ @IntelliJ IDEA第三部分视频教程:最重要的“快捷键”专讲 ...
- codeforces 611D New Year and Ancient Prophecy
f[i = 以i结尾][j = 长度为j] = 方案数. f[i][j] = sum{ f[i-j][k] , k < j || (k == j && s(i-j+1,j) &g ...
- POJ 2976 Dropping tests 【01分数规划+二分】
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
- 不能安装这个“安装 OS X EI Capitan”应用程序副本不能验证” 的解决办法
不能安装这个“安装 OS X EI Capitan”应用程序副本不能验证.它在下载过程中可能已遭破坏或篡改. 解决办法:修改系统时间. 1,查看你的dmg文件的创建日期 2,把你的系统日期修改到比这个 ...