« AVRのためのPIC再入門 | トップページ | AVRのためのPIC再入門 »

2006年7月17日 (月)

AVRのためのPIC再入門

PICでAVRライタを作る2

AVRのISPはSPIというシリアル通信でプログラムやデータを
読み書きするらしい。正直、SPIというものを今まで知ら
なかった。ので、まずSPIそのものを理解するところから始める。

AVRのドキュメントやトラ技の記事やそのサンプルコードを読む。
どうやら、2つのデバイスの8ビットレジスタを繋げて、8回分
ローテーションすると、互いのレジスタの内容が入れ替わる。
つまり、1バイト分の送受信をいっぺんに行ってしまう方式
らしい。なるほど、なんか凄い。

実際にPIC上での実装を考える。当然、12F683はSPIモジュール
を持っていないので、すぺてソフトウェアで行う必要がある。
頭の中で、GPIOの操作やSCKの周期をどうするかを悩む。

ここまで、自分としては結構な作業量なのだが、
実際にコードにしてみると、

                                                                                        

transferByteSpi
        movlw   8
        movwf   SpiTransBit
        clrf    TMR2
        bcf     PIR1, TMR2IF
        bsf     T2CON, TMR2ON ;タイマ2スタート

tb_lp   bcf     STATUS, C 
        rlf     SpiArg, F
        btfsc   STATUS, C ;SpiArg MSB を MOSI に出力
        goto    $ + 3
        bcf     GPIO, MOSI_PORT
        goto    $ + 2
        bsf     GPIO, MOSI_PORT

        btfss   PIR1, TMR2IF ;ディレイ用タイマ2フラグチェック
        goto    $ - 1
        bcf     PIR1, TMR2IF

        btfsc  GPIO, MISO_PORT ;MISO からの入力を SpiArg LSB にセット
        incf    SpiArg, F
        bsf     GPIO, SCK_PORT ;SCK 立ち上げ
 
        btfss   PIR1, TMR2IF ;ディレイ用タイマ2フラグチェック
        goto    $ - 1
        bcf     PIR1, TMR2IF
        bcf     GPIO, SCK_PORT ;SCK 立ち下げ

        decfsz  SpiTransBit, F ;8ビット分繰り返す
        goto    tb_lp

        bcf     T2CON, TMR2ON ;タイマ2ストップ 
        return 

                                                                                        

たったこんだけ。

取り敢えず、PC側とAVR側のインターフェイスが出来たんで、
次はPC-AVRISP間のプロトコルの話し方を考える。

|

« AVRのためのPIC再入門 | トップページ | AVRのためのPIC再入門 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/180469/10983276

この記事へのトラックバック一覧です: AVRのためのPIC再入門:

« AVRのためのPIC再入門 | トップページ | AVRのためのPIC再入門 »