ソフトウェア無線

ご購入はこちら
高速ワンチップ・マイコンではじめる
サンプル
・
プログラ
ム
付き!
ソフトウェア無線
第 11 回
信号処理結果のスペクトラム表示
高橋 知宏
fS =12MHz
fS =80kHz
fS =8kHz
CIC
FIR
NCO
IIR
コーデックIC
NCO
ADC
LPC-Link2
マイコン基板
1/150
1/10
CIC
FIR
2
I S
TLV320
AIC3204
IIR
1300Hz
メインコア
(M4)
表示するスペクトラムを切り替え
窓関数
サブコア
(M0APP)
N =1024
FFT
スペクトラム
描画
各種情報描画
SPI
LPC4370
ILI9341
グラフィックス
LCD
320×240
図 1 ソフトウェア無線信号処理の各ステージの波形をグラフィックス液晶ディスプレイでリアルタイム・モニタできるようにした
FFT 計算や画面表示は,メイン Cortex-M4F コアじゃなくて,サブ Cortex-M0 コアにやらせる
前回(第 10 回,2016 年 7 月号)は,ソフトウェア無
線信号処理の各ステージの波形をグラフィックス
LCD でリアルタイム・モニタするために,追加する
FFT 処理とマルチコア・プログラミング方法を紹介
しました(図 1).
今回は実際に動かしてみます.
ターゲット ARMマイコンの
マルチコア動作
● サブコアの動作
ターゲット LPC4370 マイコンはメイン Cortex-M4F
コア(M4)に加えて Cortex-M0 コア(M0APP)を内蔵
しています.FFT と描画はこのサブコアで行います.
リセット時にはサブコアは起動していません.メイ
ンコアの main() 関数の先頭部分で,明示的にサブ
コアを実行開始している箇所があります(リスト 1)
.
この呼び出しを行うことでサブコアの実行が開始さ
れます.内部的には,サブコア用の渡されたイメー
ジ・アドレスにより,PC やスタック・ポインタが格
納されたベクタを設定した後,リセット状態を解除す
ることで,サブコアが起動されるようになっていま
す.イメージを参照するシンボル(__core_m0app_
START__)は,リンカ・スクリプトで定義されるよ
リスト 1 メインコアの main 関数でサブコアを起動している部分
int main(void) {
// Start M0APP slave processor
#if defined (__MULTICORE_MASTER_SLAVE_M0APP)
cr_start_m0(SLAVE_M0APP,&__core_m0app_START__);
#endif
// Start M0SUB slave processor
#if defined (__MULTICORE_MASTER_SLAVE_M0SUB)
cr_start_m0(SLAVE_M0SUB,&__core_m0sub_START__);
#endif
152
うになっています.
サブコアは Cortex-M0 ですが,メインコアと違っ
ていくつか注意点があります.
▶(1)クロック設定が不要
クロックはメインコアと共用ですので,サブコアで
は設定する必要がありません.これに関係する落とし
穴として,設定不要であるが故にライブラリが必要と
するクロック関係の呼び出しやソフトウェア的な設定
が行われておらず,ペリフェラルを扱うライブラリが
第 1 回 AM ラジオを作る(2015 年 10 月号)
第 2 回 AM ラジオで行う信号処理(2015 年 11 月号)
第 3 回 短波ラジオを受信する(2015 年 12 月号)
2016 年 8 月号