SPDIF
STM32F446RE などに内蔵されている SAI (Serial Audio Interface) モジュールでは、通常の 2 チャネル・ステレオ・オーディオ DAC/ADC とのインターフェースに加えて、 3 ch 以上のマルチ・チャネル構成や、AC97 や SPDIF などのプロトコルに対応しています…
EG プリスケーラ部の CLK_EN 信号と SFT_SEL 信号の波形写真を示します。 まず、CLK_EN の波形です。
EG をディケイの DR = 13、Rof = 0〜3 の範囲に限りハイレートに対応させました。 アタックに関してはハイレートでは EG アキュムレータ部に (パラレルな実現では) バレルシフタが必要になりますが、ディケイについては EG アキュムレータの増分の定数が「1…
PSoC5LP UDB 上にローレート専用の EG アキュムレータ部分も実装して、連続してアタックとディケイを交互に繰り返す回路を作りました。 回路図を下に示します。 (図をクリックすると拡大します)
私の手持ちの USB オーディオ・インターフェース (のひとつ) は、アナログ・ソースを 24 ビットで取り込めることをうたっていますが、マニュアルでは SPDIF 入力からも 24 ビットでチャプチャできるかどうかについては言及されていません。 中を開けて SPDIF…
PSoC5LP Prototyping Kit (CY8CKIT-059) 用の "spdif_dma" のパッケージを公開しました。(→こちら) 上記リンクをクリックすると Yahoo! ボックスが開きます。
spdif_4x / spdif_dma プロジェクトは「4 倍オーバーサンプリングのテスト」とは言いながら、192 kHz サンプリングの S/PDIF 信号を受信できる機器を所有していないので、48 kHz サンプリングでの実験にとどまっていました。 今回 spdif_dma プロジェクトに …
Filter コンポーネントで生成される DFB (Digital Filter Block) プログラムでは 2 チャネル分のフィルタがサポートされています。 これをステレオ 2 チャネルのストリームとして利用し、データ転送の全てを DMA で行なう場合には、DFB データ入出力の合計が…
DFB (Digital Filter Block) コンポーネントへの入出力を全て DMA で行なうプログラム「spdif_dma」ができました。 近日中に公開したいと思います。 トップレベルの回路図を下に示します。
PSoC5LP Prototyping Kit (CY8CKIT-059) 用の "spdif_x4" のパッケージを公開しました。(→こちら) 上記リンクをクリックすると Yahoo! ボックスが開きます。
今回は PC 上のオーディオ録音/再生デバイスを利用したリアルタイム・スペクトラム・アナライザ・ソフトである「WaveSpectra」によるフィルタ特性の測定方法について説明します。 「WaveSpectra」の操作方法自体は、ソフト付属のヘルプにも記載されています…
「spdif_4x」プロジェクトで使う外部回路を下に示します。 使う部品は、「TOSLINK」光送信モジュール、12.288 MHz 水晶振動子、コンデンサ 3 個です。 S/PDIF 信号を発生させるクロックには周波数精度が必要なため、内部クロックでは不十分で、水晶振動子あ…
DFB (Digital Filter Block) のハードウェア DMA / 割り込み要求は「出力データ・レディ」の条件により発生するので、データの流れとは逆向きに後段から前段へとデータ転送要求を出す流れとは一致しません。 「入力データ・エンプティ」のようなハードウェア…
久しぶりに SPDIF_Tx コンポーネントと DMA (と Filter コンポーネント) の話題に戻ります。 PSoC Creator の PSOC5LP 用の、Filter コンポーネントを使ったサンプル・プロジェクトのひとつとして、「Filter_ADC_VDAC01」があります。 そのトップの回路図の…
ISR (Interrupt Service Routine) の作成方法について前回述べたのとは方針を変えることにしました。 インタラプト・コンポーネントの配置により自動生成される C ソース・コードには変更を加えず、ISR は main.c ファイル中で定義して、API の Start() 関数…
DMA コンポーネントに接続したインタラプト・コンポーネントでも DMA 関係の定義を使うので、DMA Wizard で生成された C ソース・コードのうち、#define 文の定義などを集めてヘッダ・ファイル「main.h」として独立させ、ISR (Interrupt Service Routine) 側…
PSoC5LP の DMA コンポーネントでは、カスタマイザで設定可能なのは、DMA リクエスト・ハードウェア入力 (drq) を設けるかどうか、およびその信号の種類の選択、DMA 停止ハードウェア入力 (trq) を設けるかどうかの 2 つのオプションのハードウェア入力に関…
「ダブル・バッファ」は、その特性上、常にどちらかのバッファが「使用中」で、「空き」があるのはもう片側のバッファのみです。 オーディオ・サンプルを生産する側のソフトウェアから見れば、常にバッファ全体の半分の容量しか利用できません。 「ダブル」…
PSoC5LP の DMA で使用する TD (Transaction Descriptor) には、 ソース・アドレスの下位 16 ビット デスティネーション・アドレスの下位 16 ビット 転送バイト数 (Transfer Count) 各種フラグ・ビット (Property) 次の TD 番号 (Next TD) の情報が含まれて…
PSoC5LP では、周辺モジュールは「PHUB」(Peripheral HUB) と称するバス・マトリクスを介して Cortex-M3 コアの AHB と接続されています。 DMA コントローラは PHUB の機能の一部として実現されており、内部レジスタの名称としても「PHUB_〜」という形式で命…
今回は PSoC5LP の SPDIF_Tx コンポーネントと DMA モジュールについて取り上げます。 SPDIF_Tx コンポーネントは UDB (Universal Digital Block) 約 4 個分を費やして実現されており、次のような仕様となっています。 サンプリング周波数の 128 倍のクロッ…
ソフト S/PDIF トランスミッタ・プログラムを PIC32MX 用にも作りました。 DDA によるサイン波発生プログラム部分を含む CPU 負荷率は約 14 % で、 STM32F401: 6 [%] × 84 [MHz] = 5.04 [MHz] STM32F407: 3 [%] × 168 [MHz] = 5.04 [MHz] PIC32MX : 14 [%] ×…
今回はソフトウェアから離れて、普通のディスクリート LED を使って S/PDIF 光送信モジュールを自作する話です。 LED が 6.144 Mbps のレートで点滅するわけで、「6.144 Mbps の LED チカチカ」と呼べるかも知れません。 S/PDIF 光送信モジュールを自作する…
STM32CubeMX の「バグ」と思われる現象について触れたいと思います。 ただし、この状態を解消するのは簡単な操作ですみます。 発生する条件/タイミングについては不明ですが、発生した場合には生成された C コードでフラッシュ・メモリの読み出しのウェイト…
今回は補足的な内容について述べます。 まず、STM32CubeMX には次の開発環境、 IAR EWARM 6.70 Keil/ARM MDK-ARM 4.73 Atollic TrueSTUDIO 4.3.1 用のプロジェクト・ファイルを生成する機能があり、自動生成した C コードを指定した開発環境ですぐコンパイル…
STM32CubeMX で (STM32F4xx 用の) C 初期化コードを生成すると、次のファイル、 stm32f4xx_hal_conf.h stm32f4xx_it.h main.c stm32f4xx_hal_msp.c stm32f4xx_it.c が作られます。 このうち、「.c」ファイルにはユーザが記述を追加できる領域があり、「お約…
今回は STM32CubeMX のプロジェクト・ファイル (.ioc ファイル) を掲載し、ソース・プログラムの本体は次回の記事に掲載します。 後に示すリストを「コピー・アンド・ペースト」してプロジェクト・ファイルを作成し、STM32CubeMX に読み込ませ、C コードを生…
今回はデータの「生成」側と「消費」側との「同期」の方法についての話です。 次のような不具合、 送信中のデータを新しいデータで上書きしてしまう (オーバーラン・エラー) 送信データが必要なタイミングまでに新しいデータが間に合わない (アンダーラン・…
Nucleo ばかりでなく、同じ STM32F4xx ファミリのチップ (STM32F407VGT) を使った「STM32F4-Discovery」ボード用のプログラムも作ってみました。 STM32CubeMX アプリで STM32F4-Discovery ボード用のコンフィギュレーションでプロジェクトを作成し、デフォル…
今回はオーディオ・データの BMC エンコード・プログラムの本体についてです。 DMA 機能を持つ Cortex-M0 プロセッサとして、手持ちの Nuvoton NUC120LE3AN についてもプログラムを作ってみたところ、Cortex-M3/M4 用と同じプログラム記述では効率がよくなか…