途中経過
現在、このウォッチドックが再送中にかかってしまう問題で、bridge_master_oper()関数内の永久ループ内のステートのやり方をswitch文からif文に書き換えて動作差してみたが、症状が全く変わらなかった。
現在こちらのURLでプログラムをデバッグ中
https://svn.sourceforge.jp/svnroot/cc1101driver/branches/C1101_source_ATmega88_bridge_ver0x16/
途中経過
u8 cc1101_tx(u8 * data , u8 length,u8 th,u8 freq_mode) { ---(中略)----------------------------------- while(!(PINC&0x04)); //data send start while(PINC&0x04); //data send end ----(中略)------------------------------------ } //この箇所でタイムアウトが起きていることを確認している。
この箇所でタイムアウトが起きているのですが、”while(!(PINC&0x04)); //data send start”このプログラムの意味はCC1101のGIOAピンからデータが電波で送信を開始するとHIGHになり、このループを抜けるという意味なのですが、ここで停止して8秒間のウォッチドックタイムアウトが 発生するとなると、その信号が常にLOWの状態になってしまっているような気がしています。
試しに、このプログラムをコメントアウトしてみたら、電波送信ができなくなったうえ、7ブロック以降もループが終わらなくなる症状が出ました。
現在、ワイヤレス中継機ユニットVer0x16において、パケット7個を1ブロックとして、最大7ブロックの再送を行うプログラムで、最後の7ブロックの回数まで送信数までに必ずウォッチドックがかかってしまう現象が発生しています。
(症状一覧)
・3ブロックまでは再送信号を出力しているが、4ブロック目で必ずウォッチドックがかかり、main関数からスタートするのをICEデバッガで確認。
・ウォッチドック設定は8秒間に設定している。タイムアウトする際にデバッガがストップをかけると
このプログラムは現在、
https://svn.sourceforge.jp/svnroot/cc1101driver/trunk/CC1101_source_ATmega88_bridge/
ここに設置しております。
どなたか、解決方法などご存じの方いらっしゃいましたが、是非ご教授頂きますよう、お願い致します。