久しぶりに自作CPUのコアをLiteXに接続して、シミュレーション作業をしている。 FPGAの環境はどうにかなりつつあるので、シミュレーションでBIOSが動作するのを確認すれば、まずはなんとかなるんじゃないかなと思い作業中。
最終的にはキーボードからの入力を受け付けてコマンドを打てたりしてほしいのだが、まだそこまで言っていない。
PLICが割り込みをコアに通知して、それに応じてCLAIMレジスタを読むところまではちゃんと動いているようなのだが、ここから先がよく分からない。
無事にuart_isr()
に飛んでいるようなのだが、ここから先はどのように処理すればいいのだろう?
引き続き解析が必要だ。
void uart_isr(void) { unsigned int stat, rx_produce_next; stat = uart_ev_pending_read(); if(stat & UART_EV_RX) { while(!uart_rxempty_read()) { rx_produce_next = (rx_produce + 1) & UART_RINGBUFFER_MASK_RX; if(rx_produce_next != rx_consume) { rx_buf[rx_produce] = uart_rxtx_read(); rx_produce = rx_produce_next; } uart_ev_pending_write(UART_EV_RX); #if defined(__cva6__) asm volatile("fence\n"); #endif } } if(stat & UART_EV_TX) { uart_ev_pending_write(UART_EV_TX); while((tx_consume != tx_produce) && !uart_txfull_read()) { uart_rxtx_write(tx_buf[tx_consume]); tx_consume = (tx_consume + 1) & UART_RINGBUFFER_MASK_TX; } } }