⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 本人写的测试CS5530芯片代码,大部分功能和CS5532相同
💻 C
📖 第 1 页 / 共 2 页
字号:
   DBYTE[address_pt++]=0x0D;
   read_reg(address_pt);
   address_pt = address_pt +4;
 

   _nop_(); _nop_(); _nop_(); _nop_();

  address_pt  = 52; 
  CS5532_CS=1;          // 未校准前转换
  CS5532_Txd(0x80);
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();
  DBYTE[address_pt++]=0x80;
  read_data(address_pt);
  address_pt = address_pt +4;
  _nop_();  _nop_(); _nop_(); _nop_();

/*
  CS5532_Txd(0x81);    // 自偏移校准
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();
*/

/*
  CS5532_Txd(0x82);    //  自增益校准
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();
*/


  CS5532_Txd(0x85);    // 偏移校准
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();
    

/*
  CS5532_Txd(0x86);    //  增益校准
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();
*/

/*
                         // 测试寄存器写回默认值
   CS5532_Txd(0x07);    // REF TEST 
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);
   CS5532_Txd(0x1A);
   CS5532_Txd(0x00);
*/

//单次转换
//////////////////////////////////////////////////

for(i=0;i<5;i++)
 {
   CS5532_CS=1;
   _nop_(); _nop_(); _nop_(); _nop_();
   _nop_(); _nop_(); _nop_(); _nop_(); 
   _nop_(); _nop_(); _nop_(); _nop_(); 
//  address_pt = 48;
  CS5532_Txd(0x80);
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();
  DBYTE[address_pt++]=0x80;
  read_data1(address_pt);
  for(k = 0; k < 4;k++)
  {
	  Send(DBYTE[address_pt+i]);
  }

  address_pt = address_pt +4;
  for(k=0;k<20;k++)  _nop_();  
  }

 // 连续转换
 //*************************************************** 

     CS5532_Txd(0xC0);//连续转换命令
  while(CS5532_SDO)
     _nop_();  _nop_(); _nop_(); _nop_();  

  for(i=0;i<5;i++)
 {  
   for(k=0;k<20;k++)  _nop_();//delay1 
//  address_pt = 48;
   while(CS5532_SDO)
     _nop_();  _nop_(); _nop_(); _nop_();
  DBYTE[address_pt++]=0xC0;
  read_data1(address_pt);
     address_pt = address_pt +4;
   for(k=0;k<20;k++)  _nop_(); //delay
 }

   for(i=0;i<5;i++)
 {  
   for(k=0;k<20;k++)  _nop_();//delay1 
//  address_pt = 48;
   while(CS5532_SDO)
     _nop_();  _nop_(); _nop_(); _nop_();
  DBYTE[address_pt++]=0xC0;
  read_data1(address_pt);
     address_pt = address_pt +4;
   for(k=0;k<20;k++)  _nop_(); //delay
  }

  while(CS5532_SDO)
      _nop_();  _nop_(); _nop_(); _nop_();
     CS5532_Txd(0xFF);
     CS5532_Txd(0x00);
     CS5532_Txd(0x00);
     CS5532_Txd(0x00);
     CS5532_Txd(0x00);

   CS5532_Txd(0x0B);    // Read Config Reg
   DBYTE[address_pt++]=0x0B;
   read_reg(address_pt);
   address_pt = address_pt +4;

   CS5532_Txd(0x03);    // Power Save Select 
   CS5532_Txd(0x80);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);

_nop_();
}


 
void  read_reg(uchar address_pt)
{
 uchar i,j;
// EX1=0;     
      CS5532_SCLK = 0;  //时钟低
      CS5532_SDI = 0;
      _nop_(); _nop_(); _nop_();

      for(j=0;j<4;j++)
      {
       for(i=0;i<8;i++)
       {
        CS5532_SCLK=1;     //时钟高    
        RxdTxd4b[j]<<=1;     
        if(CS5532_SDO) 
         RxdTxd4b[j]|=0x01;  //从SDO读取数据
        CS5532_SCLK=0;            //时钟低 
        _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
       }
      }
 DBYTE[address_pt]=RxdTxd4b[0];
 DBYTE[address_pt+1]=RxdTxd4b[1];
 DBYTE[address_pt+2]=RxdTxd4b[2];
 DBYTE[address_pt+3]=RxdTxd4b[3];
}

void  read_data(uchar address_pt)
{
 uchar i,j;
// EX1=0;     
       CS5532_SCLK = 0;  //时钟低
      CS5532_SDI = 0;
   //for(i=0;i<16;i++)
      _nop_(); _nop_(); _nop_();
      for(i=0;i<8;i++)             // 8 个清串口时钟
      { 
     CS5532_SCLK=1;    //时钟高   
        _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
    

        CS5532_SCLK=0;    //时钟低
  _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
     _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
   _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();

      }

      for(j=0;j<4;j++)
      {
       for(i=0;i<8;i++)
       {
        CS5532_SCLK=1;     //时钟高    
        RxdTxd4b[j]<<=1;     
        if(CS5532_SDO) 
         RxdTxd4b[j]|=0x01;  //从SDO读取数据
        CS5532_SCLK=0;            //时钟低 
        _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
  _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
       }
      }

 DBYTE[address_pt]=RxdTxd4b[0];
 DBYTE[address_pt+1]=RxdTxd4b[1];
 DBYTE[address_pt+2]=RxdTxd4b[2];
 DBYTE[address_pt+3]=RxdTxd4b[3];
}

void CS5532_init(void)
{
 uchar k;
 //串口初始化
 uchar i;
 CS5532_CS=1;
 for(k=0;k<200;k++)  _nop_();

 CS5532_CS=0; //片选使能
 for(k=0;k<200;k++)  _nop_();
 CS5532_SDI=0;
 CS5532_SDO=1;
 CS5532_SCLK=0;

 for(i = 0; i < 20; i++)
 	Write8(0xFF);
 Write8(0xFE);
 /*for(i=0;i<180;i++) 
 CS5532_Txd_init(0xFF);//发送命令
 CS5532_Txd(0xFE);  
 for(i=0;i<18;i++) _nop_();
 for(i=0;i<18;i++) _nop_();
  

 //配置寄存器
 CS5532_Txd(0x03);
 CS5532_Txd(0x20);
 CS5532_Txd(0x00);
 CS5532_Txd(0x00);
 CS5532_Txd(0x00);*/
for(k=0;k<200;k++)  _nop_();
for(k=0;k<200;k++)  _nop_();

/*
 //配置寄存器
 CS5532_Txd(0x03);
 CS5532_Txd(0x02);
 CS5532_Txd(0x40);
 CS5532_Txd(0x00);
 CS5532_Txd(0x02);
 
 CS5532_Txd(0x05);
 CS5532_Txd(0x84);
 CS5532_Txd(0x00);
 CS5532_Txd(0x84);
 CS5532_Txd(0x00);
 */     
//---------------------------     
}
 
void CS5532_Txd(uchar dat)//向CS5532写一字节数据
{
     uchar i,k;
     CS5532_SCLK=0;//时钟低   
     CS5532_CS=0;
     _nop_();
//    for(i=0;i<16;i++)
//  _nop_();
//  _nop_();
  _nop_();
  _nop_();
     for(i=0;i<8;i++)
     {
      if((dat<<i)&0x80) 
       CS5532_SDI=1;   //数据送到SPI的SDI口
       else             
       CS5532_SDI=0;
       _nop_();
    _nop_();
//    for(i=0;i<16;i++)
//    _nop_();
    _nop_();
       CS5532_SCLK=1;    //时钟高   
      for(k=0;k<20;k++)  _nop_();
/*      
       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
*/
      CS5532_SCLK=0;    //时钟低
      for(k=0;k<20;k++)  _nop_();
//       _nop_();

     }
     CS5532_SDI=0;
}

void CS5532_Txd_init(uchar dat)//向CS5532写一字节数据
{
     uchar i,k;
     CS5532_SCLK=0;//时钟低   
     CS5532_CS=0;
     _nop_();
     for(i=0;i<8;i++)
     {
      if((dat<<i)&0x80) 
       CS5532_SDI=1;   //数据送到SPI的SDI口
       else             
       CS5532_SDI=0;
       _nop_();
       CS5532_SCLK=1;    //时钟高   
      for(k=0;k<190;k++)  _nop_();
 /*
       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
*/
      CS5532_SCLK=0;    //时钟低
       _nop_();
      for(k=0;k<190;k++)  _nop_();
     }
}

void  read_data1(uchar address_pt)
{
 uchar i,j;
// EX1=0;     
      /* CS5532_SCLK = 0;  //时钟低
      CS5532_SDI = 0;
      for(i=0;i<8;i++)             // 8 个清串口时钟
      { 
     CS5532_SCLK=1;    //时钟高   
        CS5532_SCLK=0;    //时钟低
      }*/
		CS5532_Txd(0x00);
		//RxdTxd4b[0] = Read8();
		//RxdTxd4b[1] = Read8();
		//RxdTxd4b[2] = Read8();
		//RxdTxd4b[3] = Read8();

      for(j=0;j<4;j++)
      {
       for(i=0;i<8;i++)
       {
        CS5532_SCLK=1;     //时钟高    
        RxdTxd4b[j]<<=1;     
        if(CS5532_SDO) 
         RxdTxd4b[j]|=0x01;  //从SDO读取数据
        CS5532_SCLK=0;            //时钟低 
     //   _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
       }
      }
}

void  read_datax(uchar address_pt)
{
 uchar i,j;
// EX1=0;     
      /* CS5532_SCLK = 0;  //时钟低
      CS5532_SDI = 0;
      for(i=0;i<8;i++)             // 8 个清串口时钟
      { 
     CS5532_SCLK=1;    //时钟高   
        CS5532_SCLK=0;    //时钟低
      }*/
		CS5532_Txd(0x09);
		//RxdTxd4b[0] = Read8();
		//RxdTxd4b[1] = Read8();
		//RxdTxd4b[2] = Read8();
		//RxdTxd4b[3] = Read8();

      for(j=0;j<4;j++)
      {
       for(i=0;i<8;i++)
       {
        CS5532_SCLK=1;     //时钟高    
        RxdTxd4b[j]<<=1;     
        if(CS5532_SDO) 
         RxdTxd4b[j]|=0x01;  //从SDO读取数据
        CS5532_SCLK=0;            //时钟低 
     //   _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
       }
      }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -