結局、やりたいのは
こんな感じの信号を出力したい、ということです。Tを1周期として指定されたA~Gの各タイミングで対象の信号をHighにしたりLowにしたりします。Tは数us~数十us程度になります。
細かく考えるとより多いch数、運転モード・停止モードの遷移、ソフトスタート、ソフトストップ、周期固定 or 変動、などいろいろありますが、そのあたりは後回しということで。
私が考えたところでは、答えは「mbed LPC1768では出力できない」です。
厳密には割り込みとGPIOを使えば出力できそうに思いますが、この方法は除外して、それなりのペリフェラルが主導して動作する構成を考えていきます。
「LPC17xx User manual」を見たところ、使えそうなペリフェラルは
- Timer
- Pulse Width Modulator (PWM)
- Motor control PWM
になります。
Timerは周期的な信号を出力させられますが、結局は無理そうです。もっと単純なパターン、例えばデューティ比50%の信号、なら出せそうです。
PWMはうってつけのモジュールですが、対応ch数がきわどく足りません。User manualにも書いてありますが、3chまでなら出力できます。
User manualの「24.4 Sample waveform with rules for single and double edge control」で説明されている通りなのですが、もう少し説明するために「Fig 119. PWM block diagram」を引用すると
ここで色をつけた部分が動く箇所になります。Matchレジスタがもっとあれば、実現可能かもしれませんが、足りないものは仕方ないですね。
残るはMotor Control PWMですが、これは基板の配線の都合でmbed LPC1768では使えません。Motor Control PWMの出力ポートMCOA0, MCOB0, MCOA1, MCOB1, MCOA2, MCOB2どれも未接続だったり別用途に使われていて、DIPnに接続されていません。
ただ、もしMotor Control PWMが使えるなら所望信号が出せるかというと出せそうです。実際に試してはいませんが…。mbed LPC1768に近いLPCXpresso1769ならMotor Control PWM出力が取り出せるので試せそうに思います。Motor Control PWMを使えば、4ch信号でなく、3相インバータの6ch信号を出力することも可能です。