2011年1月9日日曜日

LUFA のATmega32u2/8u2用のコンパイルが出来た!

いやあ、実に困った事で、実に簡単な事だった。
USBtiny Mk2のLUFAのソースをコンパイルしてたのだが・・
at90usb82
at90usb162
なら通るが
atmega8u2
atmega32u2
だと通らない。
clock_prescale_set
が通らないといいまくる。
調べた結果なんと・・
avr-gccのconfigの欠落が有った。
参考資料はここ
具体的に書くと・・
avr-gccの在処の私の場合Crosspackなので・・・
/usr/local/CrossPack-AVR-20100115/avr-4/include/avr
の中の、power.hに、これらのMCUの記載が足りてない。
何行目か出ないの、やり方を記載する。

検索で、AT90usb162 を探す。
二カ所出てくるはずだ・・
一カ所には、atmega32u2や8u2の記載も有る。
もう一カ所、膨大に、MCU名が並んでるとこが有るのだが・そこに無いのだ!!!

そのずらーっと並ぶ所に
|| defined(__AVR_ATmega32U2__) \ 

|| defined(__AVR_ATmega8U2__) \ 
これら2種のMCUを追加する。
たぶん何処でもいいが、私は、mega32u4の上と、mega88の上に書き込んだ。

これだけで、LUFAのコンパイルが通るようになった。

簡単だけどね。
UNOのソースは、実は、at90usb82 で書かれてる。
makefileを開いてそこを、atmega8u2に書き換えるとコンパイル出来なかったのだが・・(この二種は、コードは同じなので、それでも書き込めるが・32u2は、コードエリアが大きいので、そのコードでは駄目なのだ。)

実はこれでコンパイルしないと、まずい物も有る。
気持ち悪かったのと、32u2にLUFAのコードが入らなかったのだ。
これで、一回UNOのコードでも何でもコンパイルして、mega32u2に書き込めば。
たしか、DFU用のHEX部分は、8u2 32u2 16u2 at90usb162 at90usb82で共通のはずなので、32u2は、大容量のコードを、DFU出来るようになる。

コンパイルでエラーがでまくった時どうしようかと思ったが、該当コード内で、NCU単位で違うコードは見つからなかった。

思いっきりググッたら、この件が出てきて直したら、コンパイル出来るようになった。

実はavr-gcc/win-gccともに、mega8u2 mega16u2 mega32u2は、サポートしてませんでした・・と言う落ちでした。

usbtiny mk2ネタでやってたのだが・・コンパイルさえ出来ればこっちの物、UNOのシリアルコードとかもコンパイル出来るようになると思う。

もう一個調べなきゃいけない事がある・・それは、現状の各プロジェクトは、ブートローダーごと一体になったHEXを書いてしまうので、ブートローダー抜きにする方法を調べないといけないと思う。

これでmega32u2が、色々使えるようになるはずだ。
つまりmega32u2の teensyなんかが作れる事になる!
LUFAのプロジェクトで、ADCを使わない物なら、移植出来るはずだ。(makefileのターゲットMCU書き換えればいいだけのはず)

この件相当困っていたのだが・・解決したみたいだ。

0 件のコメント:

コメントを投稿