ねえ皆さん
加速度計のモーション検出機能の使用方法を示す単純なベアメタルのサンプルコードに興味がある場合は、NXP FRDM-KL25Z プラットフォームと FRDMSTBC-A8471 ボードで作業しながら FXLS8471Q加速度計 用に作成した例の1つを以下に示します 。
このFXLS8471Qは、X軸またはY軸のいずれかで最小40ミリ秒で315mgを超える動きを検出するように設定されています。イベントがトリガーされると、INT1 ピンに割り込みが生成されます。
void FXLS8471Q_Init (void)
{
FXLS8471Q_WriteRegister(FT_MT_THS_REG, 0x85); // Set threshold to 312.5mg (5 x 62.5mg )
FXLS8471Q_WriteRegister(FF_MT_COUNT_REG, 0x02); // Set debounce timer period to 40ms
FXLS8471Q_WriteRegister(FF_MT_CFG_REG, 0xD8); // Latch enabled, motion detection enabled for X and Y axis
FXLS8471Q_WriteRegister(CTRL_REG4, 0x04); // Motion interrupt enabled
FXLS8471Q_WriteRegister(CTRL_REG5, 0x04); // Route motion interrupt to INT1 - PTD4
FXLS8471Q_WriteRegister(CTRL_REG1, 0x29); // ODR = 12.5Hz, Active mode
}
ISRでは、次のスクリーンショットに示すように、割り込みフラグのみがクリアされ、FF_MT_SRC(0x16)レジスタが読み取られて、INT_SOURCEレジスタのSRC_FFMTフラグがクリアされ、INT1ピンがディアサートされます。
void PORTD_IRQHandler()
{
PORTD_PCR4 |= PORT_PCR_ISF_MASK; // Clear the interrupt flag
IntSource = FXLS8471Q_ReadRegister(FF_MT_SRC_REG); // Read the FF_MT_SRC register to clear the SRC_FFMT flag in the INT_SOURCE register
EventCounter++;
}
添付されている完全なソースコードを見つけることができます。この簡単なサンプルコードに関して質問がある場合は、以下でお気軽にお問い合わせください。
よろしくお願いします。
Tomas