AD7793芯片CS引脚直接拉底通讯失败

2019-12-27 18:38发布

现在正在调试AD7793,由于用到电磁隔离,通道数不够用,于是直接将AD7793的CS片选引脚接到GND了,现在用STM32与其通信,首先对AD7793进行复位操作,然后读其内置ID寄存器,读数正确,但如果继续再读ID寄存器,则返回数据为255.
如果在每次读取之前都复位一次,则可以连续正常读取,但一次复位操作,只能保证一次正常读取操作。
而AD7793在正常使用的时候,需要连续配置多个寄存器,才能正常工作。


  1. /************************************************
  2. 函数:void AD7793_RESET(void)
  3. 功能:AD7793复位命令
  4. 参数:无
  5. 返回:复位AD7793
  6. *************************************************/
  7. void AD7793_RESET(void)
  8. {
  9.         u8 flag=0;
  10.         AD7793_DIN_HIGH();
  11.         for(flag=0;flag<32;flag++)
  12.         {
  13.                 AD7793_SCLK_LOW();
  14.                 delay_us(1);
  15.                 AD7793_SCLK_HIGH();
  16.                 delay_us(1);
  17.         }       
  18. }

  19. /************************************************
  20. 函数:void AD7793_WRITE_CR(u8 dat)
  21. 功能:将参数写入AD7793的通信寄存器
  22. 参数:被写入的数据
  23. 返回:无
  24. *************************************************/
  25. void AD7793_WRITE_CR(u8 dat)
  26. {
  27.         u8 flag=0;
  28.         for(flag=0;flag<8;flag++)
  29.         {
  30.                 AD7793_SCLK_LOW();
  31.                 delay_us(1);
  32.                
  33.                 if(dat&0x80)
  34.                         AD7793_DIN_HIGH();
  35.                 else
  36.                         AD7793_DIN_LOW();
  37.                
  38.                 AD7793_SCLK_HIGH();
  39.                 delay_us(1);
  40.                
  41.                 dat<<=1;
  42.         }
  43. }

  44. /************************************************
  45. 函数:u8 AD7793_READ_BYTE(void)
  46. 功能:从AD7793读取一个字节的数据
  47. 参数:无
  48. 返回:读取到的数据
  49. *************************************************/
  50. u8 AD7793_READ_BYTE(void)
  51. {
  52.         u8 flag=0;
  53.         u8 dat=0;
  54.         u8 readDat=0;
  55.         for(flag=0;flag<8;flag++)
  56.         {
  57.                 dat<<=1;
  58.                 AD7793_SCLK_HIGH();
  59.                 delay_us(1);
  60.                 AD7793_SCLK_LOW();
  61.                 delay_us(1);
  62.                 readDat=AD7793_READ_DATA();
  63.                 if(readDat)
  64.                         dat|=0x01;
  65.                 else
  66.                         dat&=0xfe;       
  67.         }
  68.         return dat;
  69. }
复制代码
我现在怀疑的问题,是不是因为我的CS引脚一直拉底,导致通信时序异步而错乱了呢????希望有经验的朋友帮忙解答一下

程序读取ID片段如下图所示:
QQ截图20170623105133.jpg (8.65 KB, 下载次数: 0) 下载附件 2017-6-23 10:51 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。