初めて投稿致します。村井と申します。
IRQ0割り込みを使用してA/D変換データを受信するプログラムを作
成し、動作させてみますとなにやら怪しげな動作をしていました。
何かのご参考になればと思い投稿します。
概要
IRQ0がLOWとなると、SCI0をクロック同期モードにし、SCI0送信
データエンプティ割り込み及び、受信データフル割り込みでDMAを
起動し、コマンド送信、データ受信を行っています。
失敗プログラム
void intad(void)
{
unsigned char i,command;
unsigned char data[AD_BYTE_VALUE],ch=adbuff.ch ;
set_ccr(0) ;/* Clear ccr I bit */
outport(CS_PORT,SEL_AD);
command=(READ_COMM | ad_ch_tbl[ch]);/* リード命令発行 */
send_data(&command,1) ; /* リード命令送信 */
txendheck() ;
receive_data(data,number(data)) ; /* 変換データ受信 */
rxendheck() ;
outport(CS_PORT,SEL_NON) ;
以下略
割り込み処理プログラム先頭でCCR Iビットをクリアーしたため
送受信途中で他の割り込みが入り送受信データが化けていたようで
した。
変更方法
割り込みプライオリティーレベルをIRQ0,DMA,SCI0を1に設定し、
SYSCR UE=0にし、割り込みプログラム先頭でCCR UI ビットをクリ
アーする事により、プライオリティーレベル1の割り込み以外受け
付けないようにしました。
2日程はまってしまいました。
-----------------------------------
村井利広
muratosh@xxxxxxxxxxxxxxxxxx
-----------------------------------