このテーブルの場所を教えてください。
割り込みベクタテーブルはlib/cm3/vector.cにあります:
__attribute__ ((section(".vectors")))
vector_table_t vector_table = {
...
.irq = {
IRQ_HANDLERS
}
};
STM32F4IRQ_HANDLERS
の場合はファイルで定義されていlib/stm32/f4/vector_nvic.c
ます。このファイルは、ライブラリをビルドした後に使用できます ( irq2nvic_hスクリプトで生成されます)。このファイルには、次のようなものがあります。
#define IRQ_HANDLERS \
[NVIC_DMA1_STREAM0_IRQ] = dma1_stream0_isr, \
[NVIC_ADC_IRQ] = adc_isr, \
...
dma1_stream0_isr()
およびのような関数は、adc_isr()
次のように定義されます。
#pragma weak adc_isr = blocking_handler
したがって、これらの関数はデフォルトでハンドラをブロックしているだけです。ただし、これらはweakとして定義されているため、コードで簡単に再定義できます。
それとも別の方法で行われますか?
上記で説明したように、要約すると次のようになります。コードで正しい名前の割り込みハンドラー関数 ( ISR ) を定義するだけで、関数は割り込みベクター テーブルに自動的に配置されます。
たとえば、UART2 割り込みを処理したい場合usart2_isr()
は、コードのどこかに関数を実装するだけです。ISR 関数名の全リストについては、 を参照してくださいinclude/libopencm3/stm32/f4/nvic.h
。しかし、これらの名前は通常、非常に単純です。
また、libopencm3-examplesプロジェクトもチェックしてください。そこに必要なものだけが見つかる可能性があります。