• 使用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, 0 );                // 配置GPIO0号为输入方向
    GPIO_pinDirection( GPIO_PIN1, 1 );                // 配置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,1 );        // gpio3口拉高
    GPIO_pinWrite( GPIO_PIN4,0 );        // 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(13,0x80088808,0x80088808);            // 需要配合一个软件算出这个值。
        RK6748_pinmuxConfig(18,0x00800000,0x00800000);
        RK6748_pinmuxConfig(19,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! 
    ");
    }

      

  • 相关阅读:
    【转发】【小程序】微信小程序日常开发中常遇到的错误代码
    正则表达式:看懂正则表达式只需要几个实例就够了
    CSS响应式:根据分辨率加载不同CSS的几个方法,亲测可用
    [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息
    [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库
    [微信小程序] 微信小程序富文本-wxParse的使用
    [AngularJS] “多重路由”嵌套模块——AngularJS“路由”嵌套学习资料教程
    [AngularJS] “路由”的定义概念、使用详解——AngularJS学习资料教程
    学习笔记:JavaScript-进阶篇
    学习笔记:JavaScript-入门篇
  • 原文地址:https://www.cnblogs.com/sigma0/p/6736301.html
Copyright © 2020-2023  润新知