[资料分享] MSP430WARE++的使用2:RSP1 driver的调用方法

Aguilera   2017-9-23 17:50 楼主
MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设。本文将介绍雷达测速芯片RSP1驱动程序的调用方法。 1、硬件原理图 采用下图所示的RSP1电路,可以直接调用RSP1驱动程序进行程序开发。 360截图20170923175121608.jpg 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成员变量中。 本帖最后由 Aguilera 于 2017-9-23 17:52 编辑

回复评论

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