c++封装一个ads112c04库

最终库并入在我的pa_CommonLib中。附上链接

https://github.com/ActivePeter/pa_CommonLib/tree/master/src/service/TI_Chips/Ads_112c04

c++封装功能是比较擅长的,其面向对象的特性可以将各种功能结合在一起。形成一个内聚的形式。而不是像c语言那样将函数暴露在外面。

这个芯片的库我写在了我的一套通用库里。这套通用库的特点是易于扩展。选择性适配,此外我还写了一个vscode插件专门用于生成驱动层模板。

然后来讲下总体的思路把

1。设置了一个Ads_112c04的文件夹,在下面放入Ads_112c04.h 和 Ads_112c04.cpp

2。然后在其下建立mcuDrvs文件夹,在这个文件夹下,创建Ads_112c04_drv_MODULE.cpp

3。关于引脚操作的函数,写入Ads_112c04_drv_MODULE.cpp 然后使用我的插件生成对应的单片机型号XXXX的Ads_112c04_drv_XXXX.cpp的文件。在里面写具体的操作

4。所有逻辑相关的处理,都写在 Ads_112c04.cpp下

程序设计

首先这个芯片有非常多的配置模式。一个寄存器8个位。大概会有3,4个属性。总共3个寄存器。怎么样将这些属性规则化人性化的表示出来。并且不像c语言那样对外暴露变量呢。

我发现c++里的类可以放入枚举类型。这个枚举类型可以通过ClassName::EnumName的形式访问到。这样的优点是命名上的简单,还有变量不对外暴露。

然后怎么样将枚举根寄存器值联系起来呢。

以这张数据表为例

image-20200828024348193

查看功能,前三个是需要的。后面的参考电压和温度传感器不太需要。

所以我根据上面的表设计了如下的枚举,数值一一对应

class Ads_112c04
{
public:
    enum SpeedOfSample//采样速度
    {
        SPS_20 = 0,
        SPS_45,
        SPS_90,
        SPS_175,
        SPS_330,
        SPS_600,
        SPS_1000
    };
    enum Mode//倍频模式
    {
        Mode_Normal = 0,
        Mode_Turbo//速度翻倍
    };
    enum ConvMode //转换模式
    {
      	Singleshot = 0,
        Continuous//持续转换
    };
};

然后来设计配置函数

void Ads_112c04::configRegister1(SpeedOfSample speedOfSample, Mode mode, ConvMode convMode) 
{
	unsigned char reg = 0 ;
	reg=(char)speedOfSample<<5|(char)mode<<4|(char)convMode<<3;
	pa_IICSettingStruct a;

	pa_IIC_writeLen(I2C_ADDRESS,CMD_WREG|(1 << 2),1,&reg,a);
}

通过移位和相与操作,就可以换算到一个寄存器值。此外iic函数我统一用了函数封装

© 2021 hanbaoaaa record.浙ICP备20005263号
asdad
联系方式 asdasd
2021-5-8 4:19
sss
回复数 (0) 点击展开
加载更多

新增评论

称呼
联系方式
邮箱(选填)
内容

提交

取消