Redbear Arduinoライブラリを使用してnRF52ベースのボード用のプログラムを作成しています。私のボードを効果的にBLEナノ2として扱います。nRF52のタイマ割り込み内でI2C割り込みを有効にするArduino
私はタイマーが毎ミリ秒ごとにティックする、例えば50msです。
このタイマーの中で、I2Cセンサーからデータを読み込み、その読みをバッファに追加したいと思います。
私は、デフォルトでは、タイマISRの内部で割り込みが無効になっていることを知っています。私は簡単にI2C割り込みを再び有効にし、センサーの読み込みを取得し、次に割り込みを再び無効にする方法を知りたいと思います。
センサの読み取り間隔は重要です。タイマーISRにフラグを設定したいだけではなく、フラグがチェックされるまでの時間がわからないため、
タイマーISR内からI2C割り込みを簡単にイネーブルにする方法を教えてもらえますか?
私が実験している:これらのいずれかと
__disable_irq();
__enable_irq();
NVIC_EnableIRQ(SPI0_TWI0_IRQn);
NRF_TWI0->INTENSET = 1;
ない喜び、私はそれらのいくつかはだけなのでISR内正常に機能していなかった、ソフトウェア内の特定の場所から作業することを理解しています。デフォルトで
void setup() {
// put your setup code here, to run once
NVIC_SetPriority (TIMER0_IRQn, 2);
NVIC_SetPriority (TIMER1_IRQn, 2);
NVIC_SetPriority (TIMER2_IRQn, 2);
NVIC_SetPriority (SPI0_TWI0_IRQn, 3);
NVIC_SetPriority (SPI1_TWI1_IRQn, 3);
Serial.begin(9600);
Serial.println("Start ");
Serial.print("Priority of TWI0: ");
Serial.println(NVIC_GetPriority (SPI0_TWI0_IRQn));
Serial.println(NVIC_GetPriority (SPI1_TWI1_IRQn));
Serial.print("Priority of Ticker: ");
Serial.println(NVIC_GetPriority (TIMER0_IRQn));
Serial.println(NVIC_GetPriority (TIMER1_IRQn));
Serial.println(NVIC_GetPriority (TIMER2_IRQn));
Wire.begin();
__disable_irq();
__enable_irq();
ticker1s.attach(task_handle, 1);
Wire.requestFrom(0x02,6);
}
void task_handle(void) {
__enable_irq();
Serial.println("Task handle ");
Serial.println("-IRQ enable status: ");
Serial.println(NVIC_GetEnableIRQ(SPI0_TWI0_IRQn));
Serial.println(NVIC_GetEnableIRQ(SPI1_TWI1_IRQn));
NVIC_EnableIRQ(SPI0_TWI0_IRQn);
NRF_TWI0->INTENSET = 1;
NVIC_EnableIRQ(SPI1_TWI1_IRQn);
NRF_TWI1->INTENSET = 1;
Serial.println("-IRQ enable status: ");
Serial.println(NVIC_GetEnableIRQ (SPI0_TWI0_IRQn));
Serial.println(NVIC_GetEnableIRQ (SPI1_TWI1_IRQn));
delay(1000);
Wire.requestFrom(0x02,6);
}
NVIC_GetPriorityとNVIC_SetPriorityを使用して、すべてのSPIx_TWIx_IRQn割り込みをTIMERx_IRQn優先順位のすべての優先順位よりも高くしたり低くしたりしてみました。 NVIC_GetPriorityは優先順位が設定されていることを確認していますが、まだ喜んではいません – Steve