ジェリーAC 692 X-PWM設定
15368 ワード
最近杰理AC 692 Xを勉强して、収获と出会ったいくつかの问题をブログに书いて、后で仕事の中で感谢Jimを使うのに便利です天河ブロガーの資料は、ブログの傑理AC 692 X-三路タイマーPWMを参考にします.
1、デフォルトのTIMER対応のPWM出力のIOポート、PWM 0–TIMER 0–PA 1 PWM 1–TIMER 1–PA 4 PWM 2–TIMER 2–PB 3 PWM 3–TIMER 3–PB 4 2、TIMER 0がシステムクロックであるため、最大3ウェイのPWMを出力することができ、3ウェイのPWMはOUTPUTCHANNELを通じて任意のIOポートに出力することができ、プロジェクトはPWM出力を使用し、LEDランプを制御する必要がある.原理図板にはPWM 3デフォルトIOポートPB 4出力デューティ比N=(Tx_PWM/Tx_PR)*100%が選択されている
他のIOポートへのマッピングを選択した場合(ブログ参照)
3、レジスタの説明に対応するレジスタに対応するIOポートのOUTとDIE OUTPUTCHANNLE 0 IOMC 1の8~11ビット00 OUTPUTCHANNLE 1 IOMC 3の20~23ビット01 OUTPUTCHANNLE 2 IOMC 3の24~27ビット10 OUTPUTCHANNLE 3 IOMC 3の28~31ビット11 4は、配置後に開発ボードにダウンロードしてもPWMを出力ことができず、しばらく探してみるとSDKはtimerにある.cファイルの下でtimer 3がデフォルトで起動し、マスクしてから
5、demoをテストする
1、デフォルトのTIMER対応のPWM出力のIOポート、PWM 0–TIMER 0–PA 1 PWM 1–TIMER 1–PA 4 PWM 2–TIMER 2–PB 3 PWM 3–TIMER 3–PB 4 2、TIMER 0がシステムクロックであるため、最大3ウェイのPWMを出力することができ、3ウェイのPWMはOUTPUTCHANNELを通じて任意のIOポートに出力することができ、プロジェクトはPWM出力を使用し、LEDランプを制御する必要がある.原理図板にはPWM 3デフォルトIOポートPB 4出力デューティ比N=(Tx_PWM/Tx_PR)*100%が選択されている
//
static void pwm3_init(u32 fre, u8 duty)
{
// SFR(JL_IOMAP->CON1, 8, 4, 15);// IO ,CON1 0 IO
JL_TIMER3->CON = 0x0000;
JL_TIMER3->PRD = OSC_Hz / (4 * fre);
JL_TIMER3->PWM = (JL_TIMER3->PRD * duty) / 100;
JL_TIMER3->CON = (1 << 4) | (1 << 8) | (1 << 0) | (2 << 2);//(1 << 4) 2 (1 << 8) PWM (1 << 0) (2 << 2)OSC
JL_PORTB->PU |= BIT(4); // IO
JL_PORTB->DIR &= ~BIT(4);
}
void pwm3_duty_set(u8 duty)
{
JL_TIMER3->PWM = (JL_TIMER3->PRD * duty) / 100;
}
他のIOポートへのマッピングを選択した場合(ブログ参照)
static void set_timer3_pwm(u32 fre, u8 duty)
{
SFR(JL_IOMAP->CON1, 8, 4, 15);// CHANNEL0, IO OUT:0,DIE:0 // 0
//SFR(JL_IOMAP->CON3, 20, 4, 3);//CHANNEL1, IO OUT:0,DIE:1 // 1
//SFR(JL_IOMAP->CON3, 24, 4, 14);//CHANNEL2, IO OUT:1,DIE:0 // 2
JL_TIMER3->CON = 0x0000;
JL_TIMER3->PRD = OSC_Hz / (4 * fre);
JL_TIMER3->PWM = (JL_TIMER3->PRD * duty) / 100;
JL_TIMER3->CON = (1 << 4) | (1 << 8) | (1 << 0) | (2 << 2);
JL_PORTA->PU |= BIT(13); // IO OUT:0,DIE:0
JL_PORTA->PD |= BIT(13);
JL_PORTA->DIR &= ~BIT(13);
JL_PORTA->OUT &= ~BIT(13);
JL_PORTA->DIE &= ~BIT(13);
}
————————————————
: CSDN 「Jim_ 」 , CC 4.0 BY-SA , 。
:https://blog.csdn.net/JaLLs/article/details/87971260
3、レジスタの説明に対応するレジスタに対応するIOポートのOUTとDIE OUTPUTCHANNLE 0 IOMC 1の8~11ビット00 OUTPUTCHANNLE 1 IOMC 3の20~23ビット01 OUTPUTCHANNLE 2 IOMC 3の24~27ビット10 OUTPUTCHANNLE 3 IOMC 3の28~31ビット11 4は、配置後に開発ボードにダウンロードしてもPWMを出力ことができず、しばらく探してみるとSDKはtimerにある.cファイルの下でtimer 3がデフォルトで起動し、マスクしてから
void timer_init(void (*isr_fun)(void))
{
printf("timer_init
");
sys_timer_var_init() ; //major use in bluetooth
timer0_init();
//timer3_init();
}
5、demoをテストする
void led_test(void)
{
static u8 duty = 50;
u8 test = 0;
printf("led_test
");
extern void close_wdt(void);
close_wdt();
extern void delay(u32 d);
printf("LED_INIT_EN();
");
set_timer3_pwm(500L, 50);
// LED_INIT_EN();
while (1) {
//printf("PWM_Duty = %d
",duty);
led_pwm3_set(duty);
delay(500000);
if (test){
duty--;
if (0 == duty) test = 0;
} else {
duty++;
if (99 == duty) test = 1;
}
}
}