|
根据历程的硬件PWM计数修改后,无法输出PWM(逻辑分析仪确认),但如果直接将 PWMA_CR1 |= 0x01,输出是正常的。求教!
void PWMA_Init()
{
P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
//Timer0初始化
AUXR &= 0x7f; //Timer0 set as 12T, 16 bits timer auto-reload,
TH0 = 0;
TL0 = 0;
ET0 = 0; //Timer0 interrupt enable
TR0 = 0; //Tiner0 run
PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR1 = 0x68; //通道模式配置:PWM模式1
PWMA_CCER1 = 0x55; //开启比较输出并使能,高电平有效
PWMA_PSCRH = (char)(PWM_PSCR>>8); //设置分频
PWMA_PSCRL = (char)(PWM_PSCR);
PWMA_ARRH = (char)(PWM_PERIOD >> 8); //设置周期时间
PWMA_ARRL = PWM_PERIOD;
PWMA_CCR1H = (char)(PWM1_Duty >> 8); //设置占空比时间
PWMA_CCR1L = (char)(PWM1_Duty);
PWMA_ENO = 0x00;
PWMA_ENO |= ENO1P; //使能PWM1输出
// PWMA_ENO |= ENO1N; //使能输出
PWMA_PS = 0x00; //高级 PWM 通道输出脚选择位
PWMA_PS |= PWM1_2; //选择 PWM1_2 通道
PWMA_BKR = 0x80; //使能主输出
// PWMA_CR1 |= 0x01; //ARR预装载,开始计时
IE2 |= 0x80; //IE2相关的中断位操作使能后,需要重新设置EUSB
EA = 1; //打开总中断
}
//发送指定个数脉冲
void TxPulse(char rep)
{
if(rep)
{
rep -= 1;
PWMA_RCR = rep; //计数rep+1个脉冲后产生更新事件
PWMA_CR1 |= 0x89; //ARR预装载,开始计时
}
}
void main()
{
Gpio_Init();
PWMA_Init();
Delay100us();
// GetDistance();
// if(UsFlag)
// Distance = g_distance;
TxPulse(20);
while(1)
{
}
}
|
|