割り込み使用すると,ハングアップすることがあります.
具体的にはポインタや配列を使うと,ほぼ確実に誤動作します.
この問題は,トラ技BIOSが,ユーザ定義割り込み処理ルーチンを呼び出す際に,DEレジスタを保存していないため起こります.
この問題を回避するには,割り込み処理ルーチンの先頭と最後で,push de と pop deのコードを埋め込んでください.具体的には次のようにします.
void intsrv_tim(void) {
__asm("push de ");
unsigned char delta;
delta = (dac_in & 0x3f);
if(sigma >= 0x40) delta |= 0xc0;
sigma = delta;
if(sigma >= 0x40) P1.3 = 1;
else P1.3 = 0;
if(sigma >= 0x40) P1.4 = 1;
else P1.4 = 0;
・・・・・
・・・・・
・・・・・
・・・・・
// タイマ割り込みフラグをクリア
IF0H.6 = 0;
if(count == 0x10){
count = 0;
dac_in = sintable[dac_pos];
dac_pos = freq;
}
__asm("pop de ");
}
2009/04/24 公開
Copyright (C) 2008. Tokushu Denshi Kairo Inc. All Rights Reserved.
Copyright (C) 2008. CQ Publishing Co., Ltd. All Rights Reserved.