[经验] MSP430WARE++的使用2:RSP1 driver的调用方法

Dancing   2015-9-25 15:13 楼主
     MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设。本文将介绍雷达测速芯片RSP1驱动程序的调用方法。
1、硬件原理图

    采用下图所示的RSP1电路,可以直接调用RSP1驱动程序进行程序开发。
1.png
2、使用方法
    a、加入驱动程序
    选中RSP1文件夹,右键点击“Exclude from Build”即可。

    RSP1驱动程序由3个文件组成,如下图所示。其中
RSP1_config.hpp为
RSP1的配置文件,
RSP1.cpp为
RSP1类的源程序,
RSP1.hpp为
RSP1类的头文件。


2.png
b、使能外设

    在config.hpp中使能外设RSP1,其源程序如下:

        
#define EXTERNAL_MODULE_RSP1_MODE 1

   
c、驱动程序的配置。

    查看原理图,可以看到如下的引脚对应关系。

        通讯接口——UART0

        BUSY    ——P6.5

        RESET   ——P5.6

   
根据上述对应关系更改
RSP1_config.hpp配置文件,其更改后的源程序如下:
        
#define RSP1_UART 0x01
      
#define RSP1_BUSY_PORT
PORT6

        
#define RSP1_BUSY_PIN  
PIN5

        #define RSP1_RESET_PORTPORT6


        #define RSP1_RESET_PIN PIN6

   
d、类的派生

    在硬件抽象层中声明类
CRadar,直接由
RSP1类派生即可,其源程序如下:
        class CRadar:public CRSP1

        {



        };
    并在
HAL_include.hpp文件中添加如下包含语句:
        
#include "./Radar/Radar.hpp"


   
e、对象的声明

    可以在CHAL类中,进行对象声明,其源程序如下:
        class CHAL

        {

        public:

            //看门狗对象,不需更改

            CWatchDog WatchDog;

            //定义项目中用到的其它对象

            CHCI HCI;

            CRadar Radar;

        };


   
f、其它操作

    使用RSP1需启用1个异步串行口,UART0或者UART1均可(本文以UART1为例),并将其波特率设置为38400,其启动设置在config.hpp中完成,源程序如下:

        
#define INTERNAL_PERIPHERAL_UART1_MODE 10
    异步串行口启动后,在main.cpp的异步串行口中断函数中加入显示语句即可,源程序如下:
        #pragma vector=USART1RX_VECTOR

        __interrupt void Usart1RX_ISR(void)

        {

            //接收到的数据存于RXBUF1寄存器中

            Target.HAL.Radar.Interrupt_Dispose(RXBUF1);

        }


    g、调用方法
    程序启动后,在进入主循环之前,应进行如下程序操作:
        if (Target.HAL.Radar.Reset() == False)//对RSP1进行复位操作,复位不成功,则闪灯提示

        {

            while(1)

            {

                Target.HAL.HCI.Led.Open();

                Target.Delay.MilliSecond_250();

                Target.HAL.HCI.Led.Shut();

                Target.Delay.MilliSecond_250();

            }

        }



        Target.HAL.Radar.ReadSamplingRate();    //读取采样频率

        if (Target.HAL.Radar.b_UartFinish == False)

        {

            while(1)

            {

                Target.HAL.HCI.Led.Open();

                Target.Delay.MilliSecond_250();

                Target.HAL.HCI.Led.Shut();

                Target.Delay.MilliSecond_250();

            }

        }
    上述程序调用完毕后,便可进入主循环,执行希望的操作。  



    3、CRSP1类成员变量和成员函数的说明





    成员变量
        uint8 u8_Direction[2];       传感器的辨别方向
            “00”    靠近时响应
            “01”    远离时响应
            “02”    靠近远离均响应
        uint8 u8_HoldTime[2];        保持时间
            “00”    0.2秒
            “01”    0.5秒
            “02”    1秒
            “03”    2秒
            “04”    5秒
            “05”    10秒
            “06”    20秒
            “07”    40秒
            “08”    80秒
            “09”    160秒
        uint8 u8_Sensitivity[2];     灵敏度,此数值指当前数值与阀值之间的距离,可以想象数值越大,表示与阀值之间的距离越长,灵敏度越差。所以“09”具有最高的灵敏度。
            “00”    240
            “01”    200
            “02”    160
            “03”    140
            “04”    120
            “05”    100
            “06”    60
            “07”    40
            “08”    20
            “09”    0
        uint8 u8_Immunity[2];        抗干扰性
            “00”:1次均值
            “01”:2次均值
            “02”:3次均值
            “03”:4次均值
            “04”:5次均值
            “05”:6次均值
            “06”:7次均值
            “07”:8次均值
            “08”:9次均值
            “09”:10次均值  
        uint8 u8_SensorType[2];      传感器类型
            “00”:双通道传感器
            “01”:单通道传感器
        uint8 u8_SamplingRate[2];    采样率,采样率与检测速度对应表见注3
            “01”:1280Hz
            “02”:2560Hz
            “03”:3840Hz
            “04”:5120Hz
            “05”:6400Hz
            “06”:7680Hz
            “07”:8960Hz
            “08”:10240Hz
            “09”:11246Hz

            “0A”:22530Hz
        uint8 u8_StartUpLearn[2];    启动噪声平均时间,“01”-“40”:数值越高启动时间越长

        uint8 u8_SensitivityPotentiometer[2];    电位设置灵敏度
            “00”:不使用电位器设置灵敏度
            “01”:使用电位器设置灵敏度
        uint8 u8_ADCgain[2];        ADC增益
            “00”:1倍增益
            “01”:2倍增益

            “02”:4倍增益
            “03”:8倍增益

            “04”:16倍增益  
    成员函数
        Bool ReadDirection(void);    读取感应方向,数据存于u8_Direction成员变量中。
        Bool WriteDirection(void);   写入感应方向,数据存于u8_Direction成员变量中。
        Bool ReadHoldTime(void);     读取保持时间,数据存于u8_HoldTime成员变量中。
        Bool WriteHoldTime(void);    写入保持时间,数据存于u8_HoldTime成员变量中。

        Bool ReadSensitivity(void);  读取灵敏度,数据存于u8_Sensitivity成员变量中。
        Bool WriteSensitivity(void); 读取灵敏度,数据存于u8_Sensitivity成员变量中。
        Bool ReadImmunity(void);     读取抗干扰性,数据存于u8_Immunity成员变量中。
        Bool WriteImmunity(void);    写入抗干扰性,数据存于u8_Immunity成员变量中。
        Bool ReadSensorType(void);   读取传感器类型,数据存于u8_SensorType成员变量中。   

        Bool WriteSensorType(void);  写入传感器类型,数据存于u8_SensorType成员变量中。
        Bool ReadSamplingRate(void); 读取采样率,数据存于u8_SamplingRate成员变量中。
        Bool WriteSamplingRate(void);写入采样率,数据存于u8_SamplingRate成员变量中。
        Bool ReadStartUpLearn(void); 读取启动噪声平均时间,数据存于u8_StartUpLearn成员变量中。
        Bool WriteStartUpLearn(void);写入启动噪声平均时间,数据存于u8_StartUpLearn成员变量中。
        Bool ReadSensitivityPotentiometer(void);读取电位设置灵敏度,数据存于u8_SensitivityPotentiometer成员变量中。
        Bool WriteSensitivityPotentiometer(void);写入电位设置灵敏度,数据存于u8_SensitivityPotentiometer成员变量中。  
        Bool ReadADCgain(void);      读取ADC增益,数据存于u8_ADCgain成员变量中。
        Bool WriteADCgain(void);     写入ADC增益,数据存于u8_ADCgain成员变量中。


    注1:本文中示例代码用绿色标注。

    注2:本文中
与使用密切相关的成员变量与成员函数用红色标注
   
注3
: 采样率与检测速度对应表

3.png


回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复