0 \) l: I. Z' ~; o; r. d7 w. V // 配置周期' f2 H" }) Z2 i) v
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL, + y2 K* ]+ v3 ]/ L pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);# v2 w0 q2 ^: D/ N0 R1 \
& P& H* p; O' V, j7 B0 y // 禁用输入同步信号' t( g# C$ Q! A t, u* a2 p
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);0 U i& j t" D# F
: C% G( D3 L3 |- M3 e) h8 C
// 禁用输出同步信号 2 U% R9 f: x d- M, e' o) S c! a2 S& W EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);+ F) C. H& Y8 p6 S9 L8 A8 W
c N+ v9 O/ |9 x3 i
// 仿真(DEBUG)模式行为配置 4 M' ^! Y; {5 z/ F8 @% y EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);* T9 x8 H: K* h
( j) S+ [* D0 |2 |8 I2 P // 配置计数比较器子模块$ I! P! i+ V7 r, C9 R
// 加载比较器 A 值 ) i9 ?6 ?+ H1 g. o; d9 n+ k EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,$ P. I2 I; w4 z# {8 |9 N2 k
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);/ K2 q' U. s8 q1 M. z; ~7 t: u
! k' [. I2 m3 b0 j% }8 _4 x
// 加载比较器 B 值7 o& p& r1 u9 G+ O& v
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,7 o7 x4 u5 Z6 d+ @( z- u4 N4 a
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL); " c* S/ P/ F3 B3 e- H6 m6 f" _; d, d$ D+ }" i
// 功能限定配置(输出引脚触发方式设定) ( [5 q% Z' V, l- T: e9 f5 Y- i& Y // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出 $ T% X5 v2 n C1 f7 m, m! m1 D7 H EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,0 x- x R( O+ J8 j4 E& h8 r
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,# {0 }) X" d- O2 N- D5 L
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING); - g3 [7 S4 M/ g) m1 O4 I( d/ Y1 j3 R {" Z
// 禁用(旁路,信号直接输出到斩波子模块)死区模块" |% `( O$ A3 i8 ~. g
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);. B I% h& r+ \2 [2 H. E
. I; G5 }1 G+ U Y" h$ g3 k( t3 F+ k
// 禁用斩波子模块$ j. j- t2 G3 K6 s5 G
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS); E4 ?; X7 i7 Z: Q1 q
0 N0 ? P6 X. G- t9 v
// 禁用错误控制事件# a5 L: ~, b- I8 m
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT); " O) G9 T5 a% l2 k6 q2 Z7 g. b; R; l; S EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE); $ c9 @! k2 Y5 V. s, B - ?7 r7 ~& k& m. A _5 n; F5 ?0 W // 事件触发配置2 U% K" F, g, _' n! J; Y
// 每三次事件发生产生中断 + y5 `" [# p8 u EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT); : G! w4 d( i7 Y1 S* r8 [% J% x // 时间基准计数等于有效计数比较寄存器 B 值 产生事件4 u/ y1 q6 u9 P& O
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC); % W, ~' C5 Q8 M: h9 t, G // 使能中断 + j: C- S) r; ~3 s3 o! w EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);2 { z8 O$ V; J0 B
/ [3 y3 r! m3 {1 O9 h1 x1 [ // 禁用高精度子模块1 Z2 T) u% V, m2 j0 @& s" G
EHRPWMHRDisable(SOC_EHRPWM_1_REGS); * u4 m" o5 W3 ]% q3 U6 `; O' i5 O6 }$ k, E9 x. `& C' v7 L; o
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio); / a. O1 f7 G2 o; g; x" G}5 D' q ]4 }2 k- Z' x
2 m2 q; o/ z6 ]* ]7 K; H
void ChopperWaveform(void) 9 B0 \) ]7 e9 s& L! f! x{ - y2 c) l6 b6 y // 50% 占空比, j Z2 K9 l) Z
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER); 9 Z6 k" v# X- b. w8 ` // 4 分频( G0 g$ m b, d+ p! W& M
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);. J! X( Q4 @& S
// 单个脉冲宽度 4 S$ Z' V/ I/ R9 C$ A4 K* Y% W: r EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);4 \: C6 Z5 ^! g9 `" l
// 使能斩波子模块 5 }1 [& v- H2 e" x) g. L4 W: Q EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);4 \1 e. G' M$ v; a0 t
} B! T7 S( R# f T4 [1 G. e w2 p& s/****************************************************************************/ 5 j, z; _/ r9 n9 \! j; J/* */ i$ X1 U8 t- D& }8 e% \+ q5 |1 A0 A
/* PWM 中断初始化 */ 5 R3 B4 _ q, P3 P3 I; S9 L/* */ ; c/ `( m* J2 I6 t6 v- u/****************************************************************************/& B- q4 Q" J& i I1 O" D; ^
void PWMInterruptInit(void)* z% N' m' r% |( r
{ / [/ w: H9 O; e // 注册中断服务函数 0 |/ z# \1 O) ?8 o IntRegister(SYS_INT_EHRPWM1, PWMEventIsr); 3 o& o. L$ ?2 x; y9 f; h1 G7 { IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr); " `% X$ {2 u! I$ Z2 w5 I/ F8 E 8 \/ v2 S) a/ i) l // 映射中断$ G( j3 M" u9 m
IntChannelSet(SYS_INT_EHRPWM1, 2); , `7 U; n1 u+ ^ C. t IntChannelSet(SYS_INT_EHRPWM1TZ, 3); 9 [$ w; ~. H2 w7 K7 y! C* k/ M 7 i n4 M+ f* | @, W+ d. M // 使能中断 9 L) e5 f" b* B, e! T. z o IntSystemEnable(SYS_INT_EHRPWM1); 0 T. D( h6 V' A; y8 b5 Z) n: G, e' c IntSystemEnable(SYS_INT_EHRPWM1TZ);) [ b' X+ X! j6 U5 X; D; a
}* y) i" { P* F) g0 t+ Y! A
- u8 A# s9 t* X3 ~/****************************************************************************/ t. [* ^1 d L& E& ?
/* */8 K& k& G' @6 Z3 q1 t. [% u
/* ARM 中断初始化 *// X |0 }; y3 r" ]$ s& P- k2 I
/* */ 3 V) G# W1 S& n$ m/****************************************************************************/ 2 b( z: q* Z- s3 {; D/ Dvoid InterruptInit(void)+ {0 i4 k5 y8 T) r- j& N
{4 h P; |- E' \4 x
// 初始化 ARM 中断控制器 & K8 D( l2 Z4 p# Y9 {; I IntAINTCInit(); 9 Q" }- d1 z4 B2 Y : P. u$ o% T% J // 使能 IRQ(CPSR) ( r) F- v* j6 z5 l IntMasterIRQEnable();* h+ Z: R0 W5 V5 S1 Q