背景:1つの32ビットタイマを使用して1つのピンにPWM入力を読み取り、2つのPWM出力を制御するために使用しているLPC11C24マイクロコントローラがあります。他のピン。その入力と出力が同じタイマーにあるので、私はタイマーレジスタ(TC)のリセットを一切しません。特に出力については、信号をHIGHにするか、信号がLOWになるように、マッチ・レジスタが連続的に増加するように設定しています。タイマリセットなしでLPC11CXXシリーズのマイクロコントローラでPWM出力をセットアップする方法
例:割り込みが発生するたびに、10000ティック、デューティサイクルが50%の場合、次の割り込みに備えて5000をMR0に追加します。
初期化:
IOCON_R_PIO1_1_bit.FUNC = 0;
IOCON_R_PIO1_1_bit.MODE = 0;
GPIO1DIR_bit.P1_1 = 1;
LPC_TMR32B1->MCR |= (1<<0); /* Interrupt when MR0 matches TC */
LPC_TMR32B1->MR0 = 0; /* zero the match value */
は、ISR:私はこのピンを調べるとき
/* If interrupt was from MR0 */
if(LPC_TMR32B1->IR & (1<<0))
{
/* Clear the interrrupt */
LPC_TMR32B1->IR = (1<<0);
if(GPIO1DATA_bit.P1_1 == 1)
{
LPC_TMR32B1->MR0 = LPC_TMR32B1->TC;
LPC_TMR32B1->MR0 += OutputChan0MatchPeriodFalling;
GPIO1DATA_bit.P1_1 = 0;
}
else if(GPIO1DATA_bit.P1_1 == 0)
{
LPC_TMR32B1->MR0 = LPC_TMR32B1->TC;
LPC_TMR32B1->MR0 += OutputChan0MatchPeriodRising;
GPIO1DATA_bit.P1_1 = 1;
}
}
私は一切出力を得るので、私は私が間違ってやっているかわからないんだけど。私が持っている別の問題は、私はいくつかの外部コード(基本的にはMR0 = TCを設定する)から新しいデューティサイクルを提供する場合を除いて、割り込みを取得していないということです。 TCはMR0よりも先に進んでいると思いますが、それを防ぐ方法がわかりません。どうもありがとうございます!追加情報があれば教えてください。
「PWM **入力**」はどのように制御されますか? – Olaf
@Olafありがとうございます。質問が編集されました。 – LaneL