mp3ストリームの再生に使っているAR9341なモジュールになんらかの表示機能を付けたいと思いました。
AR9341にはI2CはありませんがGPIOのビットバングで制御することは可能です。しかしGPIOはいろいろ使いあまり残っていません。
AR9341はGPIOピンを他の機能にアサインできるので二つ目のuartを利用すればTX一本ですむので良いかと考えました。
なにかマイコンを使って受信したデータを表示するモジュールを作るつもりです。
FreeBSDのsys/mips/atherosにあるAtherosのコードにはGPIOのOUTのピンアサインを設定する機能が実装されています。なぜかINはありません。
AR9341のデータシートを見ると、コンソールなどで使っているuartと二つ目のuartは全く仕様の違うようです。
AtherosはAR933xでuartの仕様を従来のns16550互換から独自仕様に変更しました。これは大不評だったみたいで、AR934xでは元に戻しました。そのAR933xで作られた新しい仕様のものが二つ目になっているようです。
AR934xではリファレンスクロックを100Mにして最大3MBpsの通信ができるように改良されたようです。
FreeBSDのAtherosのコードはhintsベースのコンフィグレーションでuartが二つあると区別がつかないので二つ目をuart_hsとしました。hsはHigh Speedの略です。
uartのコードはuart_busのコードと実体のuart_devのコードが分離されていて、uart_busのコードを作るだけですみました。
AR933x用に作っていたuart_devのコードがほぼそのまま使えました。
ただAR933xの場合u-bootが初期化してくれているので、その処理を追加しました。
consoleになることはないので、それ関係の処理は入れていません。
既存のAtherosのuart_busコードはgonzoさんが大昔に書いたものがそのままなので、今風な書き方にしてあります。
コードは自分のレポジトリに置いてあります。
GPIOのpinのhintsは以下のように設定しています。
# RESET SW to UART1_TD
hint.gpio.0.func.17.gpiofunc=79
hint.gpio.0.func.17.gpiomode=1