LPCXpressoLPC1768/LPC1769を使っていて、是非使いたい機能の中にDMAがあります。GPDMAとあるように汎用DMAになると特定のペリフェラルに特化していないDMAとなるため、はじめてNXPマイコンを使う人に取っては設定項目の多さ、初期化手順の混沌といった問題にぶつかります。以前製作したMTM06の時に展示したロスレスオーディオデコーダではユーザRAMに数kBのバッファをソフトウェアで用意し、割り込みを使用してI2Sペリフェラルにデータを渡していました。8ワード分のバッファがあるにせよ44.1kHzステレオ、16bitの音声ですのでそれなりのオーバーヘッドが生じます。DMAを使えば割り込みのオーバーヘッドが無くなりはしないものの大きく低減できますので、是非使いたいところ*1です。ところがいざこの準備をしようとするとsirius506氏も仰る通りかなり大変です。【注:PDFです】ユーザーマニュアルのI2SとGPDMAの項目に精通していなければなりません。氏が最近TOPPERS/ASPによるTalkThroughプログラムをリリースされました。こちらも参考にしながら、DMAを実装していこうと思いました。IDE上でレジスタを直接*2叩くとおかしな挙動をする事があるようです*3。mbedライブラリはCMSISレイヤの上にある高位なライブラリですので、mbedライブラリに存在しないLPC17xxのペリフェラルを操作する際にはなるべくCMSIS越しに操作した方が良いのかもしれません。NXPが用意しているCMSISドライバライブラリを参考にします。DMAでは音声データを途切れる事無くDMAに渡すためLLIを使用します。今回は勉強のためI2Sの機能を省いたLLIのテストコードを使用しました。このサンプルもGPDMAフォルダにある(Link_list)ので流用しました。このサンプルはワンショットLLIとなっているため、LLIがリングバッファを形成するように(無限ループになるように)書き換えます。これを追記;こちらをコンパイルしたものをmbed.org上にuploadしてあります。Buffer1,2それぞれデータを送出した後にTC割り込みを発生させます。確認のためprintfで"hogehoge"とUART0越しに喋ります。Blogマイコン風雲録マルチチャネルDAC製作記nabeの雑記帳なんでも作っちゃう、かも。blog月別アーカイブはてなブログをはじめよう!Lynx-EyEDさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。