/********************************************************** 「32kHzサンプリングのリニアPCM音声データ」のPWMによる出力 32kHzのPWM周波数をもちいる カットオフ=16kHzのアナログローパスフィルタが必要 時間割り込みによって32KHzにてPWM信号を出力 タイマRC TRCIOB を用いる クロックは20MHzに設定する コンペアマッチAでカウンタクリア TCNT=0; TRCIOB立ち上がり TCNT=GRB: TRCIOB立ち下がり TCNT=GRA: TCNT=0 20000000/32000=625 → 20MHzクロック625サンプルで32.00KHzサンプル音 625クロック中最初の200サンプルのHを置く これは割り込み処理のための時間稼ぎ 8ビットの音声データは0から255の値を持つので、 音声データ 0 200のH区間+425のL区間 音声データ255 455のH区間+170のL区間 となる 割り込み周波数は32kHzになる **********************************************************/ /* R8C/M12Aマイコンのピンを、下記のように結線します。 ポート18(P1_2) スピーカ ポート20(P1_0) LED+ */ /*======================================*/ /* インクルード */ /*======================================*/ #include "sfr_r8m12a.h" /* R8C/M12A SFRの定義ファイル */ #include "wavsample.h" /*音響信号データの配列*/ /*======================================*/ /* シンボル定義 */ /*======================================*/ #define Padd 200 #define PWMPERIOD 625 /*======================================*/ /* プロトタイプ宣言 */ /*======================================*/ void init( void ); void timer( unsigned long timer_set ); void sounder( unsigned int tone, int time ); /*======================================*/ /* グローバル変数の宣言 */ /*======================================*/ const int numberDatas=sizeof(samplewave)/sizeof(char); volatile int ptr; /************************************************************************/ /* メインプログラム */ /************************************************************************/ void main( void ) { asm("FCLR I"); /* 全体の割り込み禁止 */ init(); /* 初期化 */ asm("FSET I"); /* 全体の割り込み許可 */ while(1) { ptr=0; while (ptr