找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1165|回复: 0
收起左侧

CS1238开源驱动代码

[复制链接]
ID:487396 发表于 2021-8-31 23:09 | 显示全部楼层 |阅读模式
关于CS1238开源驱动代码

我写这款芯片驱动程序时也是参考一些网站,论坛,但是没有我自己想要的,于是乎我自己根据芯片手册自己撸调试完成,已在项目中使用。

文件C和H通用的,自行添加进入工程即可使用。

源程序如下:
  1. #include "CS1238.h"


  2. /******************************************************************************
  3. *函数名                :CS1238_Init
  4. *参数                        :无
  5. *返回                        :无
  6. *描述                        :初始化CS1238
  7. ********************************************************************************/
  8. void CS1238_Init(void)
  9. {
  10. #if 1
  11.         GPIO_InitTypeDef GPIO_InitStructure;
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE );
  13.        
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.         GPIO_Init(GPIOD, &GPIO_InitStructure);
  18.         GPIO_ResetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_14);                 //PD13,PD14 输出高
  19. #endif
  20. }

  21. /******************************************************************************
  22. *函数名                :F_AD_Clock
  23. *参数                        :无
  24. *返回                        :无
  25. *描述                        :AD时钟
  26. ********************************************************************************/
  27. static void F_AD_Clock(void)               
  28. {
  29.         SCLK = 1;                     //高电平不能超过100uS,否则进入powerdown的休眠模式.
  30.         delay_us(5);  
  31.         SCLK = 0;
  32.         delay_us(5);
  33. }

  34. /******************************************************************************
  35. *函数名                :CS1238_RD_DATA
  36. *参数                        :无
  37. *返回                        :AD值
  38. *描述                        :CS1238读AD
  39. ********************************************************************************/
  40. long CS1238_RD_DATA(void)
  41. {       
  42.         unsigned int i;
  43.         long ad_data;

  44.         CS1238_DRDY_IN();
  45.         ad_data = 0;
  46.         SCLK = 0;
  47.         delay_us(10);
  48.         if(!SDAT_IN)
  49.         {
  50.                 for(i=1; i<=24; i++)               
  51.                 {
  52.                         ad_data <<= 1;                                                  
  53.                         F_AD_Clock();                                //1-24个SCLK
  54.                         if(SDAT_IN) ad_data++;                       
  55.                 }
  56.                 F_AD_Clock();                                        //第25个SCLK.
  57.                 F_AD_Clock();                                        //第26个SCLK.
  58.                 F_AD_Clock();                                        //第27个SCLK.                       
  59.         }
  60.                                           
  61.         while(SDAT_IN)
  62.                 delay_us(10);
  63.         return (ad_data^0x800000)/100;
  64. }

  65. /******************************************************************************
  66. *函数名                :CS1238_WR_CONFIG
  67. *参数                        :config 寄存器配置值
  68. *返回                        :无
  69. *描述                        :CS1238写寄存器配置
  70. ********************************************************************************/
  71. void CS1238_WR_CONFIG(u8 config)
  72. {
  73.         #if 1
  74.         u8 i,CMD;
  75.         CS1238_DRDY_IN();                                //配置IO口为输入
  76.         SCLK = 0;
  77.         delay_us(10);
  78.         if(!SDAT_IN)
  79.         {
  80.                 for(i=1; i<=29; i++)        //第1~29个SCLK.
  81.                 {
  82.                         F_AD_Clock();
  83.                 }
  84.                
  85.                 CS1238_DRDY_OUT();                //配置IO口为输出
  86.                 CMD = 0X65;                                                //写配置
  87.                 for(i=30; i<=36; i++)        //30~36写0X65中低7位,写配置寄存器命令
  88.                 {               
  89.                         if(CMD & 0x80)
  90.                                 SDAT_OUT = 1;
  91.                         else
  92.                                 SDAT_OUT = 0;
  93.                         delay_us(2);
  94.                         SCLK = 1;                  //高电平不能超过100uS,否则进入powerdown的休眠模式.
  95.                         delay_us(5);
  96.                         SCLK = 0;
  97.                         delay_us(5);
  98.                         CMD <<= 1;                                        //最高位移除,留底7位
  99.                 }
  100.                                        
  101.                 F_AD_Clock();                                        //第37个SCLK,CS1238自动切换DRDY/DOUT 的方向.
  102.                 for(i=38; i<=45; i++)        //第38~45个SCLK写配置寄存器
  103.                 {
  104.                         if(config & 0x80)
  105.                                 SDAT_OUT = 1;
  106.                         else
  107.                                 SDAT_OUT = 0;       
  108.                         delay_us(2);
  109.                         SCLK = 1;                  //高电平不能超过100uS,否则进入powerdown的休眠模式.
  110.                         delay_us(5);                                 
  111.                         SCLK = 0;
  112.                         delay_us(5);
  113.                         config <<= 1;
  114.                 }
  115.                 CS1238_DRDY_IN();
  116.                 F_AD_Clock();                                        //第46个SCLK.
  117.                 delay_us(10);
  118.         }
  119.         #endif
  120. }
复制代码
51hei.png
所有资料51hei附件下载:
cs238驱动代码_C_H文件.zip (1.79 KB, 下载次数: 65)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表