ラベル Blackfin の投稿を表示しています。 すべての投稿を表示
ラベル Blackfin の投稿を表示しています。 すべての投稿を表示

2015年5月24日日曜日

「Blackfin MiniConfig for IFX-49 | 音遊び!Blackfin DSP基板でディジタル信号処理初体験」のサポート情報ページを更新しました

Blackfin MiniConfig for IFX-49 | 音遊び!Blackfin DSP基板でディジタル信号処理初体験」のサポート情報ページを更新しました。

1つ目は「Makefileからminiconfig-cuiを呼び出す」で、書籍に付属しているソースコードに添付されているMakefileにwriteとbootというターゲットを追加し、make一発でコンパイルから書き込みまでを実現する方法をまとめたものです。修正済みのMakefileをまとめたパッケージもダウンロードできるようにしておきました。


2つ目は「Eclipseを使ったビルド環境構築」の続編とも言える「Eclipseからminiconfig-cuiを呼び出す」で、ビルド後に自動的にminiconfig-cui.exeを呼び出してターゲットに書き込みを実行できるというものです。アプリケーション間を行ったり来たりする事なく、Eclipseから1クリックで書き込みまで実行できるお勧めの設定を記述しました。フラッシュロムに書き込む方法とSRAM上で直接実行する方法の両方に対応しています。


2015年4月9日木曜日

CQ出版社から「音遊び!Blackfin DSP基板でディジタル信号処理初体験」が発売されました

■書籍について

CQ出版社から「音遊び!Blackfin DSP基板でディジタル信号処理初体験」が発売されました。


この書籍にはAnalog Devices社のDSP (ADSP-BF592)が搭載された基板が同梱されており、書籍内容に連動して様々なエフェクト処理を体験できる内容になっています。今回の基板はBOOT用のピンヘッダをひとつハンダ付けするだけで、すぐに使い始める事が出来る豪華仕様。従来の付属基板と違って、USBコネクタもオーディオ入出力コネクタも予めハンダ付けされているのです。部品を別途購入する必要が無いのでとても便利!

■書き込みソフトウェア

今回、私は付属基板(IFX-49)のフラッシュ書き込みソフトウェアの設計実装を担当しました。


ソフトウェアはWindows版とMac OS X版を用意し、ビルド済みのバイナリが同梱されています。ソフトウェアからは、使ってみたいエフェクトを選択して書き込み操作を実行するだけで、様々なエフェクトをすぐに体験出来るようにしました。



また、Windows版には書籍に連動してビルドと書き込みが出来るようにソースコードまで同梱しました。セットアップを実行するだけで本当にすぐに使い始められるようになっています。

■オフ会とフォローアップ情報

2015年5月22日(金)には、CQ出版社主催のオフ会も開催されます。
また、 http://cubeatsystems.com/ifx-49/ で様々なフォローアップ情報も公開する予定ですのでお楽しみに!


■関連リンク

2015年1月5日月曜日

C言語で記述されたマイコンでも使えるMMLパーサー 'A tiny MML parser'

MML (Music Macro Language)

MMLは、音楽記法をテキストで簡易的に扱うための記述言語です。
例えば、「ド・レ・ミ」と四分音符で歌う場合には「C4 D4 E4」と書く事で表現できます。

経緯

先日、大晦日ハッカソン2014なるものを見つけ、mrubyをBlackfinボード(UCB-BF512-B)で動かすおひとりハッカソンを企画し実行したわけですが、実は色々な小道具を整備しないとmrubyに辿りつけないとわかり何故か寄り道。Windows、Mac OS、Linuxで動作可能なChaNさんのFM音源モジュールの簡易シミュレーターの流れもあって、MMLパーサーがあれば自由に自動演奏させられるなぁという考えから実装したい衝動に負けてしまいました。

'A tiny MML parser'

'A tiny MML parser'は、Cで記述されたMMLパーサーです。


特徴をざっと挙げると
  • シンプルなAPI
  • 可搬性に優れたソースコード (C89準拠)
  • 外部ライブラリに非依存 (libcも不要)
  • 小さなフットプリント
  • シャープ、フラット、ダブル・シャープ、ダブル・フラットなどにも正しく対応可能
  • 複数の符点音符にも正しく対応可能
  • 三連符に対応
など、マイコンで使う事も考慮した設計と実装になっています。

特に、シャープやフラットが複数付く場合、符点が複数付く場合、三連符に対応可能な点は、実際の曲を簡易的に表現可能という意味で重宝する仕様になっています。三連符を疑似的に入力するのとか辛いじゃないですか・・・。


どういう風に使えるの?

'A tiny MML parser'を使うには、要求されている唯一のコールバック関数を実装するだけです。
このコールバック関数は、「typedef void (*MML_CALLBACK)(MML_INFO *p, void *extobj);」と宣言されており、mml_fetch関数を呼ぶ度に一つのMMLコマンドが解釈されてコールバックが呼ばれる仕組みです。


ライブラリのインターフェースは以下に示すようにたったの三つです。


まず、初期化関数mml_initでコールバック関数を渡して初期化します。
この時、extobjに外部オブジェクトへのポインタを渡してやると、コールバック関数で受け取れます。

次に設定関数mml_setupで演奏時に必要となるオプションとMMLを渡します。
「オプションなんてわけわからん!」という人は「(MML_OPTION *)0」を渡して下さい。

最後に呼び出し関数mml_fetchでMMLのパースを実行します。
このmml_fetchを呼び出す度に、一つのMMLコマンドが解釈されます。

ちなみに、このライブラリは「何が書いてあるのか?」について解釈する機能を提供します。
「それをどうするのか?」については一切関知しません。
実際のシステムに導入する場合、これを意識して使う事が結構ポイントになってきます。

デモ

Blackfin上でFM音源を構成し、そのFM音源をMMLで操作している様子をデモ映像にしました。


このデモでは、ChaNさんのFM音源のコードを若干改造したものをミドルウェアとして使用しています。MMLパーサーも軽量ミドルウェアとして導入できたので、上位の実装は非常にシンプルな形で済ます事ができました。

ボードには、金子システム社製BlackfinボードACB-BF592-AUMB-SGTL5000-Aを搭載したBlueTankを使用しています。

ライセンス

ライセンスはMITです。
趣味でも業務でも、ライセンスの範囲で自由にお使い頂けます。

ダウンロード

'A tiny MML parser'のダウンロードは以下のページからどうぞ。


2014年12月31日水曜日

mrubyをBlackfinボード(UCB-BF512-B)で動かすおひとりハッカソン

大晦日ハッカソン2014

大晦日ハッカソン2014なるものを見つけてひっそり参加する事にしました。


テーマは「mrubyをBlackfinボード(UCB-BF512-B)で動かす」という事に決定。


mrubyはVersion 1.1.0を使用します。


今回のハッカソンの作業は https://github.com/shintamainjp/MISO-DEV-2014 で公開します。

2014年7月27日日曜日

KOZOS for Blackfin "BlacKOZOS"の設計方針

UOS-LPC800

UOS-LPC800を公開してから早くも一年が経ちました。
思いっきり遊びでしか使えない感じのOSが一部の方に好評で、ここでも述べたようにadafruitでも紹介されたりもしています。


本当は公開後に色々機能追加する事を考えていましたが、LPC-810と組み合わせて紹介されているので、彼に入りきらなくなるのは可哀想です。どうしようかな?と考えていたら1年が経過していました。あらら。

KOZOS

UOS-LPC800は、坂井さんがお作りになったKOZOSが制作のきっかけになっています。


KOZOSは、完全ホビー向けOSでありながらソフトウェア割り込みを使ったシステムコールによる操作を実現するなど、とても興味深い作り込みになっています。坂井さんによるユニークなキャラクタであるニジマス君も見逃せません。

坂井さんの書籍が販売されてから私も早速購入して色々な活動に取り組みました。

"BlacKOZOS" - KOZOS for Blackfin

あれから二年ほど経ち、現在は主にBlackfinを使って色々遊んでいます。
私の場合、新しいプロセッサをいじる場合には、クラスの中で小さいものを選んで使う事にしています。現在はBF592というプロセッサで離散的に遊んでいるのですが、この小さなプロセッサでキビキビ動作するOSを書いてみたくなりました。

名前も決めてあって、BlackfinとKOZOSをかけて、BlacKOZOSです。
とてもブラックな感じ。「ブラッコゾス」です。「ブッコロス」ではありません。

本体OSは何もないのに、キャラクタはもうあります。
完全に順番を間違っています。


"BlacKOZOS"の設計方針

設計は以下のように進める事にしました。

①普通に動作するだけのプログラム

普通に動作するだけのプログラムが、どうしてOSに発展するのか理解できないかもしれませんが、最初のタスクしか実行できないところから"BlacKOZOS"の開発をスタートさせる事にしました。これは、まさにOSを使うことで解決したい問題を提示した形です。ざっくり言うと、複数の仕事を並行し、かつ効率的に処理させたい、複数の仕事を協調動作させたい、という課題。


②割り込み関数でレジスタの退避と復旧

次に、①で動作している仕事を一切阻害する事なく、割り込み処理の中で①で使っているレジスタを退避、復旧させます。ここでは、コンテキストスイッチ、つまりタスクの切り替えは行わず、退避したレジスタをそのまま復旧させます。レジスタ周辺の操作は少しでも間違えると動作しません。このコンテキストスイッチなしのレジスタ退避復旧処理は、正しく実装できた時点で、みかけ上①と同じ処理を提供する事になります。つまり、レジスタの退避と復旧を正しく行いながら、依然としてかなり単純な実行モデルを維持できます。


③コンテキストスイッチを追加する

レジスタの退避復旧が実現できたら、コンテキストスイッチを追加します。②を先行させる事にはもうひとつ別の理由があり、②が実現できた時点でコンテキストスイッチは基本的にC言語で記述できるようになっています。どういうことかと言うと、レジスタ退避作業によって実行中のコンテキストを復旧するためのレジスタは保存されているので、それらをかなり自由に使うC言語を使ってレジスタを汚しても、レジスタ復旧で必要な値へ復旧できるわけです。リンクリストを辿ったりする作業をアセンブラで書くのも面倒なのでうってつけというわけです。


まとめ

今回は大雑把な設計方針について明らかにし、作業の道筋を立てました。
Blackfinの場合、割り込みマスクの取り扱いが1つのポイントかもしれません。
その辺りも後々触れていければと思います。

2012年12月28日金曜日

ACB-BF592とUMB-SGTL5000を使ったTalk ThroughをTOPPERS/JSP上で実現する

オーディオ・プラットフォーム・プロジェクトであるBlueTankも、ベース基板が上がってきて半年が経とうとしています。その間にベア・メタルなアプリケーションは幾つか実装したのですが、そろそろ色々な不満が出てきました。


Blackfin BF592は、ARM Cortex-Mシリーズ等と比較しても有り余るプロセッサ能力を持っています。簡単なサンプル・プログラムならともかく、システムとして様々なサービスを提供するのにRTOSを使って楽をしたくなってきました。RTOSを使えばNatural Tiny Shell (NT-Shell)もシステム・シェルとして提供できます。「ビデオやオーディオのDMAバッファの管理手法 (動かして遊べるソースコード付き!)」をRTOS上で試してみたいというのもあります。

プロジェクトを始めた当初はフラッシュ・ロムへの書き込みも出来なかったため独立した組み込みシステムとして動作しませんでした。Blackfin BlueBootを実現した事で独立した組み込みシステムとしての道筋が見え、だんだんと欲も出てきました。

幸いにも、DSP空挺団の酔漢さんが「ACB-BF592とTLV320AICを使ったTalkthroughサンプル。TOPPERS/JSPベース。 (bf592_tlv320aic23b_talkthrough) 」というものを公開して下さっています。このプロジェクトは、TOPPERS/JSP for Blackfin上に、使いやすいI2C制御層が組み込まれた上、オーディオ・フレームワークUZUMEが実装されています。

BlueTankプロジェクトにおけるRTOS環境の出発点として、この酔漢さんの成果物をふんだんに活用させて頂く事にしました。これは本当に有難い話です。

TLV320AIC23BもI2Cインターフェースを持つデバイスですから、UMB-SGTL5000に搭載されているオーディオ・コーデックに対する処理も、少しの改造で可能だろうという算段。実際に酔漢さんの丁寧な設計実装のおかげで、ものの3分でBlueTankでもTalk Throughが動作するようになりました。ちなみに、オリジナルのコードは、レジスタ互換のSSM2603が搭載されたUMB-SSM2603でも動作します。

唯一変更したソースコード : uzume.c

対応は至って簡単で、init_codec関数の中身を少し変更しただけです。

今回のTalk Throughは、氏の進めているUZUMEフレームワーク上に構成された物です。
BlueTankプロジェクトも、UZUMEフレームワークを使って色々と実験を進めようと考えています。

素晴らしいプロジェクトを公開して頂いているDSP空挺団の酔漢さんには感謝感謝です。

2012年12月24日月曜日

999円で売られていたBEHRINGER DR400 (DIGITAL REVERB/DELAY)の安くない中身

クリスマスの雰囲気が満載の街中を歩いていたところ、楽器屋でBEHRINGERのコンパクト・エフェクターがサンキュー価格ということで999円で売られていました。


よく見ると「DIGITAL」と名のつくエフェクタも999円です。
興味が出てきたのでBEHRINGER DR400 (DIGITAL REVERB/DELAY)を購入して分解してみました。

分解して最初に目に入ったのは信号処理プロセッサであるDSP56364です。
Freescale社のDSPで、「24-Bit Audio Digital Signal Processor」と銘打った音声信号処理に特化したシリーズです。
音声コーデックにはAKM4552が採用されています。

面白いのはATMEGA16AがノブのADC処理用として用いられている事でしょうか。
配線を見るかぎりではエフェクトのOn/OffスイッチもATMEGA16Aに接続されていました。
フロントエンドはATMEGA16Aが担当という設計ですね。
DSP56364とATMEGA16AとはSPIかI2Cで通信でしょう。


電源にはMPSのMP1591が使われていました。
330KHzのステップ・ダウン・コンバータです。

今回分解したエフェクタはリバーブでもありディレイでもあるので、それなりのメモリを必要とします。
「どうしてるのかなぁ」と思ったら、当然のようにメモリが鎮座していました。
ISSIのIS41LV16105B-60TLがそれです。


こんな風に、街中で999円でエフェクタを買って分解できてしまう時代。
いやー、恐ろしいものです。


ちなみに、笑ってしまったのですが、右端のモードを切り替えるノブ。
メモリの位置に合わせてクリックがあるのかと思ったら・・・ありません!

単なるボリュームだったのです!
うーん、切り替えが難しいぞっ!



本当は機構と電気設計の関係もフムフムと眺めたかったのですが、自分が再現するとしたら「プラスチック成型」などあり得ません。
そう考えるとあまり参考にならない気もしました。

うーん、何か良いケースはないかなぁと考え始めるこの頃。
2012年初頭から始めたBlackfinいじりも2013年は更に加速させようと考えています。

今度は「本当に使えるモノ」に仕立てていく計画です。

2012年12月7日金曜日

Blackfin BlueBoot - Blackfinに接続されたブート用外付けフラッシュ・ロムを書き換える事ができるソフトウェアのデビューです!

このプロジェクトって何なの?

Blackfin BlueBootとは、Blackfinに接続されたブート用フラッシュ・ロムを書き換える事のできるソフトウェアです。

ターゲット用の専用ブート・ローダとホスト用の専用アプリケーションから構成され、両者が協調動作する事でBlackfinに接続されたブート用フラッシュ・ロムの書き換えを実行します。



Blackfinは、SPIに接続された外部フラッシュ・ロムからブートさせる事ができます。
しかし、Blackfinは予めどんな外付けフラッシュ・ロムが接続されるのか知るよしもありません。


当然のようにBlackfinが外付けフラッシュ・ロムの書き換え機能を持つわけもなく、「一体どうやったら書き換えができるの?」というわけです。

Analog Devices社は、同社純正ソフトウェアであるVisualDSP++でこの問題を解決しており、Blackfinに接続されたフラッシュ・ロムの型式を選択する事で、GUIから書き換えができるようなサービスを提供しています。

うーん、さすが有償ツール!なんて感動している場合ではありません。
VisualDSP++はとても高価なツールです。
業務で使うならまだしも、趣味のDSP開発で手の出せる金額ではない事がわかりました。

Blackfin BlueBootは、このような背景から高価なツールを購入せずともBlackfinに接続されたフラッシュ・ロムを書き換えられるようにしようというプロジェクトです。

プロジェクトのゴール

このプロジェクトは、以下のゴールを設定しました。
  • Blackfin搭載のターゲットに対応可能な事。
  • 幅広いフラッシュ・ロムに対応可能な事。
  • とにかく簡単に使える事。
  • ユーザが自由にターゲットを追加できる事。
  • 業務でも趣味でも少ない制約で利用できる事。
  • 入手性の良いDSPボードを使って実例を示す事。
  • CUIとGUIでホスト側ツールを用意する事。
  • 将来的にWindows、Linux、Mac OSのプラットフォームをサポートする事。
  • ターゲット側のコードは公開し、幅広く利用してもらえるようにする事。
  • その他。
上記のゴールを基に設計したのが、今回公開するBlackfin BlueBootです。

簡単に使える

Blackfin BlueBootが標準でサポートするBlackfin基板を使う場合、特に簡単に使う事ができます。
最初にリリースされるWindows版における動作を見てみましょう。

インストーラでソフトウェアをインストールすると、デスクトップにアイコンが作られます。
ダブルクリックしてソフトウェアを起動します。


ソフトウェアを起動すると、以下のような画面が出現します。


初めに行なうのは、ターゲットとホストを接続するシリアル・ポートの設定です。


次に標準的にサポートされているターゲット・ボードの選択を行ないます。


このリストにないターゲット・ボードの場合、インストール先ディレクトリに公開されているターゲット用ソース・コードと設定ファイルの更新により、独自にブート・ローダを記述する事で対応させる事ができます。(これは後日、別途記事を書きたいなぁ。)


最後に、使用するブートローダとアプリケーションを指定して選択は完了です。

Boot Loaderとは、初段でターゲットに流し込むフラッシュ・ロム書き換え用プログラムです。
Boot Loaderを流し込んで書き込みを行なう場合、ターゲットをUARTブート・モードにしておく必要があります。

Applicationとは、ターゲット上のフラッシュ・ロムに書き込むバイナリを指します。
Applicationは、初段で流し込んだブート・ローダを経由してフラッシュ・ロムに書き込まれます。

こんな風に「シリアル・ポート」、「ターゲット・ボード」、「ファイル」の3つの選択をするだけで、即座に書き込みを実行できるのがBlackfin BlueBootです。


ちょっと便利なLDR表示機能

単に書き込めるだけでは面白くないのでBlackfinで使用しているLDRファイルの属性も表示できるようにしました。


Version 0.2.0ではBF592形式しか対応していませんが、順次対応を拡大しようと考えています。
あ、DEADBEEFなんて洒落ていますね。

ダウンロード

  • こちらからダウンロードできます。
  • ライセンスはMITです。
  • 業務の開発に、趣味の開発に存分に御活用下さい。
  • 無保証です。使用した結果起きる如何なる損害も当方は責任を負いません。

関連文書

  • 先日の記事でM25P16の書き換えコードを公開しました。
  • DSPいじりを楽しみたい方には、金子システム株式会社さんが販売されているACB-BF592をお勧めします。
  • DSPなどの話題が盛りだくさんの酔漢さんのページ、DSP空挺団もお勧めです。

まとめ

今回のBlackfin BlueBootツールは、これからBlackfinを使ってみたいけどツールは高価で手が届かないという人にも、手軽にDSPを体験して頂く事のできるツールとして設計しました。

Blackfin BlueBootで用いた、「第1段階に書き換え機能を持ったプログラムを流し込み」、「本当にやりたい事を第2段階でやる」という手法は、一般的に用いられる手法の一つです。
実はXilinx社のFPGAツールでもプラットフォーム・フラッシュの書き換えで同様の手法が用いられていたりします。

世の中の色々なツールの動作を観察してみるのも意外に面白いかもしれませんね。

2012年8月17日金曜日

オーディオ・プラットフォームBlueTankの始まりとUZUMEオーディオ・フレームワーク

まえがき

先日からBlueTankだとか何とか書いていて、経緯を知らない人にとっては「何を言っているの?」という感じです。この記事では、オーディオ・プラットフォームBlueTankの始まりとUZUMEオーディオ・フレームワークについて触れたいと思います。

前々からオーディオ装置の開発をやりたいなぁと考えているわけですが、それっぽい入口を仕立てる度にシェルを作るのに忙しくなったり、デバッグ用ツールを作るのに忙しくなったりと何をやっているんだという状態です。

そうは言えども、徐々に何をどう進めようかという指針が明確になってきました。

まずは下回りを固めようという事でオーディオを簡単に扱うためのフレームワークを構築しようと考えるわけですが、実はDSP空挺団をホストされている酔漢さんが既に完成度の高いフレームワークを構築されています。

ということで、後はお手頃なハードウェア・プラットフォームを構築して、その上でフレームワークを使って楽しめば良いじゃないかとなるわけなのです。

ハードウェア・プラットフォーム

以前にBlackTankを設計した時に面倒な思いをして、「これを続けるのは大変だなぁ」と考えていました。
もっと手軽なプラットフォームで開発したいと考えたわけです。

そこに現れたのが金子システム社のDSP基板です。
お値段とサイズがコンパクトなのでほぼリスクなし。


こいつを載せるベース基板を作りさえすればスタートできるなぁと考えていました。
で、作ってみたのが以下の写真・・・。(え?)


基板マニアの私としては、この手作り感がどうしても許せません。
そして、複数個作れと言われても作る気になれません。
要するに、手作業でユニバーサル基板に配線する事に手軽さを感じませんでした。

結局のところ簡単なベース基板を設計する事にしました。
それがBlueTankとなったのです。
とはいえ、DSP基板上にほとんど必要な部品が搭載されているため、ベース基板の回路はスカスカです。


BlueTankで実現するかどうかわかりませんが、装置モノとして筺体設計も考えています。
BlueTankの基板はTAKACHIのLCS135-Hに収まるように設計してあります。


UZUMEオーディオ・フレームワーク

UZUMEオーディオ・フレームワークは、オーディオ処理に必要なリアルタイム制御部分を遮蔽し、オーディオの処理のみに注力できるように考えられているフレームワークです。


フレームワークでは、予め想定された用途の範囲でAPIが整備されています。

一部はBlueTankに適用できないので、対応はこれから考えますが、UZUMEオーディオ・フレームワークの比較的小さなプラットフォームの部類にBlueTankを該当させたい考えです。

「コンパクトなハードウェアで各種オーディオ処理の実験が可能!」というのがBlueTankの位置付けでしょうか。

プロジェクト・ページ


オーディオ・プラットフォームBlueTankにも、UZUMEオーディオ・フレームワークにも、プロジェクト・ページが存在します。興味のある人は訪れてみて下さい。


2012年1月22日日曜日

これは新機軸!金子システム株式会社さんのDSP基板が登場(予定)!

このブログを読んでいらっしゃる方の中にも「DSP触ってみたいなぁ」という方が結構いるのではないでしょうか?そんな私も例に漏れず以前から「Blackfinを触ってみたい触ってみたい」と念仏のように唱えていました。

色んなきっかけによって徐々に環境を整えつつあるのですが、先日「私好みのキュッと引き締まったDSP基板」を入手する事ができましたので御紹介します。

私がすっかり気に入ってしまったDSP基板の写真はこちら。


この基板は金子システム株式会社さんの設計によるもの。
基板フェチの私は美しく引かれたパターンとティアドロップにうっとりです。
プロの仕事はやはり違います。

コンパクトな基板の上にBlackfinとクロックとSPIフラッシュとJTAG用ヘッダとブートモード選択用DIPスイッチと1.2V降圧レギュレータが搭載されています。要するにこの基板に+3.3Vを供給するだけで、直ぐにでもDSPを楽しむ事ができるのです。

搭載されているDSPはAnalog Devices社のADSP-BF592 Blackfinです。


なるほど~って、全然まだ意味がわかっていません。
なんだこのブロック・ダイアグラムにある「BLACKfin」ってのは!と突っ込みたくなります。
これがDSPの心臓部分か。


そんな感じでヨチヨチ状態ですが、NXPセミコンダクターズのLPCシリーズと合わせて、今年はこちらも楽しみたい!それにはまずデバッガの入手かな?

ちなみに、このDSP基板は今後販売予定があるそうです。
興味のある方は金子システム株式会社さんまで問い合わせてみて下さい。

「CuBeatSystemsのウェブを見た」と言うと・・・おそらく特典は無いと思います。