- ベストアンサー
USBプロトコルでのコーディングについて
M66291のUSBデバイスコントローラの制御プログラムを コーディングしているのですがVbusやステート遷移の割り込みは 発生するのですがGET_DESCRIPTORリクエストがホストから 送られてきた際にコントロール転送ステージ遷移割り込みが 発生するとデータシートに書いてあるのですが発生しません。 この場合、どのようなことが考えられますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 全くCTRTに1が立ちません。 セットされたCTRTは明示的に0をライトしない限りフラグが消えませんので、コード上に表記が見つからなければ、遷移が発生していないか、 フラグを立てることを禁止している状態でしょう。 DVSQとCTSQも確認されていますか? CTSQはポーリングで拾うのは厳しいかもしれませんが、DVSQがきちんとConfiguredステートに遷移していなければ、割り込み発生する可能性は0です。 66291のデータシートをざっと眺めましたが、割と簡易に説明してある感じがしたので、66591のデータシートを眺めてもヒントが得られるんじゃないかな。 デバイスステート遷移、コントロール転送ステージ遷移の各割り込み発生について図解の説明があります。 未確認だったら、見ておいたほうがいいかも。(但しあくまで別デバイスなので妄信は危険) > 割り込み許可レジスタ0(INT_ENABLE0)はすべて1(許可状態)にしています。 力技ですが、余分な不具合を引き起こす危険性が高いので極力避けるほうが賢明かと。 > あと、エッジ割り込み受付とありますが 「割り込みを受け付けるデバイス側」つまり、例えば、同一基板上のCPUなどを指しています。 極性設定レジスタのことではありませんので、流用されているソースが一通り動いているならば、触れなくても問題ないと思います。 DVSQが怪しそうな気が、、、。 一応、USBエニュメレーションのシーケンスに関する理解が必要です。
その他の回答 (1)
- bug_bug
- ベストアンサー率78% (36/46)
遷移させた後、CTRTのフラグが立っているか調べればかなり原因が絞れますが、記述の内容からでは原因の特定は難しいですね。 CTREのセットはもちろんですが、WDST, RDST, CMPL, SERRはそれぞれ許可されていますか?(怪しいのはここかな) CTRE, CTRTのフラグが共に立っているならば、割り込みを受け付けるデバイス側がエッジ割り込み受付になっており、取りこぼしている可能性も。(または前段の割り込みで要因解除忘れとか) コーディングレベルからすると、思いつく要因が多すぎて回答に困っちゃいますが、とりあえず遷移させた後のCTRTフラグの確認が近道だと思います。
補足
少ない記述に対して明快な回答ありがとうございます。 そうなんです。許可フラグがおかしいのかと思い、今はテスト的に 割り込み許可レジスタ0(INT_ENABLE0)はすべて1(許可状態)にしています。 これで割り込みが発生してCTRTに1が立つと思っているのですが 割り込みも発生せず、仕方ないのでポーリング時にCTRTを チェックするようにもしたのですが全くCTRTに1が立ちません。 あと、エッジ割り込み受付とありますが 極性設定レジスタ(POLARITY_CNT)のINTL, INTAのことでしょうか? この辺は前回使用していたソースから引用して そのまま設定しているのであまり意味がわかっておりません。 もし、この辺りに問題ありそうであればもう少し教えていただけないでしょうか? あと、どんなことが考えられますか?
お礼
連絡が遅れてすいませんでした。 やっと、動くようになりその作業に追われておりました。 結局、原因はクロック数の設定が間違っていた為に誤動作していたようです。 失礼いたしました。 なにぶん、組み込み開発が初めてなもので以前、使用していたソースだから設定は大丈夫!と思い込んでいたのが間違いでした。 色々とご教示いただきありがとうございました。 m(__)m