(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

Interfaceの記事とかがいろいろと忙しくて更新が滞っていたのだけど,PowerPCへのGDBスタブ移植を見越して,シリアル周りをちょっと拡張してみた.

移植編第1回では,シリアルは1本のみの利用だったのだけど,このターゲットボードは写真を見ればわかるように,シリアルインタフェースを2本持っている.

なので,シリアルを2本とも使えるように拡張してみた.移植編第1回からの修正点は毎度どおり diff.txt に差分を取ってあるので,細かい修正内容はそちらを参照してほしい.

まず,今回利用しているPowerPCオプションCPUカードにはシリアルインタフェースが2本あるのだけど,これらはCPU(MPC5200)のPSC1,PSC2というコントローラが接続されている.で,従来は serial.c ではPSC1のみ決め打ちで利用するようになっていたのだけど,各関数が index という引数を取って,PSC1とPSC2を選択して動作するようにserial.c を修正した.

さらに extintr.c ではシリアル2本を管理するように修正.あとコマンドスレッドをPSC1,PSC2用に2本起動して,index を切替えて動作するように command.c を修正.あと command.c にはシリアルの index を表示するための,indexコマンドというのを新たに追加してある.

あとついでに startup.s でコードがまとめられる部分があったのでまとめてみた.あとタイマ関連で不要な宣言とかが残っていたのをごっそり掃除.

では動かしてみよう.ボードに電源入れてファームウエアをインストールして起動する.

# bootm 80000
## Booting image at 00080000 ...
Image Name: smplimg
Created: 2009-04-06 12:19:03 UTC
Image Type: PowerPC U-Boot Standalone Program (uncompressed)
Data Size: 16744 Bytes = 16.4 kB
Load Address: 00040000
Entry Point: 00040000
OK
puts ok
printf ok
PVR = 80822014
MSR = 0000b002
MSR = 00003002
MBAR (from SPR) = f0000000
MBAR (from MBAR) = 0000f000
MBAR (from bd) = f0000000
IBPclock = 66000000
baudrate = 115200
MSR = 00003002
MSR_EE set OK
>
OK
> echo aaa
aaa
OK
> index
0
OK
> ★★★ここでシリアルをPSC2側に挿し替え
OK
> index
1
OK
> threads
extintr
idle
command0
command1
OK
> index ★★★ここでシリアルをPSC1側に挿し戻す
0
OK
>

あっさり一発で動いた.とくに問題無し.

シリアルを抜き挿ししてコマンド実行.index コマンドで,はじめは0と出ているが挿し替え後は1と出て,再度挿し戻した後は再び0と出ているのに注目.

これでシリアルが2本とも利用できるようになった.で,次はgdbスタブを移植して,シリアルの片方はgdb用に利用するようにするつもり.