已回答假定已回答

ADXL345 中断清零问题

djd 在 2013-4-25 詢問的問題
最後回覆由adi_rock於2013-5-7提供

尊敬的技术支持人员,  我在使用ADXL345做计步器设计的时候, 碰到了以下问题;

非常着急, 请帮忙看看, 如何解决?

目前我们用ADXL345设计计步器, 已经到了测试阶段; 在测试阶段偶尔能发现计步会停止的现象;

  经过查证, 发现是ADXL345WaterMark中断输出一直为低电平不能恢复到高电平;

  环境说明: ADXL3452.1V供电, I2C接口;

 


  输出两个中断, INT1FIFOWatermark中断, INT2为测试静止和活动中断;

   中断设置为低电平有效;

  

   中断处理为:

 

if((FirmBitFlag.BitFlag.ibitA345FIFO == 1) || (P345INT1 == 0))
   {    //读ADXL345 INT SOURCE寄存器  
   if(Adxl345ReadRegister(Adxl345_INT_SOURCE) & 0x02)
   {
   Adxl345DataAnalysis();//12.5ms执行速度;  
   }
   FirmBitFlag.BitFlag.ibitA345FIFO = 0;   
   }  
   if((FirmBitFlag.BitFlag.ibitA345ACT  == 1) ||(P345INT2 == 0))
   {
   if((Adxl345ReadRegister(Adxl345_INT_SOURCE) & 0x18) != 0)   
   {
   //如果判断到是由INACTIVITITY产生的中断;则进入Sleep状态;
   ReadValue = Adxl345ReadRegister(Adxl345_TAP_STATUS);
   if((ReadValue & 0x08) != 0)  
   Adxl345ParameterSet(Adxl345_POWER_CTL,0x3C);
   //如果是由ACTIVITY产生的中断;让ADXL345进入测量状态;
   else //if((ReadValue & 0x10) != 0)
   {  
   Adxl345ParameterSet(Adxl345_POWER_CTL,0x0);
   Adxl345ParameterSet(Adxl345_FIFO_CTRL,0x40+FIFO_NUMBER);  
   Adxl345ParameterSet(Adxl345_INT_ENABLE,0x1A);//静止,活动中断和水印中断使能;  
   Adxl345ParameterSet(Adxl345_POWER_CTL,0x38);  
  
   }  
   }
  
   FirmBitFlag.BitFlag.ibitA345ACT = 0;
   }   

 

   

 

  现在发现INT1变低后不能变高, 情况是偶尔发生, 所以不好抓取数据, 想问一下贵司的工程人员有没有碰到类似情况;请指教一下;

結果