6 B9 J. J7 m/ N: m/****************************************************************************/ % ~! A( P6 _' i& V- q* ^# A/* */. V, J0 S; B: i( J
/* ARM 中断初始化 */ 0 m& T' c7 G% D/ W( o; \; w F' G/* */ ; a, U& s" ?" G+ E- |% J/****************************************************************************/& b8 A) I6 q f/ B4 g+ [" b* Q
void InterruptInit(void) 6 I4 z) _; \3 u1 I, u8 k4 p4 y: ?{" n$ _" f7 [0 a J: d6 L$ { Z
// 初始化 ARM 中断控制器 , Z* ?! x8 L6 G IntAINTCInit();) R) F( W1 e$ K: ~/ @! T- G
; e2 `7 v U$ i6 A5 j$ b4 B; c
// 使能 IRQ(CPSR)' `# ^: }9 K2 S! s0 k7 t- g% r# @
IntMasterIRQEnable(); - u/ V2 ?! H, g 4 r' |) z" [5 E+ ^+ p6 O t // 使能中断(AINTC GER) ) h& r" X( T6 b- D: v IntGlobalEnable();& X) T+ b2 p4 U! m3 |
) M! U8 z5 C$ o8 y9 b
// 使能中断(AINTC HIER) ( T, ?8 g. J! A9 L IntIRQEnable();3 I8 U& w+ M! i8 }' E
}2 c* y6 g' t3 f+ [& a7 J) N
. [5 ~, j3 F) q4 t% a4 } ?作者: 浙江第一帅 时间: 2018-10-30 17:03
/****************************************************************************/% D" I+ I0 g. ~: }/ U) y. [
/* */ 9 K/ q+ P u4 h& F/* 中断服务函数 */5 g( ~& j7 R/ {" k
/* */+ o2 N/ E0 y3 l$ s2 G" p
/****************************************************************************/ - O0 t; V5 r: [- D0 b Evoid PWMEventIsr(void) 7 h- u3 E% {& a% `4 A- }, T: a{; D" i1 H# ~6 t% e v
IntSystemStatusClear(SYS_INT_EHRPWM1);& X$ a& H; m) X/ S
) G4 e, R- r* m EHRPWMETIntClear(SOC_EHRPWM_1_REGS); }4 i6 y/ ?7 A6 w} $ |; e2 t& k- a: _+ T8 _0 U( d% Z w' O
void PWMTZIsr(void)2 W" v/ a8 ^2 C/ S% S
{ ' W3 _5 q1 }7 a: O% Z1 W IntSystemStatusClear(SYS_INT_EHRPWM1TZ);: P% J( k" a2 E4 M0 l; g- s5 |5 N
$ h2 l! q, w E9 N# g. ]1 m: M& Z
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);5 L, e6 _0 ^& U: @1 t! e4 Z
} H- [- t8 C6 c4 Q6 P3 M$ v- U
& w, ]2 x6 \' C8 ~! Z
/****************************************************************************/ 6 H/ p" e. a' W+ P: `1 F/* */ 5 S8 d5 _. A: H1 A6 R/* 初始化捕获模块 */% v; D& t0 m) @) W W5 L
/* */1 Y o+ ^; Z/ o2 I* e
/****************************************************************************/ ' P8 {( C4 @+ s( W+ Gvoid ECAPInit(void)2 h/ n/ C& p+ I% Z9 A
{ 1 x2 ?* I2 K( z! C: ?* x, m9 p /*-----设置 ECCTL1-----*/ ( c% t% K1 H/ x/ m& T // 使能CAP寄存器装载# G3 t- L" V3 X- T
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS); * G0 w y. @( t/ J9 x, a // 设置预分频值. ) }) `* D4 r+ X; Q- ?, j! l, k9 t7 y ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);7 }3 @/ r7 K1 p, l9 T' D# N/ V2 d
// 上升沿触发捕获事件 ' N) y9 P9 Q! J( D ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);; F9 ? V( K3 i: Z1 W) n
// 输入捕获后重新装载计数器值. " W2 i. V: [* v) r ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1); - c: o9 {+ }# Z( P+ Y 1 S8 E! b- k% Z2 W$ A6 \ /*-----设置 ECCTL2-----*/' i& B8 {& e: g% a' C
// 连续模式 3 M8 I2 q4 W) L8 T S1 i ECAPContinousModeConfig(SOC_ECAP_2_REGS);7 a w8 P' n5 C; C) u
// ECAP计数器TSCTR持续计数 ) J) R' y R0 G% \ ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);7 \" A- @4 Q, E2 t; v( R+ F8 }$ Y
// 禁用同步输出和同步输入7 e% _8 M v) T
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);0 G4 x2 {8 Y2 }
// 配置 ECAP 2 为 CAPTURE 模式 5 v4 f2 f% [& ^# r! s ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE); ) X: c6 C/ _& y Z: q+ L. D+ O/ V1 h, {- Y! |
// 使能中断, i% b; E* n! D& J7 z7 ~4 t7 m
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);7 @/ B) P4 K6 O# b
} - @1 e! k7 M0 ^' T! Z 5 I: F0 x# J4 A' q2 B8 G/****************************************************************************/ . f8 _4 @' d) {( f5 g5 U- t/* */ & o5 a1 K! L( T; _; n( B/* 取得捕获结果 */- G( A s) Y8 D" u! {% _
/* */ 7 [" ~4 f' K8 K. Z5 z" s/****************************************************************************/ 9 h0 O% i5 } [8 q: Dunsigned int ECAPRead(void)! ]) e# h8 o: h5 C( _4 j
{/ A9 @9 G' x5 f4 h. j4 H
unsigned int capvalue;# M3 L J; ~2 ^7 b0 q3 f$ F8 a+ @
unsigned long frequency;. ~1 T6 e* R4 }$ q: u# j2 \
B. I+ \. u) Z // Event1 中断标志$ O: }! i9 I) v5 m' f2 e
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))& T! d- @* M' k U ]4 @# i+ y
{ - Z. R. l# D4 c$ G0 E& a, T // 取得捕获计数/ b% L7 o; m9 B; \
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult); 1 }4 c, c" C3 I capvalue = ECAPResult.cap1;' y% d, [: u% a! H. h