& ~5 @" d7 s b) Z% ]# d, s3 Z作者: 浙江第一帅 时间: 2018-10-30 17:03
/****************************************************************************/& v$ X7 S+ \5 O( R, Z
/* */* A8 ^% R" N6 Z9 l; A1 E5 M3 D7 k1 ~
/* 中断服务函数 */0 i/ L1 w( E8 y; u
/* */ + n* o! x" S9 L, w# o+ v/****************************************************************************/ 4 D6 I: T+ X1 ]6 h' ^* w7 A0 P. Jvoid PWMEventIsr(void)8 H, ^4 q0 B* ^& L* I/ V% m$ ~5 D5 D
{6 X( r: l0 r4 g, B4 Y, D3 Y
IntSystemStatusClear(SYS_INT_EHRPWM1);2 v' J4 Z# x, r4 r- B+ b" S Y4 p
5 I4 T9 }! s9 S8 u0 m4 ~
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);$ \7 `6 o) Q: S: k
} & R8 M; r @/ i' A3 Y9 f" y6 y! a& \: o5 ^* P; L1 f' A
void PWMTZIsr(void)- C* U- p- I5 |7 M$ c
{ % ^9 w( x6 x" q6 P0 j IntSystemStatusClear(SYS_INT_EHRPWM1TZ);+ I* d" D) y" V" x5 p! R
$ Q2 H" [9 r, }* \, J$ x1 M4 b4 V1 z
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR); 6 D$ |. o* p" e5 ^& ^1 X} ; K# O2 ~2 w, V% x$ S - C/ W0 |. n- C \1 E: }/****************************************************************************/' f# s5 @9 R5 ]' w3 r/ n4 c" U8 ~
/* */ 2 _2 `# B. i) l/* 初始化捕获模块 */ z Y# o) U) L& q( o& i* U; C7 O
/* */ 0 w0 F# R/ S' J/ M8 G/****************************************************************************/ 9 x3 M5 g1 R% ^void ECAPInit(void) + {6 N* [7 r3 P7 b4 _$ X2 x/ t{, ?+ X4 D7 x q; B) Y
/*-----设置 ECCTL1-----*/ ( ?- ?6 O: U& ~ // 使能CAP寄存器装载# L5 c% n2 k* r' K1 c: }7 r& @
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS); ; y a6 H( ?$ n/ E // 设置预分频值. 4 p# g7 @: \8 U9 ?& X ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0); 9 E5 F% D: }2 h ^) m. p // 上升沿触发捕获事件; Z5 L9 Y" d4 J- |8 h
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);4 r% T$ D* T( u) X* @
// 输入捕获后重新装载计数器值.7 Q* h* g" A H6 D8 W, @5 P6 r
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1); 9 B) q/ a# v$ E2 H8 w1 a0 y6 W, Q8 y! U' n- z
/*-----设置 ECCTL2-----*/ 4 R& N9 ~( y' J" r // 连续模式 ; g2 [6 _: D) R ECAPContinousModeConfig(SOC_ECAP_2_REGS);: Q# s& @" W4 J6 {- Z
// ECAP计数器TSCTR持续计数 , F8 Y# Z4 Z4 }* G+ i1 I6 c5 Y. F ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);: R5 W5 t7 [1 a b; q
// 禁用同步输出和同步输入5 c5 a8 }2 b0 l
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);' H# ^' D q) y+ Z! v
// 配置 ECAP 2 为 CAPTURE 模式 0 M7 k! X) K, \; ^3 o+ d% K ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE); + r0 p/ N5 i d8 a& ^, h+ e0 R! c
// 使能中断 - b# v F/ P" E$ F" X// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);/ k; {8 A# x8 ~, T; J9 ?/ w
} 7 m8 j5 v* s2 b; \( Z8 w( D8 ?! `! [9 _* W8 r3 |
/****************************************************************************/( ~5 r1 ?, y; u- c' h
/* */ * Q5 y2 [& U ^# L$ O4 H' p& q n/* 取得捕获结果 */ 5 O; A* h6 d0 a% A5 N/* */$ t' B1 n) ]& \, t; T: y
/****************************************************************************/; E0 z- X& G+ w6 @: Y5 G ~
unsigned int ECAPRead(void)/ G( s6 {9 P7 [( V( E
{ 9 h! z' }! ]1 x2 n9 \& ]3 B unsigned int capvalue;( O/ x5 b! M0 I( n4 |# [& s' S+ i
unsigned long frequency; 6 B% J! U, {- n, N+ V/ Z* n# t + \* k {1 A) i' l! m$ g // Event1 中断标志5 ^/ Y7 W7 T) N; n `- ^: ]+ a, u. x
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))6 d; g" i7 U3 b2 k7 {: K7 H# F- I
{9 Y! b9 {. k* O2 n2 O+ T
// 取得捕获计数 {) t; \* B& [7 A P* t5 x EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult); ' n+ u. n* n6 l; I capvalue = ECAPResult.cap1;! j% w1 D* S' U: \5 W
o1 W/ q% c m; O, R- U // CAPTRUE 模块 228M 时钟主频 . y; z) E& Y t+ `1 M3 N& ~% m frequency = 228000000/capvalue; 9 X2 D0 N# S% F; {) x UARTprintf("ECAPRead:frequency = %d\r\n",frequency);5 e, [9 J/ C; r7 z# g7 L* ]" X/ U \