XMEGA-A4(6)
2010 年 4 月 18 日
やっと本題。
内蔵発振器32MHzで動いてる状態で
ボーレートの設定値を計算すると
10進数で51。
とりあえず、送信レジスタに値を突っ込むだけのコードで実験。
一応、書いていいときはステータスを見て確認。
[code lang=”cpp”]
while(1)
{
if( USARTE0.STATUS & 0x20 )
USARTE0.DATA = 0x41;
};
[/code]
普通、こんなもんでも動くよね。
でも、化ける(爆
どうにも化ける。
イロイロやって、USARTのサンプルプログラム(AVR1307.zip)を参考にして
クロック設定からやり直し。
サンプルどおり内蔵2MHzで9600bpsを設定すると・・・
化けない。
うーん。
32MHzに戻して、もう一度考える。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
まさかね。
[code lang=”cpp”]
while(1)
{
while( !(USARTE0.STATUS & 0x20) );
USARTE0.DATA = 0x41;
};
[/code]
まあ、確かに・・・
こっちの書き方なら、その場でフラグ待ちしてその直後で書いてるから
次にフラグ見るときは、間違いなく動いてるのかも。
フラグの立つタイミングと送信レジスタの中身がなくなるタイミングが
重なって、まだ最後の数ビット残ってるところに書き込んでた・・・・のか?
この2つのコードにそれほど違いがあるようには思えない。
もしくは、最適化で何か起きてるのかも。
まあいいや。
そんな感じで。
解決。
とりあえず、ここまで出来たらあとは
LCD側の配線をしてしまわねば。