7 p& M# B# ~ y) n2 p// 时钟分频, R& b. U9 f6 H% z! W* H- g
#define CLOCK_DIV_VAL 228) s% R$ ?" |2 m
% b1 W& H5 }3 G4 [4 d# R r
/****************************************************************************/ * ~/ ?9 {- p5 K! F6 c6 Z) m% N7 `/* */# S+ o9 J9 m) v0 `" n! [
/* 全局变量 */) i* ^+ s: {9 D" Y! X5 T+ x
/* */ . J7 c. Y; I2 D. c, h, f/****************************************************************************/% z. v( s3 N2 g/ P# t0 b' |9 N
ECAPCONTEXT ECAPResult; 1 n8 s/ ?1 k) x% d% S% L2 H" P! S! P) E1 e4 _, `
/****************************************************************************/ ) n8 Y# W1 S1 Y+ A9 u/ @& Z+ A/* */5 j i% @9 y2 o) c9 y4 i3 `
/* 函数声明 */1 W# S( ?# k5 Z) ]
/* */% t& X; I: t- N9 p$ W. I5 R
/****************************************************************************/ 3 `' |" e/ P9 t1 ?: Y// 外设使能配置 / c) c: \* x- Kvoid PSCInit(void); 8 i* F4 R. g/ H7 g7 z4 A. I4 @' y
// GPIO 管脚复用配置 " F8 Q0 [- z6 ^1 f5 ^" kvoid GPIOBankPinMuxSet();# O$ c4 ?$ a8 C( i
: B2 i' s7 q8 H9 F4 D
// 产生波形 4 y {- M* ^$ Q* \" ^; tvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);* i3 ^7 m9 ~% Q* R- K
void ChopperWaveform(void);) w! P% s, n0 W* s: H) N. D5 y
# @# J7 z; ?4 |3 k+ q2 I4 B `: V// ECAP初始化和读函数8 J: g6 C4 v5 ]' g2 c$ J) c6 W d
void ECAPInit(void);2 W0 b$ l( m; P! Q1 P. G
unsigned int ECAPRead(void);0 S1 ~0 x& J/ p) E' z
! U: o8 P! ~) @$ {) e
//ARM 中断初始化$ [8 H1 M! D1 N ?! L# @
void InterruptInit(void); ' r$ \, h3 I* j" S& T* s6 V* {/ b7 t" d3 M# }0 f" S% a
// PWM 中断初始化4 C' ~! D3 c6 {8 v% A
void PWMInterruptInit(void); ( f, x' R. ?1 }/ X9 Z4 C f7 [( W// 中断服务函数' V' e+ j9 R! ^& c W- I
// PWM 事件 1 k. z5 w6 P" s6 o+ P2 }' Avoid PWMEventIsr(void);! b7 g( \) B8 [% ]. p1 F3 U( E
// PWM 错误控制事件 ; U+ C E J7 y# H1 ` Q0 e, Bvoid PWMTZIsr(void); # C! V0 z( \: O+ T: }, { 3 O& Y2 O) y6 ~$ ^! Y/****************************************************************************/ 3 [) T0 m/ {/ r) l8 x/* */& r1 N2 v6 x# l! T
/* 主函数 */ ( j q$ f- C9 Q/ n! C& ~8 E/* */+ d' O- T4 J. U. f7 e$ X
/****************************************************************************/ : C6 l/ S+ j% Rint main(void) : M: W3 K- v! S/ ~2 N+ `{ , e) }) q9 ]2 h' N // 外设使能配置 % s3 V$ E! W5 _. \- _" x1 ^3 J$ E- V PSCInit();/ ^8 W% O# t3 f. f
) }9 z' ^8 ^& ~- J( Y
// 初始化串口终端 使用串口2: Z. W: i) D0 `8 x3 N/ [/ p
UARTStdioInit();' \4 l7 D7 U/ C4 e; ?' X0 V
: C9 D) B; t8 e4 X4 T3 b4 Z9 F // GPIO 管脚复用配置 ) p$ P0 g3 ~: d6 B GPIOBankPinMuxSet(); 1 N# K2 ~8 H D4 a* G$ O1 t M1 w$ P4 X' C* |
// ARM 中断初始化 1 }! j1 k+ z* ~$ _ InterruptInit(); 0 y f" H1 U g T) O& Q + l7 L( I6 G [9 e \ // PWM 中断初始化 ( p! K1 g( c! i" ~+ L" D) |$ m PWMInterruptInit();( e: J0 z0 C& g
$ I4 x& G: w8 w' t! \
unsigned char i; ( Z+ K+ E6 D+ w* ? z7 p unsigned int j; $ {: V5 V5 V. R c) u: n# K6 U. S8 Z9 p0 q# M h/ h! n9 N
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);& y& R0 A: _: v8 B+ V4 u8 ^
UARTPuts("------------------------------------------------------------\r\n", -1); ( J( j- A: z, R- y1 R UARTPuts(" C6748 PWM Test\r\n\r\n", -1); + L: L, u1 W+ ]: g2 W // 产生波形0 v4 f( ?3 ?0 e3 v# b1 i
PWM1ABasic(25000,50); ; Q2 S4 p& U% ?- z c* \ - ?, r7 k3 T, F: w2 D UARTPuts(" C6748 PWM Test Over!\r\n",-1);7 E' u4 Y2 s }, n& v9 K, ?! S0 m# s3 e
UARTPuts("------------------------------------------------------------\r\n", -1); $ i# f3 {1 n1 V8 O; Y {1 d 7 S7 b6 S. R5 Q2 Z& d8 n 8 _( [. H0 B4 Z3 F7 f9 W4 V% U' n6 ^; m) x8 o0 N
UARTPuts("------------------------------------------------------------\r\n", -1);0 B0 Y, T- @% L% @2 b' ^
UARTPuts(" C6748 ECAP Test\r\n", -1); 6 b1 g( D5 G' [% o // ECAP 捕获初始化 : x/ n' x9 f& I" w7 P' h! o* W ECAPInit();0 ?+ v+ y$ U# q9 O) i" i5 J9 t' ]
UARTPuts("Initialize ECAP.......\r\n",-1);0 k6 z8 `6 Y) T8 O: q
for(i=0;i<5;i++) ) o; [3 Z2 e0 W9 v/ m {' e0 p7 K/ D- q) ^
for(j=0x00FFFFFF;j>0;j--); // 延时# S$ z5 Q& m+ u- x
ECAPRead();& V2 ^. Z1 W! r" r0 m) A* ^0 S
} ! v) p* R: B2 Y; O" Z% N" d$ b UARTPuts("\r\n",-1);1 `+ k7 l. H' p2 D6 @5 x1 q0 _; q
UARTPuts(" C6748 ECAP Test Over!\r\n",-1); 4 H! j% @+ w3 ^) f UARTPuts("------------------------------------------------------------\r\n", -1); i* W- q( l9 B; Z" w' E ( O9 q$ U) I! V/ V // 主循环 # L1 Y( I: O3 P% a" I for(;;) * k. C% `- C0 e# `5 [# R' h, Z1 {& | {2 H5 f1 u/ R1 I6 }* j V# a
, q1 @( [) a4 X8 u$ ] ]5 W! R
}! S q( D& g/ U: B
} ]. @" b, n/ l5 W/ h& E- G 6 n- ^" B: ^" w$ v% r/****************************************************************************/ / p' j1 |, a3 n$ F/* */ " f+ A7 j6 G" v5 c4 y/* PSC 初始化 */ , z$ v) z! e" Y* e) O/* */ 7 i( y e6 i0 u3 @+ K/****************************************************************************/ , U4 k6 j4 [, E1 {void PSCInit(void)5 O, F7 y. y/ j+ {1 Z
{9 j( K4 f% J# L6 A
// 使能 EHRPWM 和 ECAP 模块* U! g; ]) {6 }; p
// 对相应外设模块的使能也可以在 BootLoader 中完成 , s1 \1 I5 G. Y! c' ?, o2 o5 S4 l PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# V& c. S9 m+ t) Q1 O5 i1 T
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);5 ~& u' K; r2 u3 Y
} ; e9 m/ V! F# X% {$ T0 _1 K/ {) A! i 2 P# B- T) C& X* h5 u6 z3 O0 S. Q+ z/****************************************************************************/ 0 i p" H# n7 e! Q" Q" c/* */( v& }( h; P3 T0 z
/* GPIO 管脚复用配置 */ ( F0 C+ @ ]6 ~! b$ F, D2 r, U/* */ 5 @/ ^. ?6 {8 @/ {2 C( I8 P/ S# i9 T/****************************************************************************/ / w, |; K$ @ B2 svoid GPIOBankPinMuxSet(void)' J: `" G2 `6 W5 G* Z
{( y, B$ M- {1 B
EHRPWM1PinMuxSetup(); $ K' f; z: ^& f% _ 0 L( `6 B0 B3 j- H' w/ n- ] // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP) 2 U. s" r1 Q! a: y; a* g // 作为捕获功能时管脚方向为输入2 J- S) ~) a8 h2 X7 \
// 作为辅助脉宽调制时管脚方向为输出9 Y1 k6 M: H/ ^' d0 L8 C% r
// ECAP2 / APWM2 ! A1 `% m. ^: _/ U3 _ M+ W# F! ] ECAPPinMuxSetup(2);, g- k1 R i0 n+ f, f
" ]7 [' ?! v! q" L9 s8 M# U4 c
// ECAP2 / APWM2方向设置为输入( Y! B+ r# ^$ d- K1 A3 A) E
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7] - Y; V$ C- |1 r0 j9 z% ^} ( C, I& `& a. ^1 @, J' X 1 o* Y% w$ ^! [+ Z/ o G/****************************************************************************/% k& C! ]. |' F% Z
/* */9 M9 R# V/ b- B2 N6 w8 q
/* PWM 输出波形 */ $ Y4 D* O% ?6 U) u! c/* */ 5 _7 {( G5 h9 K8 Z. g1 m/****************************************************************************/ ' G6 K+ s( @& [$ I$ O, u# `6 Zvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio) , y( I4 \2 R1 j5 Y, ?) U{ $ d [; ~0 Z9 |9 S# i0 [6 y" ?, M // 时间基准配置* I- [0 R: y, C" q6 r
// 时钟配置! m( K% [. q1 [" {
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ); 9 M" V* [# {. D( R( }& n( G! D4 F) | b8 w, l
// 配置周期 d2 M2 T* y7 J! Q0 T* e
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL, 4 ^) [, m1 x+ |6 u3 W pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);; t7 Z2 }$ y+ t* K9 L9 J( ] j
4 w; h( y$ F3 l- E% ?/ |3 W // 禁用输入同步信号 ! m( o* f$ z3 }# l+ c* ], _& ] EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS); 2 X9 G2 F. X6 S+ ]" a8 Y1 a) j2 c1 Z$ \+ g+ @
// 禁用输出同步信号0 W* I+ |: U9 h
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE); + {8 a5 z* }; \- C% e/ Q# R8 a4 e # V3 I& V1 ^! z& a) y* E* l // 仿真(DEBUG)模式行为配置0 ^% V7 I6 \; F; E ^; T$ b
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT); * [ ]( W& V# |" }- c' T" m( ~3 ~8 |: {- Y' y& }0 V
// 配置计数比较器子模块 - F6 w( @: w) _9 z // 加载比较器 A 值, }4 P5 V3 G6 B3 e9 O: s, f( |
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE, + }; `0 z' G5 [" y EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL); : O3 L1 W7 r2 W 9 c. P. ]* }6 g // 加载比较器 B 值1 I2 |2 X8 ~- Y4 r
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE, {, `4 Q) z0 C) ?6 m
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* J5 `1 E+ @) o8 ~2 H
1 M3 ^# c5 _' s: Z1 A' x" E
// 功能限定配置(输出引脚触发方式设定)0 i: Z2 W/ u8 P9 v' ~
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出& ^( J' d5 J. q
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,6 r/ o5 O$ Y, @& _! B# q; [
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE, % G6 Z# _* t" ?( S! K9 f EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING); : U1 n1 P2 r4 f" }6 N5 o, w- @- r/ G
// 禁用(旁路,信号直接输出到斩波子模块)死区模块3 E7 c5 _0 i; y2 q0 I% C1 f7 B
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS); ( }1 x, {4 V/ W1 ?: }/ e1 z: C- Z2 c; g
// 禁用斩波子模块4 z( A9 t( v6 i8 T
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);, i. m( {. p5 c# w/ g
- s( S3 _2 A" l4 @/ L: W: z // 禁用错误控制事件 5 A% H+ ~; I/ l0 l, g0 J6 f EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);( g& r$ Q4 y3 }
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE); 9 e. ~/ R+ w0 F, Y) k- Q/ K, Q: h: k4 Q, W
// 事件触发配置& H6 B/ w7 {3 F7 V
// 每三次事件发生产生中断: n! U7 x" h4 [4 G# Z
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);; Z7 b/ r% Y: y' T( r+ f, ?
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件 : C2 y& Y: k% k5 B; a( H EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC); 9 O3 G d. t! C // 使能中断 9 V, c$ g( z* G5 t. h* ]( X# [ EHRPWMETIntEnable(SOC_EHRPWM_1_REGS); ~; R6 `! R5 [: d; g4 ]& k z$ f$ @& x2 k
// 禁用高精度子模块 p( W6 y! b# d2 a, | W1 ?, |2 q EHRPWMHRDisable(SOC_EHRPWM_1_REGS); % K8 s5 N1 P% D; @4 w& L- D* q% C A+ Z# a# C7 t0 y$ J! L
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);. W) z9 q% v& F% k0 P0 H6 ~: I
}1 z- s# c" O- a
& v& ^6 _; |/ Cvoid ChopperWaveform(void) ' v. T/ R1 Z: u" G' }% k ^* d{ ( A7 D+ [9 t* g* ? // 50% 占空比 , f# [- W3 ~) q* \$ U4 i' p) c! p' ^ EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER); ; K) C4 V+ i2 F9 w. g // 4 分频8 t3 q6 h/ M/ i5 R' l
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);# L, E ?: S; Y5 u
// 单个脉冲宽度 + B+ y2 ~- [ y2 {3 F1 h EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF); ( y, Z Z- f. B2 H# Z // 使能斩波子模块& h+ d3 _2 a; i
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS); 0 [' e% i5 H# }. K2 L} - P7 D; H# I! b3 d9 P$ a* w6 r# ?/ n8 |4 ^( ^' o5 m
/****************************************************************************/ 0 J+ _7 y& }2 A, X) j/* */2 k! w: f, g. z! Y6 `* J
/* PWM 中断初始化 */ + E% i" u6 y% @" K/* */* l( n4 x8 R2 V, G; C
/****************************************************************************/. Q4 u0 a8 g! G4 D0 d
void PWMInterruptInit(void) ! a% m4 \8 l( H+ ?, ?$ \{ # h; H8 R4 L& [+ M // 注册中断服务函数) p9 X: z! Z; ~8 d1 s5 m: M. ]
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);, }2 k# S3 f" E o! y
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr); . b7 D9 h2 D! ]2 e2 @7 _" S1 _- {' k$ _" M$ _
// 映射中断) @, r! {, x. [5 ^- M# R
IntChannelSet(SYS_INT_EHRPWM1, 2); " r" x2 P' f. y9 @1 B# q9 s IntChannelSet(SYS_INT_EHRPWM1TZ, 3); + Y; a$ h, H7 s ? X : s6 o6 c7 e% J' ?: L // 使能中断 9 e* g" N6 F+ p+ o. b IntSystemEnable(SYS_INT_EHRPWM1); ; t9 b: m1 J) B$ e- O+ G7 z# C" \ IntSystemEnable(SYS_INT_EHRPWM1TZ);& f1 O# y( B8 @
}4 N4 n4 M0 C/ I
9 ?! ^' s8 t! v- E8 |0 g, V' S7 o
/****************************************************************************/ . `- h6 e h; @! g2 r: n/* */- I' K+ ^( ?. s! z0 o3 o4 M6 v
/* ARM 中断初始化 */" G, V2 d3 O* b. j' g) x
/* */ 6 b: w2 M7 p7 M/****************************************************************************/9 @( v3 p5 [. Y
void InterruptInit(void)+ w6 { M" z5 P( @7 h# u: x
{8 X3 d" C) ?" g9 ?) I* ` e
// 初始化 ARM 中断控制器3 I; j) d( _: O* o1 P9 u& N* D
IntAINTCInit();) i( `9 O9 Z* o% w/ b' ~
% M& x! Y n/ j- V; [- e# C& r7 c
// 使能 IRQ(CPSR)* U8 v o& }: R% s. g9 L
IntMasterIRQEnable();5 N, u9 P3 C" H& i
% Z. K* m' I4 H9 E- u6 {7 y: m
// 使能中断(AINTC GER)( [, x# C: D3 T
IntGlobalEnable(); 6 c4 |' }; s C# ^% @ 0 D' r/ N7 N+ q // 使能中断(AINTC HIER) $ n4 K! ?2 m" c! \% a IntIRQEnable();' Z' j9 c0 f" E( [
} 2 C1 n1 ?0 `) a) r+ H: r # a# ~+ I+ z: k$ f6 c0 j+ M作者: 浙江第一帅 时间: 2018-10-30 17:03
/****************************************************************************/ * K' H; i' }9 I& V7 t6 D" x/* */ , J \+ q. Z4 {. |1 i) g0 i/* 中断服务函数 */ 7 [' g. c$ J( e |6 ]1 s: `; B/* */7 ?, ?% ]3 T. i8 J
/****************************************************************************/ F @% c4 c: h2 wvoid PWMEventIsr(void) ! K) p6 c0 _) D7 [ G% b @{ ]5 b9 o0 X: {- {8 @/ w! S
IntSystemStatusClear(SYS_INT_EHRPWM1);/ z7 R! A6 y2 W5 w
8 U3 q2 e& Q" C. p EHRPWMETIntClear(SOC_EHRPWM_1_REGS);$ b0 X# f& n3 X: o! n; @5 O
}- F' g; y; ~+ K" U- h; G
2 r' m C t' Y1 {( i$ N
void PWMTZIsr(void): i6 | ^" _$ D0 I. n/ [5 h
{4 u. s* J( H$ a$ y4 g
IntSystemStatusClear(SYS_INT_EHRPWM1TZ); # R) P# \8 m k3 a( t. j2 |( A
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);8 L6 P6 [" Q& V" _" [( \
}% \( A' H4 Y7 u' j4 G4 C
- F3 d- M4 u6 s( F% X2 m/****************************************************************************/; o+ g7 [2 a* ~3 T9 u3 l2 P
/* */0 c# x0 e" s4 A: d
/* 初始化捕获模块 *// \: u# u2 R0 h* @! Q y
/* */3 T6 ]. V$ l4 n' O
/****************************************************************************/, N0 K& H# ?. t9 `8 R4 P4 e
void ECAPInit(void) ; W4 B- Q/ L9 L; y3 |3 z' ~7 U7 v{* J% n! e) F- e& N5 G
/*-----设置 ECCTL1-----*/! t1 N" E6 |/ q4 t
// 使能CAP寄存器装载 0 X! O4 N2 v; X+ d# }8 _1 q ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS); ) p9 F* r% I9 B2 d5 H& P // 设置预分频值. ! D5 l! i* T2 m ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);! i# { U" J# t0 B9 P9 ^, W, E! B
// 上升沿触发捕获事件4 g: o; i& S; C: C
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0); 3 Z' s1 f# K8 E // 输入捕获后重新装载计数器值. p' P N# }9 M- W2 Y- k- P+ q
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);5 t4 V; V0 X6 C; Q; P
- @0 |! L' k3 @9 V' @$ X
/*-----设置 ECCTL2-----*/& ^* Q$ C$ W% e. E! y- h4 B) f
// 连续模式3 h B+ N1 y* I8 c
ECAPContinousModeConfig(SOC_ECAP_2_REGS);/ T% F$ M6 {& W7 W
// ECAP计数器TSCTR持续计数 ^/ `9 J8 K: g6 c7 G0 _& t1 ?4 G1 @ r ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING); + d/ u6 K/ x v // 禁用同步输出和同步输入 - |+ I g9 I: O- J, g# ?4 C2 ^ ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);/ F4 R9 l6 _2 j+ c$ {3 ?) h
// 配置 ECAP 2 为 CAPTURE 模式 O: t8 e4 |* k, d* o7 \! ?1 K0 u" t
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);3 K7 t1 T5 T. K R; B( \/ w9 D
& G5 ^; V4 m& h // 使能中断/ O% J0 F' U/ p: Z* H' d
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT); * h, T! I& a% H3 ~) @} M% Y2 }0 {# h6 Q; q8 E8 D" Q$ @, o7 i2 v1 B3 \+ r! Y6 y7 w5 h. U8 w8 L2 E. B0 E
/****************************************************************************/& f% S- [$ E2 |- k2 g
/* */- \- _! m' Y: R: \% O
/* 取得捕获结果 */ 3 w; s* ]5 p! c N2 I5 I" a/* */ 5 X6 l* v: [3 C" P& S* `4 I, b* W2 X/****************************************************************************/ 6 i) w# n- m* @8 o9 Hunsigned int ECAPRead(void)' d$ M: u' ?' H$ ^; M
{9 D* q: E9 L/ y" l
unsigned int capvalue;, h' E8 B; b) d3 s: x5 q" e
unsigned long frequency;) r% h6 a. J6 t& f2 x8 g
% @1 d5 M" f) F# S4 K' l
// Event1 中断标志 , j7 h) \ ~' T. N1 ~. n& Q if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT)) % X% z, i( a' @% u4 e7 ] {3 j& k% b( Q4 x5 a: K$ X# h
// 取得捕获计数1 r, ^' H3 b0 G |
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);2 F8 Z* v1 S# _) n
capvalue = ECAPResult.cap1; ' R [# ?0 X! R* F ( ?# ]5 K: y6 m# [ // CAPTRUE 模块 228M 时钟主频$ K: d( K `& H m
frequency = 228000000/capvalue; ! h8 z6 {; A, v7 f( U UARTprintf("ECAPRead:frequency = %d\r\n",frequency);) [7 [; c5 Z0 D6 O; o3 @ v
: J1 O# @' ^ Q' u% N7 L) J: L: z+ y
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1); E& j% E# L. I' R
// IntEventClear(SYS_INT_ECAP2); / ^- S% q* B4 C) [9 U } 0 @0 L8 X4 x0 _) j# w5 V return frequency; : k' S9 h; a) J/ \1 f}0 k$ ?1 F( w5 |. g) ]) B 作者: 浙江第一帅 时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波作者: 广州创龙莫工 时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。 & [0 @. W$ X+ d4 M[attach]4202[/attach]作者: 浙江第一帅 时间: 2018-11-1 21:27
可以给我发一份吗作者: 广州创龙莫工 时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。