AB1601LED之pwm
直接上代碼:
void DRV_Led_Set(led_ins led_idx, drv_led_setting *setting)
{
? ? uint8_t unit_ms, unit_xn;
? ? uint32_t unit_val;
? ??
volatile LED_SETTING_t ? ledMiscSet;
volatile LED_T0T1T2T3_t ?ledTimeStep;
? ? volatile LED_PWM_SETTING_t ledPwm;
? ? unit_ms = setting->unit_ms > 64 ? 64 : setting->unit_ms;
? ? unit_val = unit_ms * 32;
? ? if(unit_val >= 0x800)
? ? ? ? unit_val = 0x7ff;
? ? unit_xn = 0;
? ? while(unit_val > 255)
? ? {
? ? ? ? unit_val >>= 1;
? ? ? ? unit_xn ++;
? ? }
? ? ledMiscSet.reg = 0;
? ? ledTimeStep.reg = 0;
? ? ledPwm.reg = 0;
? ??
? ? ledMiscSet.field.LED_unit = unit_val;
? ? ledMiscSet.field.LED_XN = unit_xn;?
? ? ledMiscSet.field.LED_PWM_DU_SET = 0xF; //100%
? ? ledMiscSet.field.LED_T1T2rep = setting->t1t2_repeat_cnt;
? ? ledMiscSet.field.LED_REPEAT = setting->nostop; ??
? ? ledMiscSet.field.LED_FWsel = setting->follow_idx; ? ?
? ? ledMiscSet.field.LED_FW_T1T2 = 0; //when t1 finish?
? ? ledMiscSet.field.LED_FW_RETRIG = 0; //until done
? ? ledMiscSet.field.LED_INV = setting->inverse; //inv
? ? //ledMiscSet.field.LED_CLK_SW = 0; //32k
? ? ledMiscSet.field.LED_CLK_SW = 1; //others 選擇時鐘沿
? ? ledTimeStep.field.LED_T0 = setting->t0_cnt;
? ? ledTimeStep.field.LED_T1 = setting->t1_cnt;
? ? ledTimeStep.field.LED_T2 = setting->t2_cnt;
? ? ledTimeStep.field.LED_T3 = setting->t3_cnt;
? ? if(setting->pwm_en)
? ? {
? ? ? ? uint32_t onstep;
? ? ? ? uint32_t offstep;
? ? ? ? onstep = ((1 << unit_xn) * setting->t1_cnt * unit_val)/(16*64);
? ? ? ? offstep = ((1 << unit_xn) * setting->t2_cnt * unit_val)/(16*64);
? ? ? ??
? ? ? ? ledPwm.field.LED_PWM_ON = onstep > 256 ? 256 : onstep;?
? ? ? ? ledPwm.field.LED_PWM_OFF = offstep > 256 ? 256 : offstep;
? ? }
? ? if(led_idx == led0)
? ? {
? ? ? ? LED.MiscSet1.reg ? ? ? ? ? ? ? ? ?= ledMiscSet.reg;
? ? ? ? LED.TimeStep1.reg ? ? ? ? ? ? ? ? = ledTimeStep.reg;
? ? ? ? LED.PWMSetting1.reg ? ? ? ? ? ? ? = ledPwm.reg;
? ? }
? ? else
? ? {
? ? ? ? LED.MiscSet2.reg ? ? ? ? ? ? ? ? ?= ledMiscSet.reg;
? ? ? ? LED.TimeStep2.reg ? ? ? ? ? ? ? ? = ledTimeStep.reg;
? ? ? ? LED.PWMSetting2.reg ? ? ? ? ? ? ? = ledPwm.reg;
? ? }
}
DRV_OdPinMux_SigSet((1 << 2), PIN_OD_LED0);//設置功能腳
AB_LED_set_blink(ab_led0, 4, 0, 0);//設置頻率
注意頻率范圍!
總結
以上是生活随笔為你收集整理的AB1601LED之pwm的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASC0106硬件连接注意事项
- 下一篇: BLE蓝牙hid键盘表