carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

USB-Functionの割り込み

動作しなかったUSB-Functionの割り込みですが、やっと動作するようになりました。
ポイントを書き留めておきます。

1.USB-Function機能を利用するためには、MPUの動作モードを16bitバス幅にします。
 具体的には、ベクタテーブル0x000FFFF8Hに0x05000000を配置しておきます。
 ※直接レジスタのMODRは書き換えできませんので注意。
 ★詳しくは、ハードウェアマニュアル
  ・3.9 動作モード P61
  ・3.10.3 リセットシーケンス P68

2.外部バスインタフェースの設定を行う。
 USB-Functionや、OSDC機能・USB-HOST機能は、外部バスに接続されているので、利用できるように、
 CSの設定を行う。ハードウェマニュアルのP669に、推奨設定があるのでそのまま利用する。

3.割り込みコントローラと、USBの外部割込みの設定を行う。
 USB-Functionは、外部割込みの4番目なので、割り込みの許可と、割り込みレベルを31以外にする。
 注意すべきは、割り込みのレベル指定が、ドキュメントには無いが、「立ち上がりエッジ」で要求あり
 ★ハードウェアマニュアル
  ・11.2 割り込みコントローラのレジスタ P274
  ・12.1 外部割込み/NMI 制御部の概要 P284

4.USBのENDPOINTバッファの設定を行う。
FIFO2のバッファを利用して、20BYTEの設定データを書き込み、CONT1.CFGEN=1に設定後、ST3.CFENDになるまで待ちます。
 ★ハードウェアマニュアル
  ・18.3.5 ENDPOINT BUFFER の設定 P441

5.ENDPOINTごとのACK/NACK/STALL要因マスクビットを解除する。
 具体的には、CONT7,8,9が0でマスクされているので、許可するために必要なbitを1にします。
 ★ハードウェアマニュアル
  ・18.3.6 ソフトウェア制御例( 暫定) P442

とりあえず、割り込みが入るようになったので、後はなんとなくできそうな予感。
詳しくは、そのうち雑誌で紹介されるのでしょうが、せっかちな方のお役に立てれば・・・
今のところサンプルはありません。

つまずいたのは、1.のMPU動作モード。結構悩んだ。しかし、OSDCを動かそうとしている方(http://d.hatena.ne.jp/pcm1723/20080329/1206806725 )の事例を見て気付きました。