恐ろしいピン名称
【TIがNSを食った】という記事、それにDRIさんの「TGの無いスペアナでTGもどき測定」
を見て、TIの「TMS9914」:GP-IBコントローラを思い出しました。
PC-9801用の拡張ボードでは「uPD7210」が使われていましたが、VMEバス
など、産業用のマイコンボードではTMS9914が多かったように思います。
当時の形状は40ピンのDIP。
こんなピン配置です。
「DIO1〜8」というのがGP-IBのバスにつながります。(バッファを入れて)
その下のSRQ、ATN、EOI〜なんて信号はGP-IBの制御線。
DIO1がLSB(最下位ビット)でDIO8がMSB(最上位ビット)。
さて、問題がマイコンのバスにつながる10〜17ピンの「D0〜D7」。
双方向のデータバス。
これの名付け方が怖いんです。
以下の信号名解説書きをよ〜く見てください。
(クリックで拡大↓)
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
「D0 is the most-significant bit.」
D0がMSB。 普通D0はLSBでしょ。
これ、絶対見落としますって。
『LSBとMSBをソフトで入れ換える方法ないかなぁ?』なんて相談を
受けたことがあります。
「回転命令」だと8回ループ。
「256バイトのテーブルを作って変換のほうが速いかな」っと答えましたよ。
8ビットのバス線を切断してジャンパーを飛ばすより、知らんふうして、
ソフトで対策するほうがいいかなぁ。
私の場合、トラ技かインターフェース誌でこの注意を見た記憶があったので、
LSB・MSB入れ替わりの設計ミスから逃れることが出来ましたが、けっこう多くの
エンジニアがスカタンしてるんじゃないでしょうか。
|
2011年10月4日 13時25分
|
記事へ |
コメント(6) |
トラックバック(0) |
|
・電子回路工作 |
トラックバックURL:http://blog.zaq.ne.jp/igarage/trackback/2606/
※ブログ管理者が承認するまで表示されません
そういうことじゃあなくって…
普通の信号表記では「D0」が「LSB」なんです。
8bitのMSBつまりD7から記すと
「80 40 20 10 08 04 02 01」というビットのデータになりまっしょ。
それがD0がMSB。
つまりビット位置が反転。
D0が1なら「80」という値。
で、えらいこっちゃっとなったわけです。
ちなみにEOIは「End Of Identify」で、データ列の終端を表します。
に騙されました。
仕様書には、1〜16の順で説明されているのですが、実際の
ピン配置は15,16、1,2,〜、14になっていて、LCDを一つ
お釈迦にしてしまいました。
確かに仕様書の説明には、一つも間違いが有る訳ではありま
せんが、この間違いやすいピン配置について、一言も注意書
きが書いていないと言う部分にメーカーとしての誠意のなさを
感じました。
超小型の1602、元は14線あれば制御できて、15、16はおまけのバックライト電源。
基板のシルク印刷かパターンでのピン表記はなかったのかな?
このあたりは、ピン位置のお話とTMS9914のD0〜D7表記のお話はちょっと違うかと。
昔々の話なら…Bottom ViewとTop View。
IC使いは上から見たところに慣れているけど、リレー屋は下から見たところの足配置。
表面実装パッケージでも、左下が1ピンじゃない石もあります。
いずれにせよ、データーシートをすみずみまで見ていないのが悪いわけでして。
「書いてあるでしょ」っと。
ソフト側でビット変換を行う事も考えましたが結局パターンカットしてジャンパを飛ばしました。
今までずーっと配線をテレコに引き間違えたと思っておりましたが、このような落とし穴があったんですね。
長年のシコリが取れた感じでスッキリしました。
失敗体験席へ、お一人様ごあんな〜い。
テーブル変換、テーブルをROMの8ビット境界に置いてアクセスを速くします。
ORG ($ OR 0FFH) + 1
XTBL:
DB 000H,080H,040H,0C0H ;00〜03
:
XBIT:
MVI H,HIGH XTBL
MOV L,A
MOV A,M
RET
あえて8080ニーモニックで(笑)
サブルーチンだとこんな↑具合で。
高速アクセスがいる場所ならルーチンの先頭で
テーブルアドレス上位を固定。
あとは2命令でテーブル変換できます。
MVI H,HIGH XTBL ;Hを固定
:
MVI L,CMD1
MOV A,M ;ビット変換
OUT GPIBC ;コマンド出力
:
LDAX D :出力データ列
MOV L,A
MOV A,M ;ビット変換
OUT GPIBD ;データ出力