Tang Nano 4K アナトミア(3)

投稿者: | 2025/01/06

Tang Nano 4K に搭載されているFPGA GW1NSR-LV4CQN48P に内蔵のMPU(empu)から回路を制御するのに、APBを利用しようと考えています。APBの仕様書はAMBA® APB Protocol Specification で、ARMから入手可能です。

今回は、APBの触り?を試してみました。
予め断っておきますが、この記事の内容は私の備忘録で適当です(笑)

まずは、empuのブロック図のAPB2 Master[1-12]をクリックし、APB2 Masterで Enable APB2 Master 1 をチェックします。
これで、Base Address 0x40002400から256Byte分がアクセスできるようになります。

生成された、EMPUのComponent定義等をコピーします。

次は、APB Completerをつくります。
自分で一から書こうかなと思いましたが、BingのCopilotにお願いしてみました(笑)
とりあえず試すことはできそうなコードを生成してくれました。
これにちょっと手を加えて、READ,WRITEのテスト機能を追加しました。

Base Address の1ビット目に書き込むとポートがH/Lします。
Base Address からオフセット 0, 4, 8で読みだすと、ABCD, EFGH, IJKLを返します。

APB経由でREAD,WRITEするサンプルコードです。

empuはバイトオーダーがリトルエンディアンなので、バイトの入れ替えをしています。
サンプルコードに使われているprintf_str関数は、printfとついているにも関わらず、単にUARTにデータを流すだけで使い勝手が悪いので、tiny_printfを入れました。

UART0からの出力です。

出力モニターです(笑)
年末に大掃除もそこそに作りました。

実際に使うには、レジスタとの接続などまだまだ処理が必要ですが、とりあえずここまで。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください