マイコン工作実験日記

Microcontroller を用いての工作、実験記録

SAM3UでASPを動かす - その1

2010-05-13 23:25:47 | SAM3
せっかく購入したSAM3U-EKなので、TOPPERS/ASPを動かすことにしました。

ASPではすでにDWMのSTM32おまけ基板がターゲットとしてサポートされているので、こいつを基にすれば容易に移植が可能なはずです。ARM7やARM9では割り込みコントローラやタイマは各ベンダ毎にその仕様がことなっていましたが、Cortex-M3ではNVIC, SysTickとして共通になっていますので、この部分のコードは変更無しに使えるはずです。そのため、SAM3Uへの移植作業はその分簡単になるわけです。

実際の作業はまずはクロックの初期化のコードの準備からです。おおよその流れはSAM7やSAM9と同じなのですが、これまでとは変わった点がいくつかあります。
  • SAM7/SAM9ではリセット後はRC発振器の32KHzで動作開始。SAM3ではRC発振器の4MHzで動作開始。
  • SAM7ではPLLがひとつしかなかったが、SAM3UではUSB用にUTMI PLLが用意されている。
続いてピン・コンフィグですが、これはほぼSAM7,SAM9と同じ考え方。

SAM3Sだと、各PIOピンにはPeripheral A, B, Cの3つの機能を割り当てられるのですが、SAM3Uでは従来どうりAとBのふたつだけになっています。ただし、その選択の仕方が変更されています。これまでは、PIO_ASR、PIO_BSRでPeripheral A/Bの選択をおこない、PIO_ABSRでどちらが選択されているかを示すという方式でした。この方式では、PIO_ABSRはread-onlyのレジスタでした。ところが、SAM3UではPIO_ASR/PIO_BSRが廃止され、PIO_ABSRがread-writeとなって選択機能を持つようになっています。従来の方式は他のレジスタの構成との整合性もとれていたし、解りやすく使いやすいSAM7/SAM9の特徴のひとつを成していただけに、残念ではあります。SAM3UではSAM3Sとの整合性を意識して、このような方式に変更されているようです。SAM3Sでは機能選択のためにPIO_ABCDSR1とPIO_ABCDSR2のふたつのレジスタの操作が必要になっていますが、SAM3UではPIO_ABCDSRが0x0で固定であり、PIO_ABCDSR1がPIO_ABSRという別名で呼ばれていると考えることができるからです。

つづいては、ログ出力用のシリアルポートの設定。SAM7/SAM9ではDBGUの一部の機能でしたが、SAM3ではUARTになっています。位置づけと名前は変更されていますが、機能的には同等。実際のところ、ATMEL提供のヘッダファイルでは従来との互換性を意識してかDBGUという名前でレジスタ参照するようになっていました。

ざっと、こんな作業でASPのバナーが出力されるようになったのですが、その先で例外発生して止まってしまいました。↓



この原因調査でハマッテいたのですが、その件については次回の記事とすることにします。