ST意法半导体
直播中

王波

7年用户 1368经验值
私信 关注
[问答]

如何获得lsm303c INT_XL中断为“低电平有效”

嗨,

我试图让lsm303c在INT_XL引脚上输出“低电平有效”中断。

这是我的初始代码:
void LSM303C_AccInit(void)
{
uint8_t result = 0;


ACCELERO_IO_Write(LSM303C_CTRL_REG1_A,0b00100101); //禁用y轴以避免mg

ACCELERO_IO_Write(LSM303C_CTRL_REG2_A,0b00000000);

ACCELERO_IO_Write(LSM303C_CTRL_REG3_A,0b00001000);

ACCELERO_IO_Write(LSM303C_CTRL_REG4_A,0b00000000);


ACCELERO_IO_Write(LSM303C_CTRL_REG5_A,0b00000011); //中断低电平有效,开漏


ACCELERO_IO_Write(LSM303C_FIFO_CTRL,0b01000000); //流模式

ACCELERO_IO_Write(LSM303C_IG_CFG1_A,0b11100010); // y中断禁用

ACCELERO_IO_Write(LSM303C_IG_THS_X1_A,5);
ACCELERO_IO_Write(LSM303C_IG_THS_Y1_A,5);
ACCELERO_IO_Write(LSM303C_IG_THS_Z1_A,5);

ACCELERO_IO_Write(LSM303C_IG_DUR1_A,0b10000001); //中断延迟

}

嵌入式控制器的引脚配置为弱上拉输入。

示波器显示出对加速的良好中断反应,但不是我配置的:没有中断时INT_XL为低电平,但一旦检测到加速度,信号就会变为高电平约40ms然后再次回到低电平状态。

我究竟做错了什么?

谢谢,

吉尔

以上来自于谷歌翻译


以下为原文

Hi,

I am trying to get lsm303c output an "active low" interrupt on pin INT_XL.

here is my init code:
void LSM303C_AccInit(void)
{  
  uint8_t result = 0;
  

  ACCELERO_IO_Write(LSM303C_CTRL_REG1_A, 0b00100101);  // disable y axis to avoid mg
  
  ACCELERO_IO_Write(LSM303C_CTRL_REG2_A, 0b00000000);  
  
  ACCELERO_IO_Write(LSM303C_CTRL_REG3_A, 0b00001000);  
  
  ACCELERO_IO_Write(LSM303C_CTRL_REG4_A, 0b00000000);
  
  
  ACCELERO_IO_Write(LSM303C_CTRL_REG5_A, 0b00000011);  //interrupt active low, open-drain
  

  ACCELERO_IO_Write(LSM303C_FIFO_CTRL, 0b01000000);  //stream mode,
  
  ACCELERO_IO_Write(LSM303C_IG_CFG1_A, 0b11100010);  //y interrupt disabled
  
  ACCELERO_IO_Write(LSM303C_IG_THS_X1_A, 5);
  ACCELERO_IO_Write(LSM303C_IG_THS_Y1_A, 5);
  ACCELERO_IO_Write(LSM303C_IG_THS_Z1_A, 5);
  
  ACCELERO_IO_Write(LSM303C_IG_DUR1_A, 0b10000001); //interrupt delay

}

The embedded controller's pin is configured as input with weak pull up.

The oscilloscope shows a good interrupt reaction to acceleration, but not as i configured it: the INT_XL is low when no interrupt, but as soon as there is acceleration detected, the signal goes high for about 40ms and then goes back to low again forever.

What am i doing wrong?

Thanks,

Gil

回帖(1)

曾玲娟

2018-9-25 18:21:48
以下配置不正确:
 
ACCELERO_IO_Write(LSM303C_IG_CFG1_A,0b11100010); // y中断禁用
 
如果需要AND组合,请将AOI位设置为1;如果需要OR,请将其设置为0并设置
6D位为0。

以上来自于谷歌翻译


以下为原文

Following configuration is not correct:

ACCELERO_IO_Write(LSM303C_IG_CFG1_A, 0b11100010);  //y interrupt disabled

Please set the AOI bit to 1 if you want AND combination or to 0 if you want OR and set the
6D bit to 0.
举报

更多回帖

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