九齐NY8BE62D学习笔记1-PWM3输出

#include <ny8.h>
#include "ny8_constant.h"
#define UPDATE_REG(x)    __asm__("MOVR _" #x ",F")

// PWM duty setting
#define C_PWM_LB_DUTY_00H    0x00
#define C_PWM_LB_DUTY_20H    0x11
#define C_PWM_LB_DUTY_40H    0x1B
#define C_PWM_LB_DUTY_60H    0x26
#define C_PWM_LB_DUTY_80H    0x31
#define C_PWM_LB_DUTY_FFH    0x3C

// 初始化pwm3
void PWM_init(void)
{
    // PWM3帧率是由TMRH[5:4] + TMR1[7:0]初始值所决定,  TMR1[9:0]越大,帧率越小, 0x3FF=1khz
    // 占空比是由寄存器TM4RH[1:0]和PWM3DUTY[7:0]决定
    // TMRH  = C_TMR1_Data_b9 | C_TMR1_Data_b8;    //TMRH [5:4] ==> [TMR1-2 : TMR1-1]   值:0b11 ==> 0x03
    TMRH  = 0x00;
    
    // TM4RH   = C_PWM3_Duty_b9 | C_PWM3_Duty_b8;    // TM4RH [1:0]    ==> PWM3DUTY [9:8]    值:0b11 ==> 0x03
    TM4RH   = 0x00;  // TM4RH [1:0]    ==> PWM3DUTY [9:8]    值:0b00 ==> 0
    
    // TMR1[7:0] 0b11111111 ==> 0xFF  TMRH [5:4] 0b11 ==> 0x03    TMR1[9:0]= 0x3FF
    TMR1  = 0x3D;                            // Move FFH to TMR1 LB register ( TMR1[9:0]=3FFH )
    
    // PWM3DUTY[7:0] 0b11111111 ==> 0xFF  TM4RH [1:0] 0b11 ==> 0x03   PWM3DUTY[9:0]=0x3FF
    // PWM3DUTY = C_PWM_LB_DUTY_FFH;            // Move XXH to PWM3DUTY LB register ( PWM3DUTY[9:0]=3XXH )
    PWM3DUTY = 0x00;             
    
    // 关闭/开启预分频器 1, /PS1EN = 1 时,关闭预分频器 1。/PS1EN = 0 时,开启预分频器 1。
    // T1CS:定时器 1 时钟源选项。T1CS = 1 时,选择EX_CKI0 引脚作为外部时钟输入。T1CS = 0 时,选择指令时钟FINST或内部高频振荡。
    T1CR2     = C_PS1_Dis | C_TMR1_ClkSrc_Inst;    
    
    // T1RL:当连续模式被选择(T1OS = 0),选择定时器 1 下数方式。  T1RL = 1 时,当下溢发生,定时器 1 初始值从TMR1[9:0]寄存器被重新加载。T1RL = 0 时,当下溢发生,定时器 1 继续从 0x3FF下数。
    // T1EN:开启/关闭定时器 1。T1EN = 1 时,开启定时器 1。T1EN = 0 时,关闭定时器 1。
    T1CR1     = C_TMR1_Reload | C_TMR1_En;    // reloaded from TMR1[9:0] , enable Timer1
    
    // PWM3OAL:定义PWM3 输出有效状态。PWM3OAL = 1 时,PWM3 为低电平有效位输出。PWM3OAL = 0 时,PWM3 为高电平有效位输出。
    // PWM3OEN:开启/关闭PWM3 输出。PWM3OEN = 1,PA2/PA7 输出PWM3。PWM3OEN = 0,PA2/PA7 为GPIO。
    P3CR1     = C_PWM3_En | C_PWM3_Active_Hi;    // Enable PWM3 , Active_High , Non-Stop mode ,reloaded from TMR3[9:0] , enable Timer3 
}



// 设置pwm3输出
void set_PWM(unsigned char fsp_status)
{
    
    switch(fsp_status)
    {
       case 0 :
          PWM3DUTY  = C_PWM_LB_DUTY_00H;
          break;
       case 1 :
          PWM3DUTY  = C_PWM_LB_DUTY_20H;
          break;
       case 2 :
          PWM3DUTY  = C_PWM_LB_DUTY_40H;
          break;
       case 3 :
          PWM3DUTY  = C_PWM_LB_DUTY_60H;
          break;
       case 4 :
          PWM3DUTY  = C_PWM_LB_DUTY_80H;
          break;
       case 5 :
          PWM3DUTY  = C_PWM_LB_DUTY_FFH;
          break;
       default :
          PWM3DUTY  = C_PWM_LB_DUTY_00H;
   }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值