Sim's blog

電子工作はじめてみました

鈴商液晶をV850基板から使う(1)

2007-07-08 21:20:43 | V850
V850付録基板から鈴商液晶を使ってみようと思いました。ソフトだけでやると間に合わないっぽいので、DWM付録基板のFPGAを使うことにしました。FPGAへの出力はSPIにします。長くなりそうなので、V850側からはじめます

V850は3線式のシリアル通信機能をもっているので、そのまま使います(ユーザーズマニュアル16章)。コマンドを送っているのかデータを送っているのかを区別するための信号(RS)を追加します。
V850付録基板のpin配置
RS   P5.3  (CN3 5pin) 0:コマンド 1:データ
CS   P5.2  (CN3 4pin) 1:disable 0:enable
SCK  SCKB2 (CN3 3pin) SPI送信クロック (CSIB2)
MOSI SOB2  (CN3 2pin) SPI送信データ   (CSIB2)

データは横8dotを1byteにすると384x192dotは48x192byteになります。FPGA側にRAMを持たせて0000番地~23ff番地の9k byteに左上のdotから並んでいることにしました。アドレスは自動的にインクリメントされるのでデータを送ってやれば左上から順に描画されます。コマンドはアドレスを変更するのに使います。アドレスは14bitあるので、2回に分けて送ってやる必要があります。
転送先アドレス変更コマンドの概要
RS = 0
1byte目 0x80 + アドレス上位6bit
2byte目 アドレス下位8bit

appliletを使って雛形を作ります。

- システムは、ウォッチドックタイマーを使用しない、オンチップデバッグを使用する。
- ポートは、P52とP53を出力にする
- シリアルは、CSIB2を使用する
- CSIB2の設定は、受信許可なし、送信許可あり、コールバックは送信完了にして他はデフォルトのままにします。

デフォルトだとデータ長8bit、MSBから送信、1Mbps、データ位相はタイプ1になっています。データ位相は立上り/立下り、正パルス/負パルスの組み合わせで4種類あります。詳しくはユーザーズマニュアルの16章に載っています。

mainはこんな感じです
#define CS P5.2
#define RS P5.3

#define CMD  0
#define DATA 1

UCHAR vram[48*192];

// SPI送信
void send(UCHAR rsel, UCHAR *p, USHORT size)
{
    extern volatile UCHAR done;
    RS = rsel;                 // 0:コマンド 1:データ
    done = 0;
    CSIB2_SendData(p, size);   // 送信
    while(!done) ;             // 送信完了まで待つ
}

void  main( void )
{
    UCHAR cmd[2] = {0x80, 0x00};

    // ここでvramに何か描く

    CS = 0;
    send(CMD, cmd, 2);         // コマンド送信
    send(DATA, vram, sizeof(vram)); // データ送信

    while (1) ;                // 無限ループ
}

コマンドで転送先を0番地にしてから、vramの内容を一気に送っています。SPIへの送信はポーリングで完了待ちしています。

送信完了のコールバック(SERIAL_user.c)はこんな感じです。
volatile UCHAR done;

void CALL_CSIB2_Send( void )
{
    done = 1;
}

volatileな変数doneを使って完了通知をします。

CSIB2の設定で、転送モードを単発転送モードでなく連続転送モードにすることもできます。いまいち違いがよく分かっていませんが、連続にすると送信に割り込みを使うようです。V850のDMAは転送先をポートにしたり、転送のトリガーを完了割り込みにしたりできるので、DMAでSPIにデータを転送することもできるみたいです。