static void PWM1_Set_Freq( unsigned long freq )
{
unsigned long temp;
struct pwm_config *pwm_ptr;
temp = freq;
pwm_ptr = (struct pwm_config * )freq;
//周期寄存器,分频寄存器,数据寄存器和计数寄存器进行配置。
*(volatile unsigned long*)PWM3_CTRL_V = pwm_ptr->pwm_ctrl; //PWM模式
*(volatile unsigned long*)PWM3_DIV_V = pwm_ptr->pwm_div;//分频
*(volatile unsigned long*)PWM3_PERIOD_V = pwm_ptr->pwm_period;//周期
*(volatile unsigned long*)PWM3_DATA_V = pwm_ptr->pwm_data;//占空比
// printk("PWM1_CTRL_V is 0x%x\n",*(volatile unsigned long*)PWM1_CTRL_V);
// printk("PWM1_DIV_V is 0x%x\n",*(volatile unsigned long*)PWM1_DIV_V);
// printk("PWM1_PERIOD_V is 0x%x\n",*(volatile unsigned long*)PWM1_PERIOD_V);
// printk("PWM1_DATA_V is 0x%x\n",*(volatile unsigned long*)PWM1_DATA_V);
//最后我们所要做得就是使能PWM
*(volatile unsigned long*)PWM_ENABLE_V |= 0x4 ;
// printk("PWM_ENABLE_V is 0x%x\n",*(volatile unsigned long*)PWM_ENABLE_V);
}
PWMSet(0,0x0FF,100,50);
//至此,PWM模式的使用就已经结束了,现在我们来简单看一下高速GPIO模式的使用,
在此模式下,PWM直接将数据FIFO中的数据从高位向低位移位输出,移位时钟就是计数时钟,输入时数据也是从高位到低位顺序移入数据FIFO。TIMER模式下,PWM就相当于一个TIMER,计数器等于周期寄存器时,发出中断,同时可以输出高电平,低电平,翻转电平或者保持输出,可以选择一次计数也可以是循环计数。