FMチューナからの音声出力をCodec経由でI2Sで受けて、USBスピーカから出力できるようにしました。
![](https://blogimg.goo.ne.jp/user_image/16/f0/aedd5e25b01e82f4e2da791b7a90a9aa.jpg)
USBスピーカへの出力はすでにpcmsender_taskとして用意してあるので、新たにI2S入力から受信したFM音声データをpcmsender_taskに渡すタスク(tuner_task)を作ってやっただけです。
![](https://blogimg.goo.ne.jp/user_image/4e/87/73d32de8e7e923d02bc250e26cd433c3.jpg)
player usbで出力先としてUSBスピーカを選択しておき、fm startコマンドにより、tuner_taskが起動されることでUSBスピーカからの出力ができます。pcmsender_taskは I2Sへの出力もできるので、結果的にI2Sで受けたFM音声データをI2Sへ送り戻すことでヘッドフォンから再生することも可能です。しかしながら、I2S受信も割り込み処理で受けているので、送受ともに割り込みで受けることになります。実際に試してみると、割り込み処理負荷が増えた結果、データのとりこぼしが発生してしまいます。割り込みでFIFOのデータを送受するのではなく、DMAを使ってデータの送受をした方が良さそうです。
また、現在はtuner_taskはplayer_taskの配下にはないので、操作を間違えるとtuner_taskとmp3decoder_taskの両方を走らせることもできてしまいます。player_taskで一元的に管理して、操作性も良くするような改善が必要だと考えています。
![](https://blogimg.goo.ne.jp/user_image/16/f0/aedd5e25b01e82f4e2da791b7a90a9aa.jpg)
USBスピーカへの出力はすでにpcmsender_taskとして用意してあるので、新たにI2S入力から受信したFM音声データをpcmsender_taskに渡すタスク(tuner_task)を作ってやっただけです。
![](https://blogimg.goo.ne.jp/user_image/4e/87/73d32de8e7e923d02bc250e26cd433c3.jpg)
player usbで出力先としてUSBスピーカを選択しておき、fm startコマンドにより、tuner_taskが起動されることでUSBスピーカからの出力ができます。pcmsender_taskは I2Sへの出力もできるので、結果的にI2Sで受けたFM音声データをI2Sへ送り戻すことでヘッドフォンから再生することも可能です。しかしながら、I2S受信も割り込み処理で受けているので、送受ともに割り込みで受けることになります。実際に試してみると、割り込み処理負荷が増えた結果、データのとりこぼしが発生してしまいます。割り込みでFIFOのデータを送受するのではなく、DMAを使ってデータの送受をした方が良さそうです。
また、現在はtuner_taskはplayer_taskの配下にはないので、操作を間違えるとtuner_taskとmp3decoder_taskの両方を走らせることもできてしまいます。player_taskで一元的に管理して、操作性も良くするような改善が必要だと考えています。