これまで紹介した初期設定の下で、Get_Descriptor ( device ) を受信するまでの高位割り込み処理について説明します。 <PICデバイス=18F2550> ターゲットは秋月電子通商さんの USBマイコンボード 完成品(PIC18F2550) +α の RRP2550-0 です。
あくまで、最初の SETUP トランザクション Get_Descriptor ( device ) を受信するまでの処理で、連続して開始される IN トランザクションに至らない状態であることにご注意下さい。
以下に実施例のアセンブラ・ソースを紹介しますが、試行錯誤を重ねて書き進め、デバッグ目的で不要なコードが点在しています。 あくまでも参考程度にご利用下さい。
USBハブからの RESET 信号を受けた際には、割り込みフラグをクリアし、BDステータスレジスタ用に準備する設定値を RESET 直後の値に設定します。 ( 下図のラベル inth に始まる処理 )
転送完了割り込みを受けた際には、最初に USTAT をコピー(退避)して割り込みフラグをクリアします。 ( 上図のラベル inth10 に始まる処理 ) 割り込み処理開始時点で既に複数の割り込みが発生している場合には手順違いが処理抜けに繋がる重要な手順です。 その後、BDステータスを読み出し、受信バッファのデータをコピー(退避)します。 上図ではデバックの為、他に幾つかのデータを間接アドレスポインター POSTINC1 に転送して、履歴を取っています。
上図で RCALL ihuoic の直後にブレークポイントを設定するなどして、受信データを確認すると以下を受信しているはずです。
BDステータス = 34 ( bit2~bit5 がSETUPを示す)
受信バッファ = 80 06 00 01 00 00 40 00
2byte目 06 は Get_Descriptor()
4byte目 01 は 標準device
7byte目 40 は データ・ステージのbyte数
下図は、割り込み処理を抜ける部分です。 割り込み処理中に他の割り込みが発生していないか確認し(必要に応じて処理を済ませ)割り込みフラグ USBIF をクリアして割り込み処理を終わります。
下図は、参考までに私が設定しているシンボルです。 まだデバック用のシンボルが多い状態ですから、説明は省きます。
USB関連記事のインデックスは右記事の末尾にあります。→ USB CDC
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
あくまで、最初の SETUP トランザクション Get_Descriptor ( device ) を受信するまでの処理で、連続して開始される IN トランザクションに至らない状態であることにご注意下さい。
以下に実施例のアセンブラ・ソースを紹介しますが、試行錯誤を重ねて書き進め、デバッグ目的で不要なコードが点在しています。 あくまでも参考程度にご利用下さい。
USBハブからの RESET 信号を受けた際には、割り込みフラグをクリアし、BDステータスレジスタ用に準備する設定値を RESET 直後の値に設定します。 ( 下図のラベル inth に始まる処理 )
転送完了割り込みを受けた際には、最初に USTAT をコピー(退避)して割り込みフラグをクリアします。 ( 上図のラベル inth10 に始まる処理 ) 割り込み処理開始時点で既に複数の割り込みが発生している場合には手順違いが処理抜けに繋がる重要な手順です。 その後、BDステータスを読み出し、受信バッファのデータをコピー(退避)します。 上図ではデバックの為、他に幾つかのデータを間接アドレスポインター POSTINC1 に転送して、履歴を取っています。
上図で RCALL ihuoic の直後にブレークポイントを設定するなどして、受信データを確認すると以下を受信しているはずです。
BDステータス = 34 ( bit2~bit5 がSETUPを示す)
受信バッファ = 80 06 00 01 00 00 40 00
2byte目 06 は Get_Descriptor()
4byte目 01 は 標準device
7byte目 40 は データ・ステージのbyte数
下図は、割り込み処理を抜ける部分です。 割り込み処理中に他の割り込みが発生していないか確認し(必要に応じて処理を済ませ)割り込みフラグ USBIF をクリアして割り込み処理を終わります。
下図は、参考までに私が設定しているシンボルです。 まだデバック用のシンボルが多い状態ですから、説明は省きます。
USB関連記事のインデックスは右記事の末尾にあります。→ USB CDC
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。