8桁ディスプレイコントローラMAX7219の初期化部分はTLCS90にボードで実績のある設定をそのまま持ってきました。
前述のset_7219()関数で制御レジスタにコードを送ります。
この後、デジットごとに表示データを送ればLEDが点灯するはずなのですが、まずは案の定うんともすうともいいません。
ちゃんと信号が行っているか、MAX7219に接続される制御線をプローブしてみました。おかしいのに気づいたのが2行目の
set_7219(0x0C01);
のところです。
波形はこんな感じ。
/LOADをLに落としてからCLKが16発出ます。CLK立ち上がり時のDINのレベルがシフトインされるので
入力データは 0000110000000000 つまり0x0C00 となり何故か最下位の1が消えてなくなってしまっています。
これでは7219をシャットダウンモードにプログラミングしたことになり表示が出ないのは当然です。
念のためオール「1」の
set_7219(0xFFFF);
を送ってみると(7219にとっては無効なコードですが)、やはり16クロック目が来る前にDINが0に落ちてしまっています。どうもデータの最下位ビットが無視されてるような動きです。