zoukankan      html  css  js  c++  java
  • 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、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採样率与检測速度相应表
    图片 


    原创性文章。转载请注明出处 http://user.qzone.qq.com/2756567163 
  • 相关阅读:
    装饰者模式
    使用dom4j工具:读取xml(一)
    关于设计模式
    简单工厂模式
    Html 笔记
    数据库SQL归纳(三)
    windows上同时安装两个版本的mysql数据库
    MySQL的使用
    数据库SQL归纳(二)
    数据库SQL归纳(一)
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6881326.html
Copyright © 2011-2022 走看看