#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;
}
}
九齐NY8BE62D学习笔记1-PWM3输出
最新推荐文章于 2024-07-22 17:25:01 发布