6月17日什么星座| 右下腹疼痛挂什么科| 呼吸短促是什么原因| 城字五行属什么| 飞蚊症是什么原因引起的| 胰岛素有什么副作用| 孕妇吃什么水果好对胎儿好| 茶叶渣属于什么垃圾| 聂的拼音是什么| 喘不上来气是什么原因| 经期喝酒会有什么危害| 面红耳赤是什么生肖| 突然心跳加快是什么原因| 孕妇能喝什么茶| 什么血型是万能血型| 额头上长痘是什么原因| 印泥干了用什么稀释| 甲亢什么不能吃| 穿山甲到底说了什么| na医学上是什么意思| 眉毛长长是什么原因| bml是什么意思| 胎梦梦见蛇是什么意思| 天空为什么会下雨| 吃什么能养胃| 侵犯是什么意思| 心血不足吃什么药| 神经病和精神病有什么区别| at什么意思| trust阴性tppa阳性说明什么| 半夜两点是什么时辰| 发改委是干什么的| 梦见晒衣服是什么意思| 办理护照需要什么资料| 晚上睡觉小腿抽筋是什么原因| 什么叫生酮| 女孩喜欢什么礼物| 不可一世是什么意思| 心电图pr间期缩短是什么意思| 水肿是什么意思| h 是什么意思| 咨客是做什么的| 足是什么结构| 猪肝炒什么| 肝血管瘤挂什么科| 碉堡是什么意思啊| 狼吞虎咽的意思是什么| 女性喝什么利尿最快| IB是什么| 指甲起层是什么原因| 控是什么意思| 一加是什么牌子| 六尘不染的生肖是什么| 羊驼为什么吐口水| 维生素b族为什么不能晚上吃| 下连是什么意思| 67什么意思| 红豆生南国什么意思| 女人肾虚吃什么好得快| 胃火喝什么茶降火| 脑梗吃什么药| 病符是什么意思| 肺癌靶向治疗是什么意思| 机车是什么意思| 手上长小水泡是什么原因| 史记是什么体史书| 例假血发黑是什么原因| 什么是双相情感障碍| 一什么网| 蚊子有什么用| 1924年属什么| 梦见摘西红柿是什么意思| 晚上20点是什么时辰| 什么是断桥铝| 麸皮是什么东西| 从胃到小腹连着疼是什么原因| 瘢痕体质是什么意思| 贫血三项是指什么检查| 语迟则人贵是什么意思| 妇乐颗粒的功效能治什么病| 巴沙鱼是什么鱼| q12h医学上是什么意思| 肛裂是什么原因造成的| 生黄瓜吃了有什么好处| 左手食指麻木是什么原因引起的| 什么是肠易激综合征| 干眼症是什么| 陈皮的功效与作用主要治什么病| 皮下囊肿是什么原因引起的| 太平洋中间是什么| 脂肪肝中医叫什么名字| 翩跹是什么意思| kimi什么意思| 晚安好梦什么意思| 天地不仁以万物为刍狗什么意思| 狗不能吃什么食物| 红油抄手是什么| 每天放屁多是什么原因| 618是什么| 什么叫阴虚什么叫阳虚| 安德玛是什么牌子| lord什么意思| 产妇吃什么最好| 甲状腺亢进是什么意思| 皮肤过敏用什么药| 长期口臭要看什么科| 介入室是干什么的| 食邑万户是什么意思| 意境是什么意思| 拉稀吃什么药最有效果| 冷冻跟冷藏有什么区别| nc是什么意思| 眼球出血是什么原因引起的| 刘邦字什么| 万寿菊什么时候开花| 熟的反义词是什么| 睡前吃什么有助于睡眠| 肾不好会出现什么症状| 针灸的原理是什么| 粉尘作业时必须佩戴什么口罩| 300年前是什么朝代| 一日三餐是什么意思| 新生儿喝什么奶粉好| 炁读什么| 左手中指麻木是什么原因| 细菌感染有什么症状表现| 哼哼唧唧是什么生肖| 双肾泥沙样结石是什么意思| 乙肝1245阳性什么意思| oz是什么单位| 今年37岁属什么生肖| 9月3日是什么星座的| 第二视角是什么意思| 尿急憋不住尿是什么原因| 舌苔白有齿痕吃什么药| 海参崴买什么便宜| 手指关节肿痛用什么药| fk是什么意思| 海东青是什么鸟| 口腔溃疡用什么药好| 除了肠镜还有什么方法检查肠道| 二十年婚姻是什么婚| 1104是什么星座| 嘴唇为什么会变黑| 什么是标准差| 爸爸的外婆叫什么| 耀武扬威的意思是什么| 奥运会五环颜色分别代表什么| 直博生是什么意思| 语迟则人贵是什么意思| 上火吃什么最快能降火| 为什么肚子会胀气| 海清是什么意思| 女性黄体期是什么意思| 祛风是什么意思| 花中隐士是什么花| 尿道感染挂什么科| 1948年属鼠的是什么命| 做四维需要准备什么| 毛泽东什么时候逝世| 运动不出汗是什么原因| 攻是什么意思| 乙肝三抗体阳性是什么意思| 三唑仑是什么药| 生小孩有什么补贴政策| 毛毛虫吃什么食物| 什么是素质| 喀秋莎什么意思| 舌炎吃什么药| 生性凉薄是什么意思| 胰腺炎吃什么| 打完除皱针注意事项有什么| 司空见惯什么意思| 颈动脉硬化有什么症状| 为什么感冒会咳嗽| 立春是什么生肖| 煮牛肉放什么容易烂| 10月15号是什么星座| 虎头什么尾| giada是什么牌子| 陕西有什么特产| 胸有成竹是什么生肖| 什么的猫| 副镇长是什么级别| 牙囊肿是什么病严重吗| 十一点半是什么时辰| 高血压吃什么最好| 什么头什么向| 血管堵塞吃什么好| 尿酸高说明什么问题| 千古一帝指什么生肖| 连长是什么军衔| 光脚走路有什么好处| 腰闪了挂什么科| 打胶原蛋白针有什么副作用吗| 何首乌长什么样子图片| 喝劲酒有什么好处| 怨念是什么意思| 大张伟的真名叫什么| 左眼皮一直跳是什么意思| 葳蕤是什么中药| 什么姓氏好听| 真菌菌丝阳性什么意思| 肺气虚吃什么中成药| 喝红枣水有什么好处和坏处| 夜咳嗽是什么原因| lp是什么的简称| 庆幸是什么意思| 海东青是什么鸟| 上午八点是什么时辰| 吃高血压药有什么副作用| 男性粘液丝高什么原因| 肺气肿是什么意思| 天目湖白茶属于什么茶| 班禅是什么意思| 婴儿黄疸母亲忌口什么| cvd是什么意思| 五行金代表什么| 47是什么生肖| hr什么意思| 生酮饮食是什么意思| 什么什么似火| 梦见不干净的东西代表什么| hbsab阳性是什么意思| 人为什么会发烧| 泰五行属什么| 花笺是什么意思| 云朵像什么| utc是什么时间| 布洛芬的副作用是什么| 11度穿什么衣服| 胎儿双肾盂分离是什么意思| 清洁度iv是什么意思| 暧昧什么意思| 什么药补血效果最好最快| 网名取什么好听| 除湿气吃什么好| 梦到被蜜蜂蛰是什么意思| 饺子包什么馅好吃| 金牛女跟什么星座最配| 肝阳上亢是什么意思| 肛门坠胀吃什么药最好| 健脾胃吃什么食物好| 大便次数多吃什么药| 抗生素是什么| 日加匀念什么| 夏天适合穿什么衣服| 心开窍于什么| 男人占有欲强说明什么| 鲱鱼罐头那么臭为什么还有人吃| 牛反刍是什么意思| 脱肛是什么样子的| 什么叫牙周炎| 非萎缩性胃炎什么意思| 额头上长痘痘是什么原因引起的| 12月14号是什么星座| 盗汗遗精是什么意思| 脑梗阻有什么症状| 抽象什么意思| 进展是什么意思| 乳酸偏高是什么意思| 纳字五行属什么| 感冒了吃什么水果好| 盥洗是什么意思| 百度

十三届全国人大一次会议在京闭幕 习近平发表重要讲话

[复制链接]
楼主
 楼主| dffzh 发表于 2025-8-8 13:52 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
我们在使用ADC芯片时,往往都需要编写基于MCU和C语言的ADC芯片驱动代码,通过驱动代码以SPI总线等方式对ADC芯片的寄存器进行相关读写操作,并且读取ADC的采样数据。大部分ADC芯片的总线接口方式都是SPI,如下图所示:
在驱动代码中,ADC芯片的初始化代码是非常重要的,即对ADC芯片的寄存器进行相关配置的代码,那究竟通过C语言以什么样的方式编写初始化代码会比较好呢?会便于后面调试修改呢?会增加代码可读性呢?接下来我就以TI的ADC芯片ADS1262为例向大家展示一下我这边的初始化代码及相关宏定义及枚举操作等。不过在这之前,我们先来看下下面的初始化代码:
即将寄存器值reg_data写入相应的ADC寄存器中,如果后面需要通过修改寄存器值进行芯片调试,估计还得去打开芯片手册看下每个寄存器的位定义,然后计算一下十六进制值,最后再修改reg_data的值去更新寄存器。所以,这种代码操作方式的效率是不是比较低?而且还容易出错,即使你把魔法数字改成宏定义方式也无济于事。
接下来看看我实现的这种方式。

我们先来看看ADC芯片的寄存器,主要讲解如下6个寄存器的操作,包括如下:
要想在代码调试时快速且精准的进行寄存器值修改,那就是要在代码中明确现在需要修改的是哪个寄存器的哪个位配置,以及可以配置哪些值,因此代码的相关名称怎么命名和C语言的相关技术如何使用就显得尤为重要了。因此,我们就需要通过枚举,宏定义和位运算符等操作进行初始化代码的编写。

我们先用枚举方式定义好寄存器地址(写寄存器值即向寄存器地址写入数据),代码如下:
  1. /*ADC register address define*/
  2. typedef enum
  3. {
  4.     ID_REG = 0x00,          //decvice identification register
  5.         POWER_REG = 0x01,       //power register
  6.         INTERFACE_REG = 0x02,   //interface register
  7.         MODE0_REG = 0x03,       //mode0 register
  8.         MODE1_REG = 0x04,       //mode1 register
  9.         MODE2_REG = 0x05,       //mode2 register
  10.         INPMUX_REG = 0x06,      //input multiplexer register
  11.         OFCAL0_REG = 0x07,      //offset calibration register 0
  12.         OFCAL1_REG = 0x08,      //offset calibration register 1
  13.         OFCAL2_REG = 0x09,      //offset calibration register 2
  14.         FSCAL0_REG = 0x0A,      //full-scale calibration register 0
  15.         FSCAL1_REG = 0x0B,      //full-scale calibration register 1
  16.         FSCAL2_REG = 0x0C,      //full-scale calibration register 2
  17.         IDACMUX_REG = 0x0D,     //IDAC multiplexer register
  18.         IDACMAG_REG = 0x0E,     //IDAC magnitude register
  19.         REFMUX_REG = 0x0F,      //reference multiplexer register
  20.         TDACP_REG = 0x10,       //TDACP control register
  21.         TDACN_REG = 0x11,       //TDACN control register
  22.         GPIOCON_REG = 0x12,     //GPIO Connection register
  23.         GPIODIR_REG = 0x13,     //GPIO direction register
  24.         GPIODAT_REG = 0x14,     //GPIO data register
  25.         ADC2CFG_REG = 0x15,     //ADC2 configuration register
  26.         ADC2MUX_REG = 0x16,     //ADC2 input multiplexer register
  27.         ADC2OFC0_REG = 0x17,    //ADC2 offset calibration register 0
  28.         ADC2OFC1_REG = 0x18,    //ADC2 offset calibration register 1
  29.         ADC2FSC0_REG = 0x19,    //ADC2 full-scale calibration register 0
  30.         ADC2FSC1_REG = 0x1A,    //ADC2 full-scale calibration register 1
  31. }ads1262_reg_addr_e;
寄存器的名称命名方式可以采用“寄存器名称_REG”的方式,并在每个寄存器后面加上注释,备注一下寄存器的含义。

然后用枚举和宏定义方式定义好每个寄存器,比如以下定义INTERFACE寄存器的代码:
  1. /*interface register*/
  2. #define ADS1262_INTERFACE_REG_TIMEOUT(x)                (((x) & 0x01) << 3) //RW
  3. typedef enum {
  4.         TIMEOUT_CONFIG_DISABLE = 0,  //default
  5.         TIMEOUT_CONFIG_ENABLE = 1,
  6. }ads1262_inerface_reg_timeout_config_e;

  7. #define ADS1262_INTERFACE_REG_STATUS(x)                (((x) & 0x01) << 2) //RW
  8. typedef enum {
  9.         STATUS_CONFIG_DISABLE = 0,  
  10.         STATUS_CONFIG_ENABLE = 1, //default
  11. }ads1262_inerface_reg_status_config_e;

  12. #define ADS1262_INTERFACE_REG_CRC(x)                ((x) & 0x03) //RW
  13. typedef enum {
  14.         CRC_CONFIG_DISABLE = 0,  
  15.         CRC_CONFIG_CHECKSUM_MODE = 1, //default
  16.         CRC_CONFIG_CRC_MODE = 2,
  17. }ads1262_inerface_reg_crc_config_e;
寄存器位的名称命名方式可以采用“ADC芯片名称_寄存器名称_REG_位名称”或者“寄存器名称_REG_位名称”,寄存器位值的名称命名方式可以采用“位名称_CONFIG_位值”,位值枚举的名称命名方式可以采用小写的“ADC芯片名称_寄存器名称_reg_位名称_config_e”或者“寄存器名称_reg_位名称_config_e”。
而宏定义里面的x的值即对应位值枚举里面的值,直接修改即可,比如:
ADS1262_INTERFACE_REG_TIMEOUT(TIMEOUT_CONFIG_DISABLE)或者
ADS1262_INTERFACE_REG_TIMEOUT(TIMEOUT_CONFIG_ENABLE)。

其他5个寄存器的定义代码如下所示:
  1. /*power register*/
  2. #define ADS1262_POWER_REG_RESET(x)                (((x) & 0x01) << 4) //RW
  3. typedef enum {
  4.         RESET_CONFIG_CLEAR = 1,
  5. }ads1262_power_reg_reset_config_e;

  6. #define ADS1262_POWER_REG_VBIAS(x)                (((x) & 0x01) << 1) //RW
  7. typedef enum {
  8.         VBIAS_CONFIG_DISABLE = 0, //default
  9.         VBIAS_CONFIG_ENABLE = 1,
  10. }ads1262_power_reg_vbias_config_e;

  11. #define ADS1262_POWER_REG_INTREF(x)                ((x) & 0x01) //RW
  12. typedef enum {
  13.         INTREF_CONFIG_DISABLE = 0,
  14.         INTREF_CONFIG_ENABLE = 1, //default
  15. }ads1262_power_reg_intref_config_e;

  16. /*mode0 register*/
  17. #define ADS1262_MODE0_REG_REFREV(x)                (((x) & 0x01) << 7) //RW
  18. typedef enum {
  19.         REFREV_CONFIG_NORMAL_POLARITY = 0,  //default
  20.         REFREV_CONFIG_REVERSE_POLARITY = 1,
  21. }ads1262_mode0_reg_refrev_config_e;

  22. #define ADS1262_MODE0_REG_RUNMODE(x)                (((x) & 0x01) << 6) //RW
  23. typedef enum {
  24.         RUNMODE_CONFIG_CONTINUOUS_CONVERSION = 0,  //default
  25.         RUNMODE_CONFIG_PULSE_CONVERSION = 1,
  26. }ads1262_mode0_reg_runmode_config_e;

  27. #define ADS1262_MODE0_REG_CHOP(x)                (((x) & 0x03) << 4) //RW
  28. typedef enum {
  29.         CHOP_CONFIG_DISABLE = 0,  //default
  30.         CHOP_CONFIG_INPUT_CHOP_ENABLE = 1,
  31.         CHOP_CONFIG_IDAC_ROTATION_ENABLE = 2,
  32.         CHOP_CONFIG_ALL_ENABLE = 3,
  33. }ads1262_mode0_reg_chop_config_e;

  34. #define ADS1262_MODE0_REG_DELAY(x)                ((x) & 0x0F) //RW
  35. typedef enum {
  36.         DELAY_CONFIG_NO_DELAY = 0,  //default
  37.         DELAY_CONFIG_8_7US = 1,  //8.7us
  38.         DELAY_CONFIG_17US = 2,   //17us
  39.         DELAY_CONFIG_35US = 3,   //35us
  40.         DELAY_CONFIG_69US = 4,
  41.         DELAY_CONFIG_139US = 5,
  42.         DELAY_CONFIG_278US = 6,
  43.         DELAY_CONFIG_555US = 7,
  44.         DELAY_CONFIG_1_1MS = 8,  // 1.1ms
  45.         DELAY_CONFIG_2_2MS = 9,
  46.         DELAY_CONFIG_4_4MS = 10,
  47.         DELAY_CONFIG_8_8MS = 11,
  48. }ads1262_mode0_reg_delay_config_e;

  49. /*mode1 register*/
  50. #define ADS1262_MODE1_REG_FILTER(x)                (((x) & 0x07) << 5) //RW
  51. typedef enum {
  52.         FILTER_CONFIG_SINC1_MODE = 0,
  53.         FILTER_CONFIG_SINC2_MODE = 1,
  54.         FILTER_CONFIG_SINC3_MODE = 2,
  55.         FILTER_CONFIG_SINC4_MODE = 3,
  56.         FILTER_CONFIG_FIR_MODE = 4, //default
  57. }ads1262_mode1_reg_filter_config_e;

  58. #define ADS1262_MODE1_REG_SBADC(x)                (((x) & 0x07) << 4) //RW
  59. typedef enum {
  60.         SBADC_CONFIG_CONNECT_ADC1 = 0, //default
  61.         SBADC_CONFIG_CONNECT_ADC2 = 1,
  62. }ads1262_mode1_reg_sbadc_config_e;

  63. #define ADS1262_MODE1_REG_SBPOL(x)                (((x) & 0x07) << 3) //RW
  64. typedef enum {
  65.         SBPOL_CONFIG_PULLUP_MODE = 0, //default
  66.         SBPOL_CONFIG_PULLDOWN_MODE = 1,
  67. }ads1262_mode1_reg_sbpol_config_e;

  68. #define ADS1262_MODE1_REG_SBMAG(x)                ((x) & 0x07) //RW
  69. typedef enum {
  70.         SBMAG_CONFIG_NO = 0, //default
  71.         SBMAG_CONFIG_0_5UA = 1,
  72.         SBMAG_CONFIG_2UA = 2,
  73.         SBMAG_CONFIG_10UA = 3,
  74.         SBMAG_CONFIG_50UA = 4,
  75.         SBMAG_CONFIG_200UA = 5,
  76.         SBMAG_CONFIG_10M = 6, // 10MΩresistor
  77. }ads1262_mode1_reg_sbmag_config_e;

  78. /*mode2 register*/
  79. #define ADS1262_MODE2_REG_BYPASS(x)                (((x) & 0x07) << 7) //RW
  80. typedef enum {
  81.         BYPASS_CONFIG_PGA_ENABLE = 0, //default
  82.         BYPASS_CONFIG_PGA_BYPASS = 1,
  83. }ads1262_mode2_reg_bypass_config_e;

  84. #define ADS1262_MODE2_REG_GAIN(x)                (((x) & 0x07) << 4) //RW
  85. typedef enum {
  86.         GAIN_CONFIG_1V = 0, //default,1V/V
  87.         GAIN_CONFIG_2V = 1,
  88.         GAIN_CONFIG_4V = 2,
  89.         GAIN_CONFIG_8V = 3,
  90.         GAIN_CONFIG_16V = 4,
  91.         GAIN_CONFIG_32V = 5,
  92. }ads1262_mode2_reg_gain_config_e;

  93. #define ADS1262_MODE2_REG_DR(x)                ((x) & 0x0F) //RW
  94. typedef enum {
  95.         DR_CONFIG_2_5SPS = 0, //2.5 SPS, data rate
  96.         DR_CONFIG_5SPS = 1,
  97.         DR_CONFIG_10SPS = 2,
  98.         DR_CONFIG_16_6SPS = 3,
  99.         DR_CONFIG_20SPS = 4, //default
  100.         DR_CONFIG_50SPS = 5,
  101.         DR_CONFIG_60SPS = 6,
  102.         DR_CONFIG_100SPS = 7,
  103.         DR_CONFIG_400SPS = 8,
  104.         DR_CONFIG_1200SPS = 9,
  105.         DR_CONFIG_2400SPS = 10,
  106.         DR_CONFIG_4800SPS = 11,
  107.         DR_CONFIG_7200SPS = 12,
  108.         DR_CONFIG_14400SPS = 13,
  109.         DR_CONFIG_19200SPS = 14,
  110.         DR_CONFIG_38400SPS = 15,
  111. }ads1262_mode2_reg_dr_config_e;

  112. /*input multiplexer register*/
  113. #define ADS1262_INPMUX_REG_MUXP(x)                (((x) & 0x0F) << 4) //RW
  114. typedef enum {
  115.         MUXP_CONFIG_AIN0 = 0, //default
  116.         MUXP_CONFIG_AIN1 = 1,
  117.         MUXP_CONFIG_AIN2 = 2,
  118.         MUXP_CONFIG_AIN3 = 3,
  119.         MUXP_CONFIG_AIN4 = 4,
  120.         MUXP_CONFIG_AIN5 = 5,
  121.         MUXP_CONFIG_AIN6 = 6,
  122.         MUXP_CONFIG_AIN7 = 7,
  123.         MUXP_CONFIG_AIN8 = 8,
  124.         MUXP_CONFIG_AIN9 = 9,
  125.         MUXP_CONFIG_AINCOM = 10,
  126.         MUXP_CONFIG_TSMP = 11,
  127.         MUXP_CONFIG_APSMP = 12,
  128.         MUXP_CONFIG_DPSMP = 13,
  129.         MUXP_CONFIG_TTSP = 14,
  130.         MUXP_CONFIG_FLOAT = 15,
  131. }ads1262_inpmux_reg_muxp_config_e;

  132. #define ADS1262_INPMUX_REG_MUXN(x)                ((x) & 0x0F) //RW
  133. typedef enum {
  134.         MUXN_CONFIG_AIN0 = 0,
  135.         MUXN_CONFIG_AIN1 = 1, //default
  136.         MUXN_CONFIG_AIN2 = 2,
  137.         MUXN_CONFIG_AIN3 = 3,
  138.         MUXN_CONFIG_AIN4 = 4,
  139.         MUXN_CONFIG_AIN5 = 5,
  140.         MUXN_CONFIG_AIN6 = 6,
  141.         MUXN_CONFIG_AIN7 = 7,
  142.         MUXN_CONFIG_AIN8 = 8,
  143.         MUXN_CONFIG_AIN9 = 9,
  144.         MUXN_CONFIG_AINCOM = 10,
  145.         MUXN_CONFIG_TSMN = 11,
  146.         MUXN_CONFIG_APSMN = 12,
  147.         MUXN_CONFIG_DPSMN = 13,
  148.         MUXN_CONFIG_TTSN = 14,
  149.         MUXN_CONFIG_FLOAT = 15,
  150. }ads1262_inpmux_reg_muxn_config_e;
以上的代码都写在ADS1262.h文件里面,即ADC芯片驱动代码的头文件可以用“ADC芯片名称.h”或者“drv_ADC芯片名称.h”来命名。
接下来就是编写初始化代码接口了,对应写在ADS1262.c里面,同样地,ADC芯片驱动代码的源文件可以用“ADC芯片名称.c”或者“drv_ADC芯片名称.c”来命名。初始化函数接口可以用“ADC芯片名称._init”来命名。

以下即为ads1262_init函数接口,实现对ADC芯片的初始化配置操作:
  1. void ads1262_init(void)
  2. {
  3.     uint8_t write_byte = 0x00;

  4.         ads1262_cs_set(ADS1262_CS_HIGH);   
  5.     //config power register
  6.     write_byte = ADS1262_POWER_REG_RESET(RESET_CONFIG_CLEAR) \
  7.                      | ADS1262_POWER_REG_VBIAS(VBIAS_CONFIG_ENABLE) \
  8.                      | ADS1262_POWER_REG_INTREF(INTREF_CONFIG_ENABLE);
  9.     ads1262_write_register(POWER_REG, write_byte);

  10.     //config interface register
  11.     write_byte = ADS1262_INTERFACE_REG_TIMEOUT(TIMEOUT_CONFIG_DISABLE) \
  12.                      | ADS1262_INTERFACE_REG_STATUS(STATUS_CONFIG_ENABLE) \
  13.                      | ADS1262_INTERFACE_REG_CRC(CRC_CONFIG_DISABLE);
  14.     ads1262_write_register(INTERFACE_REG, write_byte);
  15.    
  16.     //config mode0 register
  17.     write_byte = ADS1262_MODE0_REG_REFREV(REFREV_CONFIG_NORMAL_POLARITY) \
  18.                      | ADS1262_MODE0_REG_RUNMODE(RUNMODE_CONFIG_CONTINUOUS_CONVERSION) \
  19.                      | ADS1262_MODE0_REG_CHOP(CHOP_CONFIG_DISABLE) \
  20.                      | ADS1262_MODE0_REG_DELAY(DELAY_CONFIG_NO_DELAY);
  21.     ads1262_write_register(MODE0_REG, write_byte);

  22.     //config mode1 register
  23.         write_byte = ADS1262_MODE1_REG_FILTER(FILTER_CONFIG_FIR_MODE) \
  24.                      | ADS1262_MODE1_REG_SBADC(SBADC_CONFIG_CONNECT_ADC1) \
  25.                      | ADS1262_MODE1_REG_SBPOL(SBPOL_CONFIG_PULLUP_MODE) \
  26.                      | ADS1262_MODE1_REG_SBMAG(SBMAG_CONFIG_0_5UA);
  27.     ads1262_write_register(MODE1_REG, write_byte);

  28.     //config mode2 register
  29.     write_byte = ADS1262_MODE2_REG_BYPASS(BYPASS_CONFIG_PGA_ENABLE) \
  30.                      | ADS1262_MODE2_REG_GAIN(GAIN_CONFIG_1V)\
  31.                      | ADS1262_MODE2_REG_DR(DR_CONFIG_7200SPS);
  32.     ads1262_write_register(MODE2_REG, write_byte);

  33.     //config input multiplexer register
  34.     write_byte = ADS1262_INPMUX_REG_MUXP(MUXP_CONFIG_AIN0) \
  35.                      | ADS1262_INPMUX_REG_MUXN(MUXN_CONFIG_AIN1);
  36.     ads1262_write_register(INPMUX_REG, write_byte);
  37.         ads1262_cs_set(ADS1262_CS_HIGH);
  38. }
通过以上的基于位或运算符的代码操作,后面如果需要修改某个寄存器的某个位值,直接用枚举值复制粘贴进行替换即可,而且可以保证准确无误。
虽然一开始对照寄存器进行代码编写时会比较繁琐费时,但这是事半功倍的操作,代码的可读性和可维护性是比较好的。
以上是个人见解,有更好的方式也欢迎分享,比如使用表驱动法等也是非常好的,方法很多,归根结底,目的是增加可读性和可维护性。

另外,对于其他的外置芯片驱动初始化代码,包括DAC芯片和EEPROM芯片等,同样可以以这种方式实现一劳永逸的操作。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

1143

帖子

22

粉丝
快速回复 返回顶部 返回列表
子宫肌瘤挂什么科室 荨麻疹需要注意什么 今年28岁属什么生肖 减肥适合吃什么水果 汗手适合盘什么手串
尿发黄什么原因 减肥早餐适合吃什么 女生的胸部长什么样 黄油是什么做的 牡丹是什么意思
甲硝唑治什么病 什么是肝癌 切尔西是什么意思 有过之而不及是什么意思 骨密度是检查什么的
嗣是什么意思 血浓度高是什么原因 鸡肾炒什么配菜好吃 晟读什么 发字五行属什么
嘱托是什么意思cj623037.com mpa是什么意思chuanglingweilai.com 莲子有什么作用hcv8jop2ns0r.cn 疣是什么原因造成的hcv9jop6ns4r.cn 乐字属于五行属什么hcv8jop4ns2r.cn
割爱是什么意思hcv8jop8ns4r.cn 一天当中什么时候最热hcv7jop6ns7r.cn 相对是什么意思hcv8jop4ns6r.cn 女人梦见烧纸什么预兆bjhyzcsm.com 肝不好吃什么水果hcv8jop9ns9r.cn
禹字五行属什么的hcv9jop5ns4r.cn 大自然是什么意思hcv8jop9ns7r.cn 子宫是什么hcv8jop0ns5r.cn 衰竭是什么意思gangsutong.com 全国劳动模范有什么待遇hcv9jop0ns6r.cn
茶鱼是什么鱼hcv9jop1ns0r.cn 缺钾吃什么食物好hcv9jop4ns9r.cn 9月3日是什么星座的hcv8jop2ns0r.cn 天珠有什么作用与功效hcv8jop8ns7r.cn 诊刮是什么手术hcv8jop2ns1r.cn
百度