您现在的位置: 主页 > 嵌入式处理器 > FPGA > CS1237驱动程序参考代码 - 参考设计 -
本文所属标签:
为本文创立个标签吧:

CS1237驱动程序参考代码 - 参考设计 -

来源: 网络用户发布,如有版权联系网管删除 2018-08-15 

  CS1237程序

  CS1237是一款高精度、低功耗模数转换芯片,一路差分输入通道,内置温度传感器和高精度振荡器

  /*----------------------------------------------------------------------------

  CODE NAME: AD_CommunicaTIon.C

  - descripTIon

  - MCU与ADC通讯相关子程序

  -----------------------------------------------------------------------------*/

  //整个通讯时序的时间必须小于1个数据转换周期

  //推荐每个CLK的时间长度:2uS ~ 15uS

  /*-----------------------------------------------------------------------------

  Name : F_AD_Clock

  FuncTIon: ADC时序时钟

  -----------------------------------------------------------------------------*/

  void F_AD_Clock(void)

  {

  IO_CLK_AD = 1;

  F_Delay();

  IO_CLK_AD = 0;

  F_Delay();

  }

  /*-----------------------------------------------------------------------------

  Name : F_Read_AD_Byte

  FuncTIon: 读3字节AD值

  -----------------------------------------------------------------------------*/

  void F_Read_AD(void)

  {

  _UCHAR i;

  R_AD0.word = 0;

  EIC20_EIE0 = 0; //关闭MCU_DAT管脚的外部中断(防止读写时误触发)

  // while(IO_Data_AD);

  for(i = 0; i 《 24; i++) //发送24个CLK,接收数据

  {

  R_AD0.word 《《= 1;

  F_AD_Clock();

  if(IO_Data_AD)

  {

  R_AD0.word ++;

  }

  }

  F_AD_Clock();

  F_AD_Clock();

  F_AD_Clock();

  //CLK27,拉高DRDY

  //如果一个数据转换周期内对ADC进行两次或以上的读写操作,则需要发送46个CLK,而不是27个CLK

  //(即:发送24个CLK读取数据,然后再发送22个CLK)

  EIC20_EIE0 = 1;

  //

  重新开启

  MCU_DAT

  管脚的外部中断

  }

  /*-----------------------------------------------------------------------------

  Name : F_Rd_AdReg

  Function: 读取ADC寄存器

  -----------------------------------------------------------------------------*/

  _UCHAR

  F_Rd_AdReg(void)

  {

  _UCHAR i;

  union _UCHAR_BIT R_Temp;

  //----------------------------------

  EIC20_EIE0 = 0;

  //关闭MCU_DAT管脚的外部中断(防止读写时误触发)

  //----------------------------------

  //1 ~ 3:clk1-clk27

  //----------------------------------

  for(i = 0; i 《 27; i++)

  {

  F_AD_Clock();

  }

  //----------------------------------

  //4:clk28-clk29

  //----------------------------------

  IO_Data_AD_Dir = 1;

  //把MCU_Data管脚设为输出

  F_AD_Clock();

  F_AD_Clock();

  //----------------------------------

  //5:clk30-clk36(发送读命令)

  //----------------------------------

  R_Temp.byte = 0xAC;

  //读命令(0x56)左移1位

  for(i = 0; i 《 7; i ++)

  {

  if(R_Temp.bit.b07)

  //MSB

  {

  IO_Data_AD = 1;

  }

  else

  {

  IO_Data_AD = 0;

  }

  R_Temp.byte = R_Temp.byte 《《 1;

  F_AD_Clock();

  }

  //----------------------------------

  //6:clk37

  //----------------------------------

  IO_Data_AD_Dir = 0;

  //把MCU_Data管脚设为输入

  F_AD_Clock();

  //----------------------------------

  //7:clk38-clk45(读取寄存器)

  //----------------------------------

  R_Temp.byte = 0;

  for(i = 0; i 《 8; i++)

  {

  R_Temp.byte 《《= 1;

  F_AD_Clock();

  if(IO_Data_AD)

  {

  R_Temp.byte ++;

  }

  }

  //----------------------------------

  //8:clk46

  //----------------------------------

  F_AD_Clock();

  //----------------------------------

  EIC20_EIE0 = 1;

  //重新开启MCU_DAT管脚的外部中断

  return R_Temp.byte;

  }

  /*-----------------------------------------------------------------------------

  Name : F_Wr_AdReg

  Function: 写入ADC寄存器

  -----------------------------------------------------------------------------*/

  void F_Wr_AdReg(_UCHAR R_AdReg)

  {

  _UCHAR i;

  union _UCHAR_BIT R_Temp;

  //----------------------------------

  EIC20_EIE0 = 0;

  //关闭MCU_DAT管脚的外部中断(防止读写时误触发)

  //----------------------------------

  //1 ~ 3:clk1-clk27

  //----------------------------------

  for(i = 0; i 《 27; i++)

  {

  F_AD_Clock();

  }

  //----------------------------------

  //4:clk28-clk29

  //----------------------------------

  IO_Data_AD_Dir = 1;

  //把MCU_Data管脚设为输出

  F_AD_Clock();

  F_AD_Clock();

  //----------------------------------

  //5:clk30-clk36(发送写命令)

  //----------------------------------

  R_Temp.byte = 0xCA;

  //写命令(0x65)左移1位

  for(i = 0; i 《 7; i ++)

  {

  if(R_Temp.bit.b07) //MSB

  {

  IO_Data_AD = 1;

  }

  else

  {

  IO_Data_AD = 0;

  }

  R_Temp.byte = R_Temp.byte 《《 1;

  F_AD_Clock();

  }

  //----------------------------------

  //6:clk37

  //----------------------------------

  F_AD_Clock();

  //----------------------------------

  //7:clk38-clk45(写入寄存器)

  //----------------------------------

  R_Temp.byte = R_AdReg;

  for(i = 0; i 《 8; i ++)

  {

  if(R_Temp.bit.b07) //MSB

  {

  IO_Data_AD = 1;

  }

  else

  {

  IO_Data_AD = 0;

  }

  R_Temp.byte = R_Temp.byte 《《 1;

  F_AD_Clock();

  }

  //----------------------------------

  //8:clk46

  //----------------------------------

  IO_Data_AD_Dir = 0;

  //把MCU_Data管脚设为输入

  F_AD_Clock();

  //----------------------------------

  EIC20_EIE0 = 1; //重新开启MCU_DAT管脚的外部中断

  }



              查看评论 回复



嵌入式交流网主页 > 嵌入式处理器 > FPGA > CS1237驱动程序参考代码 - 参考设计 -
 

"CS1237驱动程序参考代码 - 参考设计 -"的相关文章

网站地图

围观()