前回に続いてLPC2388のSSPにW-SIMのPCM信号をつなげてみる実験です。今回は、実際の動作の様子。
まずはW-SIMを音声通話用に初期化するATコマンド列を投入してやります。そして、着呼を入れてやるとRINGメッセージが表示されるので、AT@CALLEDを返します。すると発呼側では呼出音が聞こえます。着信側では続いてATAコマンドで応答してやります。
これで通話状態になって、W-SIMからはPCM信号が流れてきます。pcm startというコマンドでPWM1とSSP1を初期化してやると、SSP1から送信された音声データを聞くことができました。
この例では、33クロック目でPCMSYNC信号の立ち上がりを検出し、CR0にキャプチャされています。MR5を同じ33に設定し、MR6を34にすることで正しく音声データが送信できることが確認できました。MR5を32とか34にすると音が歪んでしまいます。
最後にW-SIMにATHコマンドを投入して呼を切断しています。
こうして、PWMを使って同期信号を細工してやることで、LPC2388のSSPでもW-SIMのPCM信号を送信できることがわかりました。ところが、しばらく通話状態にしていると、突然無音状態になってしまうという症状が発生してしまいました。調べてみると、PWM1CR0にキャプチャされるPCMSYNCの立ち上がり位置が変化しています。基本的にはPCMSYNCは48 PCMCLK周期なのですが、時々同期位置が変化することがあるようです。そこでデータ送信をする割り込み処理のタイミングでCR0が変化したことを検出して、MR5とMR6を再設定してやる処理を追加して問題を回避しています。ときたまノイズが入ることになってしまうのですが、頻度はそれほど多くないのでそれほど気になりません。
データの送受信はMR5が一致したタイミングで割り込みを発生させ、その割り込み処理の中でおこなっています。pcm_syncが割り込みの回数、そしてpcm_xmitとpcm_recvがそれぞれ送信、受信の回数です。受信はFIFOにデータが入った時にだけおこなっているわけですが、どういうわけかpcm_syncの回数よりも少なくなってしまっています。謎です。
データの受信処理では、受信したμ-Lawデータを10ビットの線形PCMに変換して、DAコンバータに出力しています。しかし、今のところDAにアンプをつなげていないので、受信音の確認はできていません。
まずはW-SIMを音声通話用に初期化するATコマンド列を投入してやります。そして、着呼を入れてやるとRINGメッセージが表示されるので、AT@CALLEDを返します。すると発呼側では呼出音が聞こえます。着信側では続いてATAコマンドで応答してやります。
これで通話状態になって、W-SIMからはPCM信号が流れてきます。pcm startというコマンドでPWM1とSSP1を初期化してやると、SSP1から送信された音声データを聞くことができました。
この例では、33クロック目でPCMSYNC信号の立ち上がりを検出し、CR0にキャプチャされています。MR5を同じ33に設定し、MR6を34にすることで正しく音声データが送信できることが確認できました。MR5を32とか34にすると音が歪んでしまいます。
最後にW-SIMにATHコマンドを投入して呼を切断しています。
こうして、PWMを使って同期信号を細工してやることで、LPC2388のSSPでもW-SIMのPCM信号を送信できることがわかりました。ところが、しばらく通話状態にしていると、突然無音状態になってしまうという症状が発生してしまいました。調べてみると、PWM1CR0にキャプチャされるPCMSYNCの立ち上がり位置が変化しています。基本的にはPCMSYNCは48 PCMCLK周期なのですが、時々同期位置が変化することがあるようです。そこでデータ送信をする割り込み処理のタイミングでCR0が変化したことを検出して、MR5とMR6を再設定してやる処理を追加して問題を回避しています。ときたまノイズが入ることになってしまうのですが、頻度はそれほど多くないのでそれほど気になりません。
データの送受信はMR5が一致したタイミングで割り込みを発生させ、その割り込み処理の中でおこなっています。pcm_syncが割り込みの回数、そしてpcm_xmitとpcm_recvがそれぞれ送信、受信の回数です。受信はFIFOにデータが入った時にだけおこなっているわけですが、どういうわけかpcm_syncの回数よりも少なくなってしまっています。謎です。
データの受信処理では、受信したμ-Lawデータを10ビットの線形PCMに変換して、DAコンバータに出力しています。しかし、今のところDAにアンプをつなげていないので、受信音の確認はできていません。