• 検索結果がありません。

Microsoft PowerPoint - dsp12_2006.ppt

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - dsp12_2006.ppt"

Copied!
18
0
0

読み込み中.... (全文を見る)

全文

(1)

2007/01/25

12回 信号処理演習

割り込み処理プログラミング

教官:小澤 助教授

(2)

本日の予定

ポーリングと割り込み

割り込み処理の仕組み

割り込み処理による

アナログループバックの作成

ボイスチェンジャーの作成

(3)

ポーリング

(Polling)

ある監視対象 X (レジスタや変数など) の値が変化したら教えてほしい 例: 電話がかかってきたら(呼び出しの電波が届いたら)教えてほしい

目的

(1) X の値が期待する値になったかどうか調べる (2) もし期待する値でないならば (1) に戻る

X の値が期待する値になるまで,一定の判断ルーチンを

繰り返し実行する処理のこと

期待値になるまでの間,

CPU は他の処理ができない

while ( X != 10 ) ;

(4)

割り込み

(Interrupt)

ある監視対象 X (レジスタや変数など) の値が変化したら教えてほしい 例: 電話がかかってきたら(呼び出しの電波が届いたら)教えてほしい

目的

(1) 別の単純な回路 A に X を監視させ,CPU には他の処理をさせておく (2) 回路 A は X の値に変化があると,CPU に通知する(割り込み信号を送る) (3) 割り込み信号を受け取った CPU は,それまで実行していた処理を中断し, 割り込みサービスルーチン (ISR) と呼ばれる関数を実行する

(5)

ポーリングによる

ALB

(第11回のプログラム)

through_polling.c

void main() {

while (1) /* Endless loop */

{

xn = McBSP0ReadRdy(); /* input */

yn = xn & 0xFFFE; /* Remove LSB of data */

McBSP0Write(yn); /* output */ } } DSK_polling.c short McBSP0ReadRdy() {

while ( (*(v_short *)McBSP0_SPCR & 0x2) != 0x2);

return (*(v_short *)McBSP0_DRR); }

データが受信されるまで待ち続ける

(6)

ポーリングの問題点

1つの監視対象の値を調べ続けるので,

他の仕事を

することができない

例えば...

メールの作成中に電話を受けることができない

ファイルのダウンロード中にユーザがそれを停止できない

CPU パワーを無駄に消費

電力を無駄に消費

“監視” のような単純な仕事は,CPU のような高機能な IC

ではなく,もっと単純で低消費電力の

IC に任せるべき

(7)

割り込み処理による

ALB

プロジェクト

ALB_Intr

を新規作成

以下のソースファイル群を

¥ti¥myprojects¥ALB_Intr に

保存せよ

DSK_polling.c:初期化,アナログ入出力用関数 DSK_intr.c:割り込み処理用関数 through_LED_int.c:main関数 vec_Reset_INT4_14.asm:割り込みベクタテーブルを定義 c6x11dsk.h(DSKヘッダファイル) link.cmd (Helloプロジェクトのものと同じ)

<参考>教科書

「3.3 割り込みを使うプログラミング」 p.46 「B.1.7 割り込み」 p.273

(8)

プロジェクト

ALB_Intr

プロジェクトには以下のファイルを登録すること

C ソースファイル

through_LED_int.c

割り込みベクタテーブル

vec_Reset_INT4_14.asm C6711 用ライブラリファイル C:¥ti¥c6000¥cgtools¥lib¥rts6200.lib リンカコマンドファイル link.cmd

コンパイル&(エラー修正)&ロード&実行せよ

(9)

動作確認

同時に複数の処理が実行されていることを確認せよ

処理

1:マイクから入力した音声が,スピーカから出力される

処理

2:ボード上の LED が点滅する

例えば,携帯電話で通話中にメール受信を通知するよ

うなイメージ

(10)

割り込みの流れ

(p.274, 図B.10)

割り込み要因を 割り込み 要因が発生 ユーザが許可を 与える必要がある

(11)

割り込み要因

(p.276, 表B.5)

McBSP1 受信割り込み 0xF McBSP1 送信割り込み 0xE McBSP0 受信割り込み 0xD McBSP0 送信割り込み 0xC 予約 0xB 予約 0xA 予約 0x9 EDMA (0 ~ 15) 割り込み 0x8 外部割込みピン7 0x7 外部割込みピン6 0x6 外部割込みピン5 0x5 外部割込みピン4 0x4 EMIF SDRAM タイマ割り込み 0x3 タイマ1割り込み 0x2 タイマ0割り込み 0x1 ホストポートのホストからの割り込み 0x0 割り込み要因の説明 割り込み要因番号 一定時間毎に発生 音声が入力されると発生

(12)

割り込み要因を

CPU 割り込みに対応づける

タイマ0割り込み

0x1

McBSP0 受信割り込み

0xD

割り込み要因の説明 割り込み要因番号

through_LED_int.c内

void main()

{

:

INT4

INT14

割り込み要因を CPU 割り込みに対応付け

CPU 割り込み

(13)

ALB_Intr の main 関数

void main() {

InitDSK(cach_bk3); /* Initialize DSK, Cashe size: 48 KByte */ IntrClearFR(); /* Clear all pending interrupts */ TimerSetStart(tm_ch0, 37500); /* period = 1 ms */ count = 0;

tmp = 0x07000000;

*(u_v_int *)IO_PORT = tmp; /* trun off LEDs */

IntrSetIER_IMUX(0xD, 4); /* Assign RINT0 to INT4 and NMIE & IER enable */ IntrSetIER_IMUX(0x1, 14); /* Assign TINT0 to INT14 and NMIE & IER enable */ IntrGEnable(); /* GIE: Global interrupt enable */

while(1) {} /* Endless loop */

}

(14)

割り込み要因が発生すると

割り込みサービスルーチン(

ISR)

が実行される

through_LED_int.c内

// McBSP0 へデータが届くと(INT4),呼び出される関数 interrupt void McBSP0_RX_ISR()

{

xn = McBSP0Read(); /* input */

yn = xn & 0xFFFE; /* Remove LSB of data */

McBSP0Write(yn); /* output */

(15)

割り込み要因が発生すると

through_LED_int.c内

// LEDを点滅させる関数(200msおき) interrupt void Timer0_ISR() { count++; /* count up to 199 */ if (count>=199) { tmp = tmp - 0x01000000; *(u_v_int *)IO_PORT = tmp; count = 0; } }

割り込み INT4, INT14 が発生したときに,どの ISR を呼び出すのか?

その対応関係を定義しているのが

(16)

.sect "vectors"

.ref _c_int00 ; C entry point

.ref _McBSP0_RX_ISR ; Entry point of McBSP0 RX intr. service routine .ref _Timer0_ISR ; Entry point of Timer0 intr. service routine

RESET: ; reset vector: address = 0x00000000 MVKL _c_int00,B0 ; B0: start address of _c_int00

MVKH _c_int00,B0

B B0 ; branch to address pointed by B0 NOP

NOP NOP NOP NOP

.space 0x20*3 ; Reserve 0x60 bytes

INT4: ; INT4 vector: address = 0x00000080 STW A0,*B15--[1] ; push A0

MVKL _McBSP0_RX_ISR,A0 ; A0: start address of _McBSP0_RX_ISR MVKH _McBSP0_RX_ISR,A0

B A0 ; branch to McBSP0 RX intr. service routine

LDW *++B15[1],A0 ; pop A0 NOP

NOP NOP 2

.space 0x20*9 ; Reserve 0x180 bytes

INT14: ; INT14 vector: address = 0x000001C0 STW A0,*B15--[1] ; push A0

MVKL _Timer0_ISR,A0 ; A0: start address of _Timer0_ISR MVKH _Timer0_ISR,A0

(17)

本日の課題

プログラムの理解

AD/DAを行う関数内で信号処理を行わせる

割り込みによるボイスチェンジャープログラムを作成

440Hz の正弦波を掛け合わせてみよ

100Hz の正弦波を掛け合わせてみよ

1000Hz の正弦波を掛け合わせてみよ

(18)

レポート課題

C 言語の Signal 関数について調べ,A4 1枚

にまとめよ.

OS を明記すること.

信号処理テキスト

p.124 図7.1 を他者に説明

するつもりで解説せよ(

A4,1枚)

時間波形の特徴

変換名,変換式

スペクトルの特徴

参照

関連したドキュメント

12,000 円割引 + 500 円割引 = 12,500 インターネットからの 新規お申込みだと 円割引 ※1. 初度登録から

IDLE 、 STOP1 、 STOP2 モードを解除可能な割り込みは、 INTIF を経由し INTIF 内の割り. 込み制御レジスター A で制御され CPU へ通知されます。

Using the special C- mount ring adapter, the lens can be directly attached to a CCD camera, enabling it to be used as a low cost image ob- servation lens and variable focus lens

ユーザ情報を 入力してくだ さい。必要に 応じて複数(2 つ目)のメー ルアドレスが 登録できます。.

※ログイン後最初に表示 される申込メニュー画面 の「ユーザ情報変更」ボタ ンより事前にメールアド レスをご登録いただきま

料金算定期間 前回検針計量日 ~ 9月4日 基本料金 前回検針計量日 ~ 9月4日 電力量料金 前回検針計量日 0:00 ~ 9月4日

申込共通① 申込共通② 申込共通③ 申込共通④ 申込完了

(7)