MCF52235(というかColdFireコア)は、ほとんどのすべてピンを汎用IO(GPIO)として設定することができます。MCF52235のマニュアルを参考にしながらテストプログラムを作成しました。
main()ispbarというのはメモリマップドレジスタの先頭アドレスで、今回の基板では0x40000000になっています。
{
char *ispbar = 0x40000000;
long panpar = 0x10006a;
long ddran = 0x100022;
long portan = 0x10000a;
char *p, v, c;
PrStr("Show PANPAR\r\n");
p = ispbar + panpar;
v = *p;
PrHex(v);
PrStr("\r\n");
PrStr("Set and Show DDRAN\r\n");
p = ispbar + ddran;
*p = 0xf;
v = *p;
PrHex(v);
PrStr("\r\n");
PrStr("Write to PORTAN...\r\n");
p = ispbar + portan;
for(c=0;;c+=3) {
*p = c & 0xf;
}
}
マニュアル中のレジスタの位置などは、大体このレジスタの値へのオフセットとして表記されています。
その次のpanparというのは、ispbarからオフセット0x10006Aにあるレジスタで、ポートANのPAR (Pin Assignment Register)という意味です。今回は、ANポート(アナログ入出力ポート)をIOピンとして使うのですが、panparはリセット後は0になっていますから、何もしなくても汎用ディジタルIOピンとなっています(確認のために読み出しています)。
ちなみに、付録基板に搭載されている3軸加速度センサはAN5、AN6、AN7に接続されています。ad::adinitを実行すると、panparの値が0x70に変化することがわかります。
さて、ANポートを出力ピンにするにはDDRAN(Data Direction Register AN)を使います(オフセット0x100022)。各ビットがAN0~An7の各ポートに対応していて、0の場合にはそのANポートは入力、1だと出力となります。今回下位4ビットを出力で使用するので0xfを書き込みます。
これで書き込みの準備はOKです。最後に、書き出したい値をPORTAN(オフセット0x10000A)に書き込んでやると、任意の値をディジタルIOとして出力することが出来ます。今回は+3しながら値を書き込んでいます。
このプログラムをtftpで基板に転送し、runで実行させると
runとなって、PANPAR、DDRANなどのレジスタが期待通りの値になっていることがわかります。
Show PANPAR
00000000
Set and Show DDRAN
0000000f
Write to PORTAN...
こちらは、カメレオンUSBで計測したAN0~AN4の値です。正しく3ずつ増加しているので、正しく動いているものと思われます。
ループ一回あたり約1m秒掛かっていることが判ります。ちょっと遅い気もしますが、インタプリタだし仕方ないといえば仕方ないかもしれません。
0 件のコメント:
コメントを投稿