●メインマイコン単体でのデバッグ

 PICマイコンは実装せずに(PICマイコン実装部分はソケット)、 メインマイコン単体でデバッグを行います。

まずは、デバッガーを接続して・・・・

『1』 PLDへのポートアクセスの確認

PLD内部のコントロールレジスタへのアクセスをデバッガーで確認します。
次に、クリップでIICバス入力ピンをLow、HighにしてIICバスの状態を読み込んでみます。
どちらも確認はOKでした。

ID-KC80 デバッガー画面

『2』 IICデータの取り込み部分デバッグ

IICバス疑似信号をPC9801のプリンターポートから出力するプログラムを作成 して、この信号が取り込めることを確認します。

疑似信号をPC9801のプリンターポートから出力 疑似信号をターゲットに接続

IICバス疑似信号のクロックを10KHz程度、データ件数は16件として取り込み、
メモリーに正常に取り込めたことを確認。

次にIICバス疑似信号のクロックを80KHz程度、データ件数は16件としてメモリーに取り込めるか確認しました。

あれれ・・・取り込みバッファーにうまくデータを取り込めていない!

今度はデータがうまく取り込みできていませんでした。
クロック周波数を上げたら正常に取り込めないということは、PLDからの割り込み を処理するルーチンの
実行時間が長すぎるのだろうと考え、割り込みルーチン実行時間 を計測することにしました。


<割り込みルーチン入口と出口にポート出力追加したところ>

;==============================================================================
;     IIC CH0 データ受信割り込み
;==============================================================================
iic_dtrcv_int_ch0::
    ex    af,af'
    exx

; 時間計測デバッグout
    LD    A,40H
    OUT   (PPB_D0),A           ; Debug Port OUT
;
    ld    a,(iic_ffcont_mem0)
    res    DATA_RCV_FF_CLR_BIT,a
    out    (STR_STP_FFLCR_PORT0),a
    set    DATA_RCV_FF_CLR_BIT,a
    out    (STR_STP_FFLCR_PORT0),a
;-----------------------------------------------
    call   iic_2latch_read0       ; 2 段ラッチ読み出し DE=1段目,HL=2段目
    ld    c,a              ; 有効段数 Save To C Reg

    push   hl               ; 2段目データ Push
    ld    hl,smpl_remain_bytes_ch0
;-----------------------------------------------
;     1段目データセーブ
;-----------------------------------------------
    ld    a,(hl)
    and    a               ; 取り込み制限なら取り込まない
    jr    z,idic_e01
;
    call   smpl_data_save         ; DE Register Save Buffer
    dec    (hl)
    jr    z,idic_e01
;
    ld    a,c               ; 有効段数 Check
    cp    2                ; 2段目も有効 ?
    jr    nz,idic_e01           ; No,jump
;-----------------------------------------------
;     2段目データセーブ
;-----------------------------------------------
    pop   de                ; 2段目データ Pop
    call   smpl_data_save          ; DE Register Save Buffer
    dec   (hl)
    jr    idic_exit
;
idic_e01:
    pop   de
idic_exit:
; 時間計測デバッグout
    XOR   A
    OUT   (PPB_D0),A            ; Debug Port
;
    exx
    ex af,af'
    ei
    reti


メインマイコンの空きポートに対し、

  割り込みルーチン入口 : ポートをHighにする
  割り込みルーチン出口 : ポートをLowにする

命令を追加し、オシロスコープでこのポートの出力のHigh期間の時間を確認すると、約140uSとなっていました。

PLDからの割り込みインターバルは、クロックが80KHzなので 約112uS なのに、割り込みルーチン
実行時間が140uSでは正常に取り込みはできないはず でした。

ここで、考えられる対策としては

* 割り込みルーチン処理時間を短縮する
* PLDの割り込み要求の周期を下げる

の2案のいずれかしかありません。

PLDロジック設計当初から、「割り込み処理ルーチン実行時間が長かった場合には、
PLD内部のシリアル→パラレル変換回路の変換後データラッチレジスターのビット数を
9ビットから18ビットに変更しよう」と考えていました。
そこで、PLD内部の変換回路を変更してPLDからの割り込み要求インターバル時間を2倍にしてみました。
PLD回路変更前と同じ条件でデータ取り込みを試みたところ、今度は正常に取り込みで きました。

だだし、目標はクロック200KHzなので、割り込みルーチンの処理時間としては 90uSまで短縮が必要です。
あと50uSの時間短縮は取り込みデータをメモリに保存する方法を変更すれば可能なように思われたので、
データ取り込み部のデバッグはここまでにしておき、PICマイコン単体でのデバッグに移りました。

IDKC−80でのデバッグ

●PICマイコン単体でのデバッグ

PICマイコンのポート動作を確認後、USB通信のデバッグを始めました。

PICデバッガーの接続
ターゲットへの接続 パソコンプリンターポートに接続

・PICマイコンのUSB通信部のソフトは、マイクロチップ社のホームページからダウンロードした
 サンプルを参考に作成しました。
・デバッグ用のUSBデバイスドライバーには、雑誌の付録CD−ROMに納められていた
 「汎用USBドライバー」を使用しました。
・パソコン側では、このドライバーを使ったUSB通信のみを行うテストプログラムを作成して、
 PICマイコンのデバッグを始めました。

PIC デバッガー画面

USB通信の部分そのものはサンプルを参考にしたのと、デバイスドライバーも動作確実なものを使用したこと、
またデバッガーを使用したこともあり、最初に思っていたよりもプラグインプレイ〜データのやり取りがすんなり
動作できました。

●メインマイコンとPICマイコンとのやりとり

『1』 232C通信

まず、両マイコンの232C通信のデバッグから始めました。
232C通信は、どちらのマイコンも以前に232C通信を行ったことがあるので、問題なく動作できました。

『2』 メインマイコン→PICマイコンへのデータの送出確認

このデバッグでは、メインマイコン側はデバッガーでポートダイレクトに1バイトのデータを出力し、
PIC側ではパラレルスレーブポートの割り込みルーチン先頭にブレークポイントを設けて確認した
ところ、パラレルスレーブポート割り込みも正常にかかり、かつ正常に受け渡しが完了できました。