割り込みを使用して、UART 16550D にエラーがあるかどうか、および文字がいつ読み取れるかを確認しようとしています。
UART 構成は次のとおりです。
#define UART 0x03f8 // Endereço da Porta Serial - I (com1)
#define UART_IER 1
#define UART_LCR 3
#define UART_LSR 5
#define UART_DLL 0 /* Out: Divisor Latch Low */
#define UART_DLM 1 /* Out: Divisor Latch High */
#define UART_LSR_THRE 0x20 /* Transmit-hold-register empty */
#define UART_LSR_DR 0x01 /* Receiver data ready */
#define UART_RX 0 /* In: Receive buffer */
#define UART_TX 0 /* Out: Transmit buffer */
void UART_init(void){
outb( 0x80 , UART + UART_LCR );
outb( 0x00 , UART + UART_DLM );
outb( 0x60 , UART + UART_DLL );
outb( 0x1f , UART + UART_LCR );
outb( 0x07 , UART + UART_IER );
return;
}
そして割り込み
irqreturn_t short_interrupt(int irq, void *dev_id){
printk("INTERRUPT HAPPENED. WILL NOW RETURN\n");
return 0;
}
static int seri_init(void){
int result, i;
UART_init();
request_irq(4, short_interrupt, SA_SHIRQ, "seri", NULL);
....
したがって、今のところ、ハンドラーが呼び出されているかどうかを確認したいだけです。4 は、私が使用している仮想ボックス設定の IRQ として定義されています。
私が知りたいのは、この設定に何か問題があるのでしょうか? テストするとき、読んでいるものを読んで処理するのに問題はありません。問題は、ハンドラーが呼び出されることはありません。
request_irq() からの戻り値は -22 です。コンパイル時に問題はありません。