2016-06-08 146 views
1

我在STM32F4上使用libopenCM3作爲我的項目。我以前使用由ST開發的標準外設庫和更新的硬件抽象層。STM32F4上的Libopencm3中斷表

在這些庫中,您有裝配文件(啓動文件)和向量表的定義。

這就是我對libopenCM3所缺少的東西。你能告訴我在哪裏可以找到這張桌子嗎?或者它是以另一種方式完成的?

我真的需要在我的項目中使用中斷。

謝謝。

+0

建立一些東西,反彙編它,grep爲源樹中的標籤。 –

回答

0

你能告訴我在哪裏可以找到這張桌子嗎?

中斷矢量表位於lib/cm3/vector.c

__attribute__ ((section(".vectors"))) 
vector_table_t vector_table = { 
    ... 
    .irq = { 
     IRQ_HANDLERS 
    } 
}; 

而且IRQ_HANDLERS爲STM32F4在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項目。有機會,你會找到你需要的。

+0

謝謝山姆。遺憾的是,這個解釋在libopencm3文檔中丟失或隱藏。 – phodina