DDT誌のLattice基板で試してたAVR_Coreってあれから…

去年の今頃、私は何をしてたか…確か主人の引き合いで全く関係ない職種(今も兼業で
してるけど)から2Xさいでこの世界に首突っ込んで三相交流とかまだ存在すら知らなくて
"if(hoge=0)"とかお約束のボケかましててUSBaspすげぇぇぇぇぇぇぇぇとかいちいち感心
してたころかしらね・・・
でもまったくの未経験な私でもしっかり飯食わしてくれてるこの業界は素晴らしいとおもうよ!?
でも来年くらいには私はまた違う場所で違う仕事やってるんだろなーともおもう・・・。




少し前にAVR_coreの記事についてコメントいただいたので思い出したようにやりかけて
たのを引っ張り出していじっていました。
以前AVR_Coreで組んだプログラムはごくごく簡単な処理だったのでちゃんと動いている
ように見えましたが、少し複雑な処理(重たい処理)をしだすとすぐコケることが分かり安定
させるための方法を5月以降ず〜〜〜〜〜〜〜っと探っていました。

現時点で分かった致命的なところは、複数の割り込みがかかるような、たとえば送信受信の
リングバッファ組んだシリアルで大量のデータを吐かせながらタイマ割り込み動かしてると
確実に不安定になるという問題で(実機は全く問題なし)、ねむいさんはこれを秘孔と呼んで
現状ではこの状況におちいるのを避けるようにプログラムを組むように心がけてます。

次にAVR_Core本体のコードなのですが…pm_fetch_dec.vhd内のフラグの処理にバグが
あったらしく、opencoresにある最新のものでは修正が入ってましたのでこちらの修正を移植
してます。これやっとかないと割り込みとかなにもかけなくても単にループ回してるだけで
10分に2~3回くらいは"ひでぶ"してたもんで・・・



とりあえず上記2点の考慮で今のところは安定かな?といったものがやっとこできてきたので,
LPC2388基板やSTM32基板でやってたことをAVR_Core上で再現してみました。
ChanさんがぷちFatFsなるものを公開されていたのでこれもついでに盛り込んでます。

以前はROM:8192Byte,RAM:4096Byteとってましたが(ねむいさんの力量では)こんだけ入れると
コードが入りきりません。仕方ないもんでRAMを2kByteに削りROMを16kByteに増強してます。
んで、RAM削ると今度はmega103のスタックの定義が合わなくなってまたべつの問題ががg
・・・・・・しかし、よくよく調べてみるとmakefile内でスタックのアドレスを明示してやるだけで
よいことが分かりWinAVR付属のmega103用のリンカスクリプトは一切いじらずにやり過ごす
ことができました。

プログラムの流れは下図のとおり。エレキジャックでおまけに付いてたLM73のルーチンも
ついでなんで突っ込んどきました。
うー
ずっとソフトウエアi2c使ってきたのはもとはと言えばAVR_Coreでi2cデバイス動かしたかった
からと言うのもあります…。決して内蔵レj(ry
VHDLはいまだに"--"くらいしかまともに出来ないけどLatticeの基板でここまで出来たぞー!!
と言うわけで今日のおソース…試される場合は自己責任で…
うー
そうだね基板使い回しだね






きょうのおまけ
うー
ATMEGA32で上のプログラムの再現・・・そうだね使い回しだね
ソフトi2cとmega32内蔵のi2cいずれの方法でもアクセスできるようにしてます。
あとAVR_Coreの予習のためにソフトspi使っています・・・。
こちらに

もう一つおまけ
うー
先日の日記で公開したLPC2388のプログラムの中にLM73のルーチンも突っ込んどきました。
あとRTCの処理に起因するバグ(6月34日とか表示される)と環境によってコンパイル・エラー
になる場所(ST7032i.c & rtc.c内の部分)も修正してますので、真似して試される場合は
前回公開したのはつかわないでなるべくこっちを使ってほしいんだ

Go to top of page