ねえ皆さん
加速度計の過渡検出機能の使用方法を示す単純なベアメタルの例コードがよく求められるため、 ここでは、NXP FRDM-KL25Z プラットフォーム と FRDM-FXS-MULT2-Bセンサ拡張ボード を使用して FXLS8471Q加速度計 用に作成した例の1つを共有することにしました 。
このサンプルコードは、 AN4693 の Python コードスニペットを補完するものです。FXLS8471Qは、X軸またはY軸のいずれかで最小40msの期間、315mgを超える「瞬間的な」加速度変化を検出するように設定されています。イベントがトリガーされると、INT1 ピンに割り込みが生成されます。
void FXLS8471Q_Init (void)
{
FXLS8471Q_WriteRegister(TRANSIENT_THS_REG, 0x85); // Set threshold to 312.5mg (5 x 62.5mg )
FXLS8471Q_WriteRegister(TRANSIENT_COUNT_REG, 0x02); // Set debounce timer period to 40ms
FXLS8471Q_WriteRegister(TRANSIENT_CFG_REG, 0x16); // Enable transient detection for X and Y axis, latch enabled
FXLS8471Q_WriteRegister(CTRL_REG4, 0x20); // Acceleration transient interrupt enabled
FXLS8471Q_WriteRegister(CTRL_REG5, 0x20); // Route acceleration transient interrupt to INT1 - PTA5
FXLS8471Q_WriteRegister(CTRL_REG1, 0x29); // ODR = 12.5Hz, Active mode
}
ISRでは、次のスクリーンショットに示すように、割り込みフラグのみがクリアされ、TRANSIENT_SRC(0x1E)レジスタが読み取られて、SRC_TRANSステータスビットがクリアされ、INT1ピンがディアサートされます。
void PORTA_IRQHandler()
{
PORTA_PCR5 |= PORT_PCR_ISF_MASK; // Clear the interrupt flag
IntSource = FXLS8471Q_ReadRegister(TRANSIENT_SRC_REG); // Read the TRANSIENT_SRC register to clear the SRC_TRANS flag in the INT_SOURCE register
EventCounter++;
}
添付されている完全なソースコードを見つけることができます。この簡単なサンプルコードに関して質問がある場合は、以下でお気軽にお問い合わせください。フィードバックや提案も大歓迎です。
よろしくお願いします。
Tomas