芯海科技
直播中

小巴123

3年用户 7经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[ADC/AFE]

CS1237芯片寄存器配置下发和读取不一致。

您好,我用的CS1237芯片目前在读写SPI寄存器时,下发指令和读取的始终不一致,我用的是STM8S003芯片读取的,可以的话麻烦发一份CS1237的demo到2695047345@qq.com,谢谢。
image.png

//********************************************读SPI寄存器************************************************
    u8 CS1237_ReadReg()
      {
          u8 i = 0;
          u8 tem = 0;
          CS1237_SCLK_LOW();
          delay_us(50);            //Wakeup MCU
          CS1237_Data_IS_INPUT();  //输入模式
          while (CS1237_Data_PIN_STATE())//需要实际工程使用需要加入超时
            {
              delay_us(10);//Wakeup MCU
              i++;
              if(i>20)
                {
                 return 0;
                }
            };
          for (i = 0; i < 26; i++) // 1-26th CLK   前24读ADC 数据 后25 26读寄存器写操作状态
         
          C1237_OneClk();
          C1237_OneClk();  //27th CLK       
          CS1237_Data_IS_Out_HIGH(); //Force High  cs1237 direction input  27 那根线输出线拉高
          
          C1237_OneClk(); // 28th CLK   
          C1237_OneClk(); // 29th CLK  那根线切换成输入 
         
          tem = 0xAC;     // AC准备读命令(0x56)左移1位 下边开始命令写入
          
          for (i = 0; i < 7; i++) // 30~36th CLK  开始高位先输入
          {       
            if (tem & 0x80)
            CS1237_Data_IS_Out_HIGH();
            else
            CS1237_Data_IS_Out_LOW();
            tem <<= 1;
            C1237_OneClk();         
          }
          CS1237_Data_IS_Out_HIGH(); // cs1237 change to output direction切换那根线的方向
          C1237_OneClk();         // 37th CLK
       
          for (i = 0; i < 8; i++) // 38~45th CLK  输入寄存器配置数据或输出寄存器配置数据  高位先
          {
            tem <<= 1;
            C1237_OneClk();
            if (CS1237_Data_PIN_STATE())
              tem++;
          }
          C1237_OneClk();   //  那根线切换为输出 并且拉高
                          // 46th CLK
          return tem;
      }
//*******************************************写SPI寄存器*************************************************
    void C1237_WriteReg(u8 mData)
      {
          u8 i = 0;
          u8 tem = 0;
          CS1237_SCLK_LOW();
          delay_us(50);      //Wakeup MCU
          CS1237_Data_IS_INPUT();
          while (CS1237_Data_PIN_STATE())//需要实际工程使用需要加入超时
           {             
             delay_us(10);//Wakeup MCU
             i++;
             if(i>20)
              {
               return;
              }
            };
          for (i = 0; i < 26; i++) // 1~26th CLK
              C1237_OneClk();
         
          C1237_OneClk();//27th CLK
          CS1237_Data_IS_Out_HIGH(); // force high
          C1237_OneClk(); // 28th CLK
          C1237_OneClk(); // 29th CLK
          
          tem = 0xCA; // CA准备写命令(0x65)左移1位 下边开始命令写入
          
          for (i = 0; i < 7; i++) // 30~36th CLK
          {       
            if (tem & 0x80)
            CS1237_Data_IS_Out_HIGH();
            else
            CS1237_Data_IS_Out_LOW();
            tem <<= 1;
            C1237_OneClk();             
          }
          
          CS1237_Data_IS_INPUT();  // direction chage to intput direction
          C1237_OneClk();             // 37th CLK
          for (i = 0; i < 8; i++)     // 38~45th CLK
          {       
            if (mData & 0x80)
                CS1237_Data_IS_Out_HIGH();
            else
               CS1237_Data_IS_Out_LOW();
            mData <<= 1;
            C1237_OneClk();
          }
          
          CS1237_Data_IS_INPUT();
          C1237_OneClk(); // 46th CLK
                      
      }



回帖(2)

许立成

2023-6-9 14:24:49
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

jf_34498405

2024-4-20 15:39:43
你好,能发一下你的例程看看嘛,博主。十分感谢,邮箱:2864165038@qq.com
举报

更多回帖

发帖
×
20
完善资料,
赚取积分