MSP430WARE++的使用2:RSP1 driver的调用方法


    MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设。本文将介绍雷达测速芯片RSP1驱动程序的调用方法。

    
1、硬件原理图 
    采用下图所示的RSP1 电路,可以直接调用 RSP1驱动程序进行程序开发。  
图片
图片 
图片
     2、使用方法
    a、加入 驱动程序
    选中
RSP1文件夹,右键点击“Exclude from Build”即可。  
    RSP1驱动程序由3个文件组成,如下图所示。其中 RSP1_config.hpp为 RSP1的配置文件, RSP1.cpp为 RSP1类的源程序, RSP1.hpp为 RSP1类的头文件。  
 图片
    
    
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、C RSP1类成员变量和成员函数的说明
    成员变量
        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  Write SensitivityPotentiometer(void); 写入 电位设置灵敏度 数据存于 u8_SensitivityPotentiometer 成员变量中。    
        
Bool ReadADCgain(void);      读取 ADC增益 数据存于 u8_ADCgain 成员变量中。  
        
Bool WriteADCgain(void);        写入 ADC增益 数据存于 u8_ADCgain 成员变量中。

    注1:本文中示例代码用绿色标注。
    注2:本文中
与使用密切相关的成员变量与成员函数用红色标注
    
注3 采样率与检测速度对应表
图片 


原创性文章,转载请注明出处  http://user.qzone.qq.com/2756567163  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

snmplink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值