STM8S-Discovery プログラム 「STM8SDP」
STmicro 製 STM8S マイコン評価ボード「STM8S-Discovery」用のプログラム「STM8SDP」です。 SD/MMC カード内の無圧縮リニア PCM の wave ファイルを再生するプログラムです。
Raisonance 社製の C コンパイラを、ST Toolset の ST Visual Develop 環境で使用して作成しています。 ライセンス認証をしていない、1 KB / 4 KB 制限のあるコンパイラでコンパイル可能です。 Ride7 環境や、Cosmic 社製のコンパイラには未対応です。
SD/MMC カードのアクセスのため、ChaN さんの「ぷち FatFS」を利用しています。
アーカイブ・ファイルは ZIP で圧縮してあります。
- STM8S-sdp-100305.zip (2010/3/5 暫定版)
HEX ファイルも含まれていますから、コンパイルせずに、ST Visual Programmer (STVP) を 使って、直接書き込むこともできます。
オーディオ出力は、ディジタル・オーディオ用 16 ビット・シリアル入力 DAC に対応しています。
「FMmelody」プログラムでは PWM DAC 出力として使っていた TIMER1 の CH4 出力 (PC4 / TIM1_CH4、コネクタ CN2-5 番ピン) を、ここでは SD/MMC カードの SPI クロックのために利用していますから、 ハードを共用する場合には影響がないようにしてください。
16 ビット・シリアル DAC は いわゆる「標準フォーマット」の
- BCLK / SDAT / LRCK の3線式インターフェース
- MSB ファースト
- 16 ビット右詰め
48 / 44.1 / 32 / 22.05 kHz サンプリングをサポートしています。
CPU クロックは 16 / 16.384 / 16.9344 / 18.432 MHz に対応しており、各クロック周波数に対する、 実際のサンプリング周波数の誤差は以下の表のようになります。
CPU クロック (MHz) | サンプリング 周波数(kHz) | 実際の fs (kHz) | 誤差 (%) |
---|---|---|---|
16.0000 | 22.050 | 22.039 | -0.05 |
32.000 | 32.000 | 0 | |
44.100 | 44.199 | +0.22 | |
48.000 | 47.904 | -0.20 | |
16.3840 | 22.050 | 22.022 | -0.13 |
32.000 | 32.000 | 0 | |
44.100 | 44.043 | -0.13 | |
48.000 | 47.906 | -0.19 | |
16.9344 | 22.050 | 22.050 | 0 |
32.000 | 31.952 | -0.15 | |
44.100 | 44.100 | 0 | |
48.000 | 48.109 | +0.23 | |
18.4320 | 22.050 | 22.048 | -0.01 |
32.000 | 32.000 | 0 | |
44.100 | 44.096 | -0.01 | |
48.000 | 48.000 | 0 |
もし換装するなら、約 15 % のオーバークロックになりますが、どのサンプリング周波数でも誤差の小さい 18.432 MHz をおすすめします。
16 ビット DAC とのインターフェースのために、Timer2 と SPI モジュールを使用しています。
SD/MMC カードとのインターフェースは Timer1 モジュールを利用したソフトウェア SPI で実現しています。
プログラム・サイズの制限のため、非常に基本的な機能しか実現できていません。 機能としては次のようになります。
- プログラムを実行すると、
- PG1 入力の状態を見て、
- コンパイル時にあらかじめ選択しておいた2種のサンプリング周波数のどちらかに設定し、
- SD/MMC カードのルート・ディレクトリにある、
- 決まったファイル名の 16 ビット/ステレオ/選択したサンプリング周波数の wave ファイルを、
- 演奏して終了
するだけのプログラムです。
PG1 (コネクタ CN2-12 番ピン) に接続されたスイッチの設定を読み込むのはプログラム開始時だけで、 演奏中にスイッチを操作しても何も起きません。
選択可能なファイル名やサンプリング周波数の変更にはソース・プログラムを書き換えて再コンパイルが必要です。
デフォルトでは、
SW | サンプリング周波数 | ファイル名 |
---|---|---|
OFF | 44.1 kHz | 44100.WAV |
ON | 32 kHz | 32000.WAV |
となっています。
最大サンプリング周波数は、使用する SD カードの性能によりますが、 手持ちの Kingston 製 2GB micro SD カードでは 50 kHz 程度まで再生できる実力があります。
FAT32 には対応していないので、4 GB 以上の SDHC カードは使用できません。
wave ファイルのパラメタは一切見ず、指定のサンプリング周波数/16 ビット/ステレオに決め打ちで、 ファイル・ヘッダ部分もスキップせず、オーディオ・データとして再生してしまうために、 最初の部分でクリック・ノイズが発生します。
プログラムのロジックとしては、エラーのリトライや、活線挿抜には対応しておらず、 正常終了の場合でも、エラーの場合でも、単に main() 関数の実行を終了するだけになっています。
しかし、C のランタイムの機能として、main() 関数を終了後、 ループして再び main() 関数の実行に入るので、期せずして 繰り返し演奏および活線挿抜の機能が実現されることになります。
エラーがあっても正しく抜けずに、どこかで引っかかってしまうと、ハングアップ状態になります。 また、カードを抜いたあと、ノイズが再生され続ける可能性もあります。
改定内容
2010/03/05 版
- 03/04 版までは、割り込みサービスルーチン内での L/R 判定ロジックが 反転していたため、出力の左右が逆転し、サンプリング位相がずれていたのを修正
- PWM 周期を決める定数のコンパイル時の計算式で四捨五入がうまく機能していなかったのを修正
2010/03/04 版
- 外部スイッチによりサンプリング周波数を切り換える機能の追加
- CPU クロック周波数 18.432 MHz およびサンプリング周波数 22.05 kHz のサポート
- コメント中のサンプリング周波数および誤差の表の誤りを訂正
2010/03/02 版
- ソフトウェア SPI ルーチンの改良により、サンプリング 周波数 44.1 kHz および 48 kHz をサポート
2008/02/28 版
- STM8SDP 暫定版最初のリリース