ジェリーAC 692 X-PWM設定


最近杰理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%が選択されている
// 
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; } } }