标题: 请问一下怎么产生PWM波 [打印本页] 作者: 浙江第一帅 时间: 2018-10-30 16:46 标题: 请问一下怎么产生PWM波 请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家 1 x; k, l. U5 G- K4 T, p作者: 浙江第一帅 时间: 2018-10-30 17:00
/****************************************************************************/& @, m' }. N1 t
/* */$ I2 I, i; c: {% b4 b% j
/* 宏定义 */6 k4 o8 r# K2 [
/* */ % ?3 Z. _: w" ~5 E7 I9 Z% r/****************************************************************************/6 z& c$ X6 u: i3 P
// 软件断点/ y: _4 F3 K9 N; A- [; C* Q
#define SW_BREAKPOINT asm(" SWBP 0 "); 9 z9 ?' r8 v# C* f& j3 F- M3 [* y5 s7 ?2 ]; M) h- V. H0 S
// 时钟分频! \$ y i. o6 y* o3 y
#define CLOCK_DIV_VAL 228 1 {- h5 c) q% j' v: E1 f4 p % O. t3 p9 k/ V9 k/****************************************************************************/ $ d" g1 z7 q3 ^0 A7 R" V5 S. M/* */1 t, E6 J& e7 A) Q2 R5 Z' y
/* 全局变量 */ ) m! |; [* E7 M7 j5 |9 B, o6 H/* */. `. d- U, h/ I; t
/****************************************************************************/ 8 e* Z. f' e0 E7 F# ]- `$ kECAPCONTEXT ECAPResult;. v o- ^$ o( Y3 L
1 j3 q, @- ]3 R3 w- W" O
/****************************************************************************/1 K8 m3 r9 }: Y
/* */1 n, Y0 @' H9 _# f5 z6 J
/* 函数声明 */ 5 M+ Q. P) e! E' u z/ J/ W$ l* }0 n/* */ % e7 C* d6 x3 ^9 _) S4 r2 \' h B/****************************************************************************/! R- T6 s; h7 L) W- z) I
// 外设使能配置 ( l3 v1 i$ W4 Tvoid PSCInit(void); : _. Y6 L. l( p$ ~; ^$ j, v : {- V% _1 K+ k. K// GPIO 管脚复用配置0 _) O; T# }2 g9 k
void GPIOBankPinMuxSet(); ) F( Z, Z& g) v: x; K, H; m9 X( M. t7 {
// 产生波形2 o. j0 a8 P$ u+ N& u
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio); : {) l V3 |. H" A6 I: g' Lvoid ChopperWaveform(void);) m5 G4 r5 k" o3 W
/ K% z2 r4 w c. ]3 e, k
// ECAP初始化和读函数$ w: O1 |: ]* }
void ECAPInit(void); $ `0 _; ?( S$ X- w4 Dunsigned int ECAPRead(void);: W J- c. A2 p! _
- R* o) f8 t5 a& N+ I
//ARM 中断初始化* ^1 n$ k0 ]8 ]
void InterruptInit(void); 7 r& P$ z4 K3 [8 n; m 8 [" ?- u) V* n- v5 v// PWM 中断初始化" z. ^ j; F% b. G: g8 S5 c+ I) m
void PWMInterruptInit(void);* C0 J* F; m6 b& b
// 中断服务函数' y" b* z, w! a3 X M8 a0 n$ ?
// PWM 事件1 M3 D: S' V/ K6 t; I
void PWMEventIsr(void); ' g3 {$ }+ {3 q// PWM 错误控制事件 + C9 ^; }3 F' B$ ~+ r4 J" u: }$ Qvoid PWMTZIsr(void); % a& q8 c9 E( M" C* @9 f0 }" |& \6 m- u8 N8 f6 G7 j
/****************************************************************************/ ( a! @* Y; J. F6 ~6 n& M0 e! O/* */ * i+ ?" ?# M+ T% D, w/* 主函数 */, ]$ Y$ A9 e& q' P/ t& G; w
/* */2 B' p" k9 }& k) V* l! R
/****************************************************************************/ 6 w) H! T6 z1 V( t* y' f9 cint main(void) 5 U& @+ p) A& e{ % r1 b4 f5 G0 i0 d) H- w // 外设使能配置 , H6 R( z z+ O* t' @' X. q PSCInit(); 3 H" _+ S+ `% @# V! L0 W$ I7 G& m& @6 a
// 初始化串口终端 使用串口2 ; }+ g; \" j# o1 a7 Q3 F UARTStdioInit(); : D3 E0 z8 V1 v) y7 [ 5 T# F2 U( K4 t4 F7 p% c // GPIO 管脚复用配置 1 B: {- z; }! U1 c: y( t GPIOBankPinMuxSet();- [& [6 i7 d* S5 S" z
/ ?1 R3 H7 s. E4 | // ARM 中断初始化2 u1 I; E4 d$ g
InterruptInit(); 3 e* g4 Y# X7 C1 F; s z) `6 V" Q! z& g) z# H6 l // PWM 中断初始化0 Z. r5 j6 U2 q. d
PWMInterruptInit(); 7 G+ j. d/ m1 k! t, i+ A! E6 f4 N- u1 r
unsigned char i; 0 A/ r. B7 G- u3 C5 `4 J* q* a unsigned int j;4 A E3 S7 M) m; z: S
: h1 Y" |1 C% Z5 p UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1); _+ G6 G2 ~/ Q1 z UARTPuts("------------------------------------------------------------\r\n", -1); # z% l0 L3 a+ E/ B& a UARTPuts(" C6748 PWM Test\r\n\r\n", -1);- s; ]' o3 x6 P
// 产生波形) g; b( _( a1 c& _8 V; ~! u
PWM1ABasic(25000,50); / g! a; b/ u! J7 G# F M& \& I4 b8 q- K7 `, ^
UARTPuts(" C6748 PWM Test Over!\r\n",-1);5 k% h7 R) @8 v W
UARTPuts("------------------------------------------------------------\r\n", -1); - N5 P" R( m/ h8 D5 ]1 _# ?! I- I: o) z; E1 q$ q$ R
5 \3 R; o7 K; ?% \+ U. B& } 3 X. Q) z1 q/ s( I UARTPuts("------------------------------------------------------------\r\n", -1);# E& }% u2 i$ k4 p
UARTPuts(" C6748 ECAP Test\r\n", -1);5 \4 P3 y: p: e' f; {
// ECAP 捕获初始化7 W+ \/ b# ^& s) }* ]
ECAPInit(); ( x! b5 P- P9 v/ g4 \7 o UARTPuts("Initialize ECAP.......\r\n",-1);, C2 |/ J4 i* q
for(i=0;i<5;i++)1 b: |4 ^' c( P, P& w7 q) r
{/ a+ E4 F& t/ {! [
for(j=0x00FFFFFF;j>0;j--); // 延时6 u' U. J; K3 R+ l8 }- t
ECAPRead(); : z$ n. X+ w5 g# e/ k2 h* E } 4 X9 N" H% x( S4 ], E- Q4 ^; B UARTPuts("\r\n",-1);6 R1 v3 b: C) w, g
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);' w' x* D! R5 W( i: n" E2 W) @
UARTPuts("------------------------------------------------------------\r\n", -1);) d- t# G7 j8 _, f) B# v. d6 e
' p6 g& C- v5 Y4 \
// 主循环 5 J+ w X' R& J/ m/ v2 U- p for(;;)4 m9 b6 o1 q+ x* f+ f8 A2 }
{0 l+ ~2 F( ?( j( L: m# P# o
+ |5 y% o. q- a& b$ i
} # X% N0 g; h' `- o+ M* f$ @8 c} @5 i7 o( q- z9 |; T, e2 a 0 M t" q* L( |; g1 E0 E/****************************************************************************/1 i# R8 ^3 b8 b2 _, X: C) ^
/* */! R: q3 W' l2 w4 S( O' `6 k8 H7 O
/* PSC 初始化 */ % I8 w* V6 C: E1 B& ^. C/ U% L. w8 k/* */ ; P2 F( Q7 `& W7 A9 L/ B4 u0 i/****************************************************************************/ " W8 b' x) A! J9 B" Avoid PSCInit(void) - S, e4 V/ ~5 Y" R3 ^{" J1 E# ~% p& J& e) o6 X
// 使能 EHRPWM 和 ECAP 模块 7 U8 G; }! |. E t# C+ H( h, d // 对相应外设模块的使能也可以在 BootLoader 中完成2 P. R0 n) O/ g4 ?& a0 e3 s
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);" V. h) W7 @1 g/ X
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); $ i& X8 O$ k+ g8 G6 l, ^7 {}! v; H- \" T0 n% \0 O
( J: Q4 G2 d1 w2 Z4 p+ \' f/ u/****************************************************************************// }4 @ O; C8 g
/* */ ( i7 |) [- C7 q- V/* GPIO 管脚复用配置 */ " G0 k/ [' I. U/* */ @+ T% z3 g' G; M+ E$ I: _" N* a
/****************************************************************************/ 2 k" V9 g8 s T' N3 c, z3 o0 svoid GPIOBankPinMuxSet(void) + K- c% t( j1 V% _ `( C0 J{ . \1 }, V; F: I A EHRPWM1PinMuxSetup(); " [* }2 \4 i: a N/ i 6 m+ Q, Z% E1 T // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP) ' e( Q4 J0 G# D, Z; `4 { // 作为捕获功能时管脚方向为输入' {* d9 h2 m' D& C! L" _- ~ K" j
// 作为辅助脉宽调制时管脚方向为输出 0 S7 C1 w8 H! j! \; N+ |) ] // ECAP2 / APWM2 - T* Z1 |* a3 y, K, |; k ECAPPinMuxSetup(2); 3 t& U C; p% s7 T4 y1 r: V& e8 n% n: M) H2 b' h
// ECAP2 / APWM2方向设置为输入 / D; E2 A V. B% P) j" h6 k GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7] " R3 N% q# [' r, t$ a" d} 9 X* Z' F% D7 s/ w7 }( K( m* r! I1 z5 C
/****************************************************************************/8 ?' L: {8 A6 B9 v8 n: j( ?$ C# w
/* */$ Z r6 p! ~" c7 f
/* PWM 输出波形 */ g' I/ s; J4 C1 z4 _
/* */( f, q* S4 l) j2 _$ k
/****************************************************************************/ ! p7 A# s2 d$ A- nvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio) 9 C5 Y5 s0 {( |{, }2 ~3 r4 _" a- U6 H* u0 a% ]" z
// 时间基准配置* D! [. a z( g0 g
// 时钟配置 6 M; w" m* H& t; m3 d1 D7 l3 z EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ); 6 r6 T" \' e7 R) v5 D7 ]+ @ Z+ v! T5 e. s! P" p
// 配置周期 * P0 l, I: b4 g1 j+ E Z8 N EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL, A: J- v3 t9 `, u pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);- t* M+ {; S% r: d: \1 H0 A
. c, W2 s* O8 k* h/ A4 f
// 禁用输入同步信号 3 V6 p* k! n. U/ J, a EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS); 8 I0 P# P& d* v; ?$ M1 E' s: x- z) u0 [+ L
// 禁用输出同步信号% j0 U0 D5 D0 s0 E9 K7 ~. ]" S1 }
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE); ; x3 h' H' s+ ~# v4 u 8 O4 e& R8 L* N+ m // 仿真(DEBUG)模式行为配置5 D4 G8 F) v9 V
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);" O' J8 @" L0 b' B% O5 c$ S5 `
6 R* T, K7 ~( s/ I // 配置计数比较器子模块 z+ ] d; Q( ]" [* p! C" @6 a
// 加载比较器 A 值$ @: q; \+ a5 g2 w
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,; c6 j: I# \8 t! A8 `; V# U
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);9 B: z3 L' [3 }1 R2 S8 d
j5 m% Q8 ^2 H& x // 加载比较器 B 值% M( N( H7 i/ C I% K
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,3 s# m) t' S6 _2 b- ]6 c
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL); 6 S; a! f1 T) j U: h. X6 N9 Q' V9 z) l0 n* I" Q7 L" d# v1 R$ e6 z
// 功能限定配置(输出引脚触发方式设定) : `6 ^" d; R& j7 }% Z+ w+ ~; ^7 P // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出 ' E" f7 u8 e% i% k- Y& E9 B EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,% j* y$ G# M& V9 S
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,7 t, T' G, d7 O6 h9 t! Z1 Z/ F9 ^" ~
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);0 O% V! T: c0 y, a0 x$ j
3 n0 o2 S" M6 m( U( m& Q# O // 禁用(旁路,信号直接输出到斩波子模块)死区模块! H9 e3 n$ U! L' U7 e6 x. F
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS); }0 t( o4 {" T/ Y8 j$ A& [7 G- F( |- S( N. Q% g: f6 y
// 禁用斩波子模块 5 k* z" p8 _4 f0 V, d! F$ @ EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);/ A x3 `+ y) S" Q
; C3 z) x9 `& _
// 禁用错误控制事件 ' p- Z! r3 S9 T/ x" u5 Q: t EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT); u9 ^( n0 D) E/ Y EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);, v1 R6 v6 s! G% K1 b
+ n7 B6 a/ w$ m' g) Y5 F1 E
// 事件触发配置 ! J2 }* k1 a& a$ y0 f* a6 O q // 每三次事件发生产生中断 ! h1 a; m, _) Z6 H# Y EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);5 ^, D5 m- U U# X2 r. i
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件* m6 y& A! U7 @$ o0 F3 j
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC); $ a! v# m, L* I7 [ // 使能中断 8 b/ P4 e& @3 M1 p1 S; M EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);% I8 G9 d% k3 N" J
& ^$ L* ~* \; L _6 j // 禁用高精度子模块 @ ]9 w* V/ U EHRPWMHRDisable(SOC_EHRPWM_1_REGS);' ]" x# @; ?4 [/ s8 X% C i
+ P0 y4 d4 O k* Z0 l! Q UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio); - G/ w4 Y4 C7 Z( q6 D( n} " d& E1 H; `( C 2 O: t* F& r/ m' Yvoid ChopperWaveform(void) . T" a( n' [# D) U{ * S8 _' X( B/ t% E% N // 50% 占空比+ D3 X. C7 q) M5 V* D! `! w" f
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);: _/ m/ u7 e9 V1 t' l* u8 X: i
// 4 分频+ }* F) D' Y6 }& U2 O* k& ?6 n
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4); 1 k; G- [6 H6 V6 H // 单个脉冲宽度/ ]$ A0 z- E- i# U7 y. ]. p8 s- W( S/ C
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);6 x1 a/ M8 h1 @) y& t- R- \5 f
// 使能斩波子模块& z7 \1 ]& F& L( v
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS); & o; J$ O" W5 y% Y) D: ^' Q} 7 O' X" e3 v" W+ F* N2 w 2 @" ]: ]+ P) ~& T/****************************************************************************/ 2 D8 O0 V7 ? d7 ?/* *// T: H2 ?) y" _# s2 b8 ~' _, Z
/* PWM 中断初始化 */ 3 b H X0 r a/* */ % i/ j+ s0 p6 E$ `; ~1 T {0 _/****************************************************************************/ ( W) I9 J* Y' U. t1 rvoid PWMInterruptInit(void) ' y$ O% ~0 r& i+ Q{2 x4 S3 p1 e2 x& i; f9 P
// 注册中断服务函数 3 B/ ^- {- y- d7 z2 k" D5 ? IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);4 H7 Y' u, n; ~! E# ~
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr); Y. Z. H. a6 S# a' j/ J3 u; T4 e/ ~3 i4 V Y
// 映射中断 3 `, k6 D" }% v3 e4 X IntChannelSet(SYS_INT_EHRPWM1, 2);* @8 Y6 [7 P# S
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);6 n' o! ^! G6 _6 w
9 ~/ h0 t! F# z! d) ?" \" x, X
// 使能中断' u/ t- D: O6 J
IntSystemEnable(SYS_INT_EHRPWM1); * h, D6 l& i0 V$ J IntSystemEnable(SYS_INT_EHRPWM1TZ);3 L% y8 k8 \) j1 ~
} 0 Q( X: ^: z$ S: u$ C6 C) {* \9 ^. B) U7 u# l
/****************************************************************************/ ( ]# t" A- l1 F; A/* */" k! E* k' H- D( p3 u" ?, E1 A4 d
/* ARM 中断初始化 */1 ?0 `2 d& I# y) b* a
/* */6 ~2 U l% A, h' V
/****************************************************************************/ % i* h; T' P7 bvoid InterruptInit(void)6 w* W% f* V7 y3 c0 y1 E
{, T6 G+ {2 }) }% V u$ l. T
// 初始化 ARM 中断控制器0 @5 _( H8 L' l$ A6 |7 l3 H: Y
IntAINTCInit(); " _/ ~( N0 g1 S) a( Q + k4 O4 i3 Y1 A$ q& I9 z // 使能 IRQ(CPSR)5 K q. ?; G( ^/ S# `. Y( q( U
IntMasterIRQEnable(); % y1 ~ v( f3 X$ \' I5 Q7 E/ n . Q+ d5 Z' L6 ^) l: h ?9 c" } // 使能中断(AINTC GER) 6 ~, G$ j0 c& e( O" {1 P IntGlobalEnable(); ; f- ^- o& g: L, x/ ?$ l/ j( Y& V; H% F5 n# |( r
// 使能中断(AINTC HIER) % s) O- ]$ i2 g5 o Z4 H IntIRQEnable();6 }2 @1 {" Q2 y/ M, h( Y: D
} ' n8 r. c/ \+ ~ # y5 U C, M5 i: U; ~+ j& n/ } X+ b作者: 浙江第一帅 时间: 2018-10-30 17:03
/****************************************************************************/. p( ?0 X0 a) U7 v
/* */2 ]1 X" M; @7 D" O. W
/* 中断服务函数 */4 d' j/ z& t! `0 a; C
/* */) Y& T4 w3 o7 i! }: p* W" N
/****************************************************************************/ 2 R0 `3 T* W0 Tvoid PWMEventIsr(void) ) t+ O/ t8 F: F, m7 ~{ % J4 [. R+ s! m* c IntSystemStatusClear(SYS_INT_EHRPWM1);* H) E! g# a A j8 B0 p+ g7 q0 g
' [; W1 \. V( W: e$ w EHRPWMETIntClear(SOC_EHRPWM_1_REGS);8 M' G8 l9 j6 m7 G: u# V3 ?2 Z" W
} - x0 v0 d0 ]: t* p* y5 J& D 9 Q% t( g& s1 l' V4 O! o4 n- ~void PWMTZIsr(void) - z4 h f' R- S1 N{ 8 z+ w' v. D- V( ` IntSystemStatusClear(SYS_INT_EHRPWM1TZ); 7 v# O6 F7 ?* S: e R0 i1 v; S' S/ D& B; @. ]2 b9 C) c( V
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);9 j- K, v1 V9 w
} + P2 _ \0 Q6 ?( E % j. k, r# k9 E# V* }2 \ S/****************************************************************************/ - [: k; E% }$ [+ P) ^7 X/* */ 9 X* n" N6 o/ W+ O N/* 初始化捕获模块 */ C7 X6 ]$ N c( _9 v' \
/* */ ( i0 \: X |* C1 n! S1 O+ K/****************************************************************************/ $ ?$ a# F2 @9 @. s* e) [void ECAPInit(void) 5 g& u8 S) c/ D# ]7 K{% z! o! X$ I9 _6 L
/*-----设置 ECCTL1-----*/ 7 [1 J, E7 B5 C( F // 使能CAP寄存器装载 E8 L1 c1 e7 M2 P( H5 u5 W( y
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS); 3 G' Y4 D9 L3 w$ I& F // 设置预分频值.4 D- P* M0 |" }) Z% F9 [. W% a) a7 V
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);# f( X& J# H" m9 A# f( t. l; J
// 上升沿触发捕获事件 $ ]) C" X; g `9 e1 p7 x ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);9 M- |1 L" i. _( z+ i
// 输入捕获后重新装载计数器值.' f$ k7 r& i' }' t: Q
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);: E7 f& L& t0 [
( P3 P# r9 i; h
/*-----设置 ECCTL2-----*/ o0 r( Q$ {1 E w( Q1 |' q // 连续模式* ~9 o4 J3 w, j6 g7 C3 \- I7 n
ECAPContinousModeConfig(SOC_ECAP_2_REGS);! W* w# s6 l* b! @
// ECAP计数器TSCTR持续计数7 e) y0 K5 Z8 Z# y @! u
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);) J6 Y9 k8 f) B7 T% _- Y/ a6 W
// 禁用同步输出和同步输入+ M* i2 u. n" A* x/ @0 I1 T
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);2 T9 r# J& f! X4 c3 w
// 配置 ECAP 2 为 CAPTURE 模式 & g: l6 ~9 C2 t" c5 Y Y" v ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE); 3 Q$ V- V) c4 [0 e" v 3 A+ M# Z7 ?; S // 使能中断 ~2 _/ d/ ^: e2 G0 [
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT); 0 C W7 g5 U/ m) ]6 J) O; C0 _% c5 V; ?}" H3 ^0 a9 T5 T1 a3 ~
$ j9 K) o4 Y7 J8 c
/****************************************************************************/, {* Z! B! H% A8 O' g
/* */ # t: r( \5 O$ C l0 q& V* G/* 取得捕获结果 */ 1 W3 N( t7 T! G+ }- I4 z: Y/ B/* */7 I s9 f; N5 i# s% D
/****************************************************************************/ 4 F) q3 }9 e. D6 y" h4 @unsigned int ECAPRead(void)' m' U: h" j. f, b" h9 [
{ , U5 a2 x5 s) c' b; B' J) a9 m/ a unsigned int capvalue; 6 s, ^1 [* }+ ` unsigned long frequency;; s; U, Q! x. T' B$ W( q% D5 h
0 R# k, b9 s: r9 U
// Event1 中断标志2 z/ f3 }7 H9 Z1 F
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT)) 4 p, o+ v! T0 f9 h! T# h w1 @ { & G b9 [3 V. X) d // 取得捕获计数 . j1 ^, p5 ~% r6 y4 f EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult); + |% }. V Q# w- f0 e capvalue = ECAPResult.cap1; 5 a* _3 P0 g: |1 i" g6 d( g* [: Y4 v* j8 E [0 Q
// CAPTRUE 模块 228M 时钟主频' F, {! L/ d; l5 k* [, G* ], H( Q
frequency = 228000000/capvalue; - [( E# j, j, D: y0 S UARTprintf("ECAPRead:frequency = %d\r\n",frequency); 5 @8 L/ ^8 N, w! n/ y8 I# q, X( H& O! R( ~% L/ G/ Q
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);$ F: L' y+ q4 C6 D
// IntEventClear(SYS_INT_ECAP2); ) W% W S8 t# x, R) e8 i: c } 6 A. k6 H( B) T+ X0 r: J return frequency; 6 Y$ n9 t- ]4 w. ]# |}0 K9 m, ?7 a' J: T& Y# Z 作者: 浙江第一帅 时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波作者: 广州创龙莫工 时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。1 }$ D! y. S9 ^ [. d4 z s
[attach]4202[/attach]作者: 浙江第一帅 时间: 2018-11-1 21:27
可以给我发一份吗作者: 广州创龙莫工 时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。