42 lines
942 B
C
42 lines
942 B
C
#include "FreeRTOS.h"
|
|
#include "chip.h"
|
|
|
|
#define PWM_EN 0x0
|
|
#define PWM_DUTY 0x4
|
|
#define PWM_CNTR 0x8
|
|
|
|
#define PWM_REG(x) (REGS_PWM_BASE + 0x10 * (x))
|
|
|
|
int pwm_config(int id, uint32_t duty_ns, uint32_t period_ns)
|
|
{
|
|
uint32_t clk_mhz = ulClkGetRate(CLK_PWM) / 1000000;
|
|
uint32_t duty = (unsigned long long)duty_ns * clk_mhz / 1000;
|
|
uint32_t period = (unsigned long long)period_ns * clk_mhz / 1000;
|
|
|
|
//writel(0, PWM_REG(id) + PWM_EN);
|
|
writel(duty, PWM_REG(id) + PWM_DUTY);
|
|
writel(period, PWM_REG(id) + PWM_CNTR);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void pwm_enable(int id)
|
|
{
|
|
writel(1, PWM_REG(id) + PWM_EN);
|
|
}
|
|
|
|
void pwm_disable(int id)
|
|
{
|
|
writel(0, PWM_REG(id) + PWM_EN);
|
|
}
|
|
//240719 lj
|
|
void pwn_update_brightness(uint32_t duty_ns)
|
|
{
|
|
int id=2;
|
|
int led_id=3;
|
|
uint32_t clk_mhz = ulClkGetRate(CLK_PWM) / 1000000;
|
|
uint32_t duty = (unsigned long long)duty_ns * clk_mhz / 1000;
|
|
|
|
writel(duty, PWM_REG(id) + PWM_DUTY);
|
|
writel(duty, PWM_REG(led_id) + PWM_DUTY);
|
|
} |