2

Raspberry Pi 用のオペレーティング システムを作成する方法を調べています。Raspberry Pi 用の OSDev ベアボーン チュートリアルでは、保留中の割り込みをクリアするために次のコードが使用されています。

// Clear pending interrupts.
mmio_write(UART0_ICR, 0x7FF);

機能mmio_writeは以下の通りです。

static inline void mmio_write(uint32_t reg, uint32_t data){
    *(volatile uint32_t *)reg = data;
}

この値が重要な理由と、割り込みをクリアする方法を教えてください。

4

1 に答える 1

2

この行:

// Clear pending interrupts.
mmio_write(UART0_ICR, 0x7FF);

アドレス のレジスタに 0x7FF の値を書き込みますUART0_ICR。ほとんどUART0_ICRの場合、BCM2835 内の対応するレジスタのアドレスを参照する、コード内の他の場所で定義された値であり、おそらく次のようなものです。

#define UART0_ICR (UART0_BASE + 0x44)

この値が重要な理由と、割り込みをクリアする方法を教えてください。

これを理解するには、デバイスのデータシートを読む必要があります。これは、あなたの場合は BCM2835 です (クイック検索でこのリンクが表示されます)。UART レジスタ セクションを見ると、割り込みクリア レジスタである UART_ICR レジスタの説明が表示されます。

そのレジスタのビット テーブルの説明から明らかです。これは 32 ビット レジスタであり、ビット 31 ~ 11 は使用されませんが、ビット 0 から 10 (11 ビット) は、さまざまな種類の割り込みをクリアするためのフラグとして使用されます。このレジスタに 0x7FF の値を書き込むと、文字通りすべてのフラグが設定されるため、保留中のすべての UART 割り込みがクリアされます。

于 2016-09-06T04:43:37.923 に答える