一応タイトル通りに微妙に実装は出来ましたが、正直訳がわかっていないところが多すぎます。細かいところはちょっと置いておいて、動かすことに専念しましょう。以下に現状のコードを置きます。やりながらの記事執筆ですので、間違いもあるでしょうが、それは回を重ねるごとに直っていくことでしょう。やるぞひとまず、直感的にコードを書き書きしていきます。ペリフェラルの初期化コード。無効化した後は一定時間置いてほしいとのことなので、ごく適当ですが無駄ループで時間稼ぎをしています。事実これで動いてるっぽいのでいいでしょう。あとは忘れずに割り込みの有効化。コメントにもある通り、優先度は最大にしました。「リセット以外に割り込み要因あるだろ!」って思う方もいると思いますが、デバイスはリセット前にはいかなる要求にも応答してはならない(リセット要求以外)とされているので、現状この設定で合っているものと思われます。これ以外の割り込みは、リセット割り込みが入った後の割り込みハンドラで行うつもりです。自体もそれで動かしています。この関数を呼ぶ必要がありますね。領域確保等の関数を実装しておく必要があります。対応するかんたんな関数です。非常にミニマルであんまり安全ではない実装ですが、とりあえずこれで行きましょう。ためのスタックポインタです。別にスタックのような使い方をしているわけではないのですが、感覚的にそう命名しました。分だけずらすだけです。アクセスしか出来ません。アクセス等をすることが出来ず、非常に不便なわけです。とでデータのやり取りを行う関数をまたもや雑に実装してみました。奇数だったら、インクリメントして偶数に丸めます。これで希望のデータをコピーできます。この操作をしてませんね。やっておけば良かった。後に修正する予定とします。バッファテーブルなるものを置いて、そこで送受信のためのデータを書き込みます。することで、アプリケーションはペリフェラルにどのデータをどの長さで通信するかを通知することができるのです。USB_EPRX_STAT);}操作は割と単純。送信/受信のどれかに対応するバッファテーブルに対してデータの書き込みを行い、そうしてエンドポイントレジスタのステータスを書き換えるだけ。取ることによって所望の値に設定することが可能になっています。*)&この奇妙な書き方が目につくと思います。実はよくわかりません。分からないのですが、こう書かないとデータの書き込みが反映されないのです。なんだけどね...でもこれ、非常に気持ち悪いですよね。今度になってしまいますが、この謎をアセンブリレベルで解読していきたいと思います。割り込み関数リセット割り込みから始まる割り込み関数です。}}長いですが、最初のリセット割り込みで各種パラメータ等を初期化しています。割り込み(正しいデータ転送割り込み)が本体です。ループを形成しておくのが流儀なようです。していますが、許して。現状これで動いているのでいいでしょ、と思ってください。一部この記事に記載していない部分がありますのでぜひ一度ご覧ください。ペリフェラルで値を出力することとしています。ターミナルでシリアル通信結果をウォッチしました。パケットが何度も送出されているからです。アドレス値自体はどうやら受け取れているっぽいので、多分ステータスステージの0バイトデータ送信がうまく行ってない説ありますねこりゃ。次回までになんとかします。超簡易的に作ってみようと思った記事です。記事を読む「超低消費電力」のMSP430マイコンを弄ってみた(3)さて、低消費電力の話に移りましょうか。実際あまり良く分かっていないのですが、大体合ってそうなので(笑)、記事にしてしまいます。マイコンをもっと知りたい!ということでこのシリーズを立ち上げます。コードにアセンブリコードに誤りがありました。アセンブリペリフェラルはもう説明することがないので、続いてはアセンブリをやってみたいと思います。