ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    ホームページ    使用可能タグ一覧

No.2660

ソフトから割込み要求
投稿者---chu-(2004/09/09 13:21:45)


環境: Win98, HIM(Hitachi Integration Manager), SH7047

SH2用の組込みプログラムをしています。

・A/D変換割込み関数内で、呼ばれた回数を0〜179の間でカウントし、
 それが90または180になったとき、その割込みが終わった瞬間にある関数を実行したい。

やりたいことをプログラムで表すと以下のようなイメージです。
--
int pos = 0;

int main(void)
{
    while ( TRUE ) {
        /*処理*/
    }
    return 0;
}

/* A/D変換割込み, 優先順位:高 */
#pragma interrupt(ADC_Inter)
void ADC_Inter(void)
{
    pos++;
    if ( pos >= 180 )
        pos = 0;
    /*処理*/
    if ( pos == 0 || pos == 90 ) {
        割込み要求(Hoge_Inter, 中);     /* こんなことができたらなぁ */
/*      Hoge_Inter();                   /* これではダメ                        */
                                        /* Hoge_Inter()処理中もA/D変換割込みを */
                                        /* 受け付けできる必要があるため        */
    }
}

/* ソフトから割込み要求, 優先順位:中 */
#pragma interrupt(Hoge_Inter)
void Hoge_Inter(void)
{
    /*処理*/
}
--
これを実現するにはどうすればよいでしょうか。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ソフトから割込み要求 2661 pi-ta 2004/09/09 14:12:17
<子記事> Re:ソフトから割込み要求 2662 あかま 2004/09/09 14:15:43
<子記事> Re:ソフトから割込み要求 2664 tetrapod 2004/09/09 14:30:36
<子記事> Re:ソフトから割込み要求 2665 chu- 2004/09/09 15:07:57


No.2661

Re:ソフトから割込み要求
投稿者---pi-ta(2004/09/09 14:12:17)


>・A/D変換割込み関数内で、呼ばれた回数を0〜179の間でカウントし、
> それが90または180になったとき、その割込みが終わった瞬間にある関数を実行したい。

普通に、関数を実行したいカウントになったときにフラグをセットして
割り込み処理を終わり、メインループでそのフラグをチェックし、
セットされていれば関数を実行するというのではだめなのですか?

フラグのセットから関数の実行まで少しタイムラグが発生しますが。



この投稿にコメントする

削除パスワード

No.2662

Re:ソフトから割込み要求
投稿者---あかま(2004/09/09 14:15:43)


signal関数は使えませんか?
割り込みが起きたときに特定の処理をさせる関数です(たぶん。使ったことない)。


この投稿にコメントする

削除パスワード

No.2663

Re:ソフトから割込み要求
投稿者---あかま(2004/09/09 14:25:35)


あ、ADC_Interに入ったらすぐにHoge_Inter割り込みを発生させては?
そうすればADC_Inter後にHoge_Interに入りませんか?
発生させる前に、他の割り込みが来ちゃうかもしれませんが。


この投稿にコメントする

削除パスワード

No.2664

Re:ソフトから割込み要求
投稿者---tetrapod(2004/09/09 14:30:36)


こーいう場合は処理速度(時間)と割り込みの頻度、多重割り込みを認めるかを
考察しておかないとはまります。
Hoge_Intr() にどのくらいの時間を要するのか?
A/D 割り込みはどのくらいの頻度で発生するのか?
が判らないと適切な解は出ないでしょう。

多重に割り込みがかかってよいのであれば EOI 発行さえしておけば問題ないです。

void ADC_Inter() {
ADCSR0.ADF=0; // これ以後、再度 A/D 割り込みを受け付ける
if (..) Hoge_Intr(); // Hoge_Intr は interrupt でなくてOK
}



この投稿にコメントする

削除パスワード

No.2665

Re:ソフトから割込み要求
投稿者---chu-(2004/09/09 15:07:57)


返信ありがとうございます。

To: pi-taさん
> フラグのセットから関数の実行まで少しタイムラグが発生しますが。
そのタイムラグが問題になるので今回は使えない手なのです。

To: あかまさん
> signal関数は使えませんか?
signal関数はこの処理系に存在しませんでした。
> あ、ADC_Interに入ったらすぐにHoge_Inter割り込みを発生させては?
ソフトから割込みを発生させる方法が見つからず悩んでいます。

To: tetrapodさん
> Hoge_Intr() にどのくらいの時間を要するのか?
A/D変換のインターバル時間を超える可能性があります。
> A/D 割り込みはどのくらいの頻度で発生するのか?
最短インターバルで1秒/65Hz*180分解能=85usとなります。
> void ADC_Inter() {
> ADCSR0.ADF=0; // これ以後、再度 A/D 割り込みを受け付ける
> if (..) Hoge_Intr(); // Hoge_Intr は interrupt でなくてOK
> }
ありがとうございます。
これをもとに打合せしてみます。



この投稿にコメントする

削除パスワード

No.2666

Re:ソフトから割込み要求
投稿者---chu-(2004/09/09 17:20:27)


> ADCSR0.ADF=0; // これ以後、再度 A/D 割り込みを受け付ける
関数をリターンするまで再度受け付けることはない。
つまり、多重に割り込むことはありえないと指摘を受けました。
どちらが正しいのか今の私では判断がつかないのでいろいろと調べてみることにします。



この投稿にコメントする

削除パスワード

No.2667

Re:ソフトから割込み要求
投稿者---pi-ta(2004/09/09 18:24:57)


>> ADCSR0.ADF=0; // これ以後、再度 A/D 割り込みを受け付ける
>関数をリターンするまで再度受け付けることはない。
>つまり、多重に割り込むことはありえないと指摘を受けました。

確かに
ADCSR0.ADF=0;
だけでは無理です。

割り込み処理ルーチン内では、ステータスレジスタの割り込みマスク
ビットが、その割り込み要因となった割り込みの優先レベルに設定
されますので、同じ割り込みを多重に受け付けられるようにするには、
割り込みマスクビットの値をその優先レベルよりも下げる必要があります。

ですので、
if (..) {
    ADCSR0.ADF=0;
    set_imask(IMASK);  // ここで割り込みマスクレベルをさげる
    Hoge_Intr();
}
てな、感じでできます。

詳しくは割り込みコントローラ(INTC)の「動作説明」の項を見て下さい。
ただ、同一要因の多重割り込みはデバッグしにくく、処理をミスると
あっという間にハングしますのでくれぐれもご注意を。



この投稿にコメントする

削除パスワード

No.2670

Re:ソフトから割込み要求
投稿者---シャノン(2004/09/09 19:49:13)


組み込みやら割り込みやらは全然わからないんですが、気づいたことをひとつ。

>>> ADCSR0.ADF=0; // これ以後、再度 A/D 割り込みを受け付ける
>>関数をリターンするまで再度受け付けることはない。
>>つまり、多重に割り込むことはありえないと指摘を受けました。
>
>確かに
>ADCSR0.ADF=0;
>だけでは無理です。

pi-ta さんは、
>ADCSR0.ADF=0;
だけでは多重割り込みが発生しないので不十分ですよ、というレスですよね?

俺には、chu- さんの書き込みは、その前の tetrapod さんの書き込み
> 多重に割り込みがかかってよいのであれば〜
に対して、多重割り込みはない、というレスのように読めました。

知識ゼロで、文脈からのみ判断していますので、pi-ta さんのレスが正解でしたら申し訳ありません。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    ホームページ    レンタル掲示板サービス




掲示板提供:Real Integrity