标题: 请问一下怎么产生PWM波 [打印本页] 作者: 浙江第一帅 时间: 2018-10-30 16:46 标题: 请问一下怎么产生PWM波 请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家 . W- k1 f0 t" G5 i作者: 浙江第一帅 时间: 2018-10-30 17:00
/****************************************************************************/0 ^" C7 ?: @/ T1 f$ a1 e
/* */ ) G2 R- E% f" o( C6 A1 S5 I/* 宏定义 */ 2 l' p' L2 x Z: Q# |7 u1 Q( _4 `$ v/* */ 3 J( O5 z' Y. P9 C" p! ^/****************************************************************************/1 w5 T* s( `% g E# E6 W
// 软件断点1 ]+ ?& B, p3 Y( g6 k
#define SW_BREAKPOINT asm(" SWBP 0 "); + m4 Z6 C! C" A# ]' d( M$ s6 O& F) w& T; b7 {5 H/ d6 L4 q
// 时钟分频& S0 H3 E$ E3 e* D( O I
#define CLOCK_DIV_VAL 228 ^4 E1 M" R3 t7 L, u
4 J2 Q0 }; [" p% ^( d' l9 z
/****************************************************************************/& M' V( S5 G/ J
/* */7 z6 }% w/ ?- `+ N& s
/* 全局变量 */ $ [& l& f0 _3 j! f/* */6 L q) L, P. Y2 U
/****************************************************************************/ 6 T7 V0 Z0 d9 S+ _& b4 x! ~ECAPCONTEXT ECAPResult; ! C4 M1 C- t0 s- C6 }# l- y, a% [' i; R5 b1 h
/****************************************************************************/ 2 }) j/ e. V, O7 i1 w$ v: V! C1 k/* *// @6 V W% @1 H5 c$ i% X5 ~
/* 函数声明 */ 9 H% d5 a9 ?/ s" i3 m/* */ 3 O! o% Z+ p* q# l$ ?+ J/****************************************************************************/1 M4 d; n# K' t0 ^/ e, D
// 外设使能配置# r4 B* {' f4 \
void PSCInit(void);) R. \& h, X. n6 ~. n' x1 e" J! t
( w3 v% _4 O/ U: S9 h0 T y2 w2 F$ k
// GPIO 管脚复用配置( w# j. L) \1 m; |6 e
void GPIOBankPinMuxSet();1 f$ r" O! Z) Q4 J
4 ~6 X( ?5 J' L7 q6 J: P
// 产生波形 . H r* q6 Q% Qvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio); 3 J6 e" \7 x6 _/ I2 g. k9 B6 Cvoid ChopperWaveform(void); 3 Z6 r2 k8 e l5 S/ g4 N, d7 n1 P( [; f# q+ ?1 L
// ECAP初始化和读函数9 y& ~; s' c* Z: z' O+ z+ Y, M
void ECAPInit(void);) N" z7 Y/ x# Z: c4 ?0 e3 m
unsigned int ECAPRead(void); . e! g: b; J* O# c " V7 t, W+ a: K$ N//ARM 中断初始化 6 [" Z* R1 ~, y( {, K% e/ avoid InterruptInit(void);& t+ A' U* `% W1 g _
6 [5 _6 z3 u# V, P; f
// PWM 中断初始化 1 o3 ?9 }" K. l; J4 ^void PWMInterruptInit(void);7 ?6 n0 {% R( p/ R9 r9 x! h
// 中断服务函数 - m# N: S4 N2 v3 r, j// PWM 事件9 b8 p( `9 D& m8 B }/ u7 ^4 [- G
void PWMEventIsr(void); 6 k3 A! O" S1 O5 w// PWM 错误控制事件 * N+ ]" w. ^4 U& w+ Qvoid PWMTZIsr(void);( ]( W8 ~, o! q8 H( e" F
5 F6 v2 }1 x" \2 g( L) W( X! [$ B/****************************************************************************/* l" b1 Q2 I" y& i( `' z
/* */8 j9 m. ]% C: [: x/ n8 d' v
/* 主函数 */ + h# _- f; e/ v7 E! b/* */) b, Y4 j% m4 t. N
/****************************************************************************/ 6 D, p" d$ O) S" ~int main(void) . b. m% t; m# H0 ]{ m" M- p A: w7 {# O
// 外设使能配置 9 a0 K' T! b/ {6 b6 j+ a; V7 y% z PSCInit(); 7 P4 E- m: S, P. D3 f) r & N) U& f/ a* F2 N // 初始化串口终端 使用串口20 O) h7 p, s. |: C
UARTStdioInit();. x" ]$ w9 y( m6 A% W
+ m' N/ d. t5 m; D4 | // GPIO 管脚复用配置- p4 t$ `9 q- C H( @( O9 ~
GPIOBankPinMuxSet(); 7 k3 @: |; I3 G' ]% @2 M w- W # ^. d. j, i' a4 L& G // ARM 中断初始化 3 T3 C9 P/ Q' B5 g0 } InterruptInit(); 3 p ~) M$ l7 i9 M$ {( Z! q: s9 S" U; N% e# |' {
// PWM 中断初始化% `9 @: X5 i$ O
PWMInterruptInit();9 H& ?, k9 W; B( G7 p
]% z" E+ p5 s& k* b unsigned char i; ) w& @ d* f/ q" ? unsigned int j; / D! f7 ]) B9 S4 _ $ O5 k8 E) z+ _; h UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1); - D* x$ {) i; i, s' A8 g9 P UARTPuts("------------------------------------------------------------\r\n", -1);# p+ Y8 m' M2 c) h; v
UARTPuts(" C6748 PWM Test\r\n\r\n", -1); 4 v' ]/ O; h; f% H // 产生波形 ' W) g0 t( I5 o. Q# v PWM1ABasic(25000,50); / u) I: ]* ?6 G9 R" D4 Q+ \' r6 ^' ~7 @. E( j* Y
UARTPuts(" C6748 PWM Test Over!\r\n",-1); ( }1 i. T) L+ u' g; }. F$ O1 Y UARTPuts("------------------------------------------------------------\r\n", -1);$ [. p& N0 |, V7 y
: a# ?8 A! N9 R G: C# {8 ~6 f3 B* J) y
; J1 ]* k. X9 ~/ W) u9 B UARTPuts("------------------------------------------------------------\r\n", -1);+ I7 F9 N" N; _( D& w4 `
UARTPuts(" C6748 ECAP Test\r\n", -1);7 J! a) D- m. X2 @! v1 Y7 B
// ECAP 捕获初始化& `. D+ S; m; }8 K2 u! W" ]9 Q
ECAPInit(); 3 o7 j3 X. k- y& A- x UARTPuts("Initialize ECAP.......\r\n",-1);2 r& y! c8 ]5 G/ B
for(i=0;i<5;i++)& a r" ^- _# j D3 x$ S' A
{+ |2 }0 S) p7 J, _0 C) g
for(j=0x00FFFFFF;j>0;j--); // 延时 9 C5 D! w0 t* U4 K. E' c' A ECAPRead();4 z" h" h, W q% ]. J3 F! o- V! A
} % I9 s m3 \( A& q d UARTPuts("\r\n",-1);' i, M. n; _7 p9 |" i Z) C
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);* C) _* U7 a) f
UARTPuts("------------------------------------------------------------\r\n", -1); " k. ^4 C( g& o ( ]6 P9 k5 J1 F% _5 c+ s // 主循环/ K2 O' [; X1 `& Z/ f% }' \0 X, Y V
for(;;) , c5 H+ C5 w9 i$ p, a2 g1 K [" j {. Q" u4 H' b# V$ p! b
" V. q+ I/ \9 e a" w }' \2 Z- O3 Z: b" L
} 8 ^# a! {- r9 {9 i4 Y1 }* t3 O, h8 @3 i& F
/****************************************************************************/$ [2 s$ }- m, n% ~( s) x0 h
/* */ . Y& G' b- V$ A( I/* PSC 初始化 */ ! F" \" k. P6 L$ o9 I/ r/* */ 7 }/ r' O7 ?, _1 N/****************************************************************************/" T- Q- P g3 ?$ F, @
void PSCInit(void): d4 P Z# Z6 k4 y
{ , |) G" n% a1 d! x, O/ w- q // 使能 EHRPWM 和 ECAP 模块0 `6 @" B% s& @9 r0 T: x
// 对相应外设模块的使能也可以在 BootLoader 中完成 + \- m% C r2 n0 o1 I ? PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); 6 W/ y1 Q1 D) E% J1 |4 G PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); ) H: J; R8 V- p" @' E5 u# Q}( ?+ ^$ b( G8 S4 q% M q
' _2 m. d: T$ m
/****************************************************************************/ - S' c* W) H- v/ ? g/ m: u, s# V/* */ ; {! n& B$ l9 m3 P5 C/* GPIO 管脚复用配置 */ $ {* u8 [; A$ q! `6 [0 Z3 @$ D% g# g/* */$ ?# r9 m- L5 n3 |+ \$ ?+ {
/****************************************************************************/1 q* y4 U" u$ G% L
void GPIOBankPinMuxSet(void) 0 ]. H4 D x) |3 k3 d; P" R7 n{ 1 ]4 k, V# ^/ B- W EHRPWM1PinMuxSetup();) w( J! I4 o% W# q" |/ `- f
* U- P h. f; f% U" o6 i // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)* X6 Q* v- {6 R
// 作为捕获功能时管脚方向为输入4 `( W. e# q/ c. z4 [) `. @& ]
// 作为辅助脉宽调制时管脚方向为输出9 E, O& ]5 `. e- A# f
// ECAP2 / APWM2, J/ F* ~/ ^! \$ s0 Q2 v
ECAPPinMuxSetup(2); 6 O# p r% m8 V; q# v( X8 }. V# ] W5 B" G 3 B$ }! W. Q# m+ ^* Z3 `8 B // ECAP2 / APWM2方向设置为输入 ' r. B5 l8 n/ \" _- K7 ^7 U GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7] - M8 N" _- f6 m6 t: J0 L: r. @}4 ?1 B- J3 U0 Y
/ I: _0 |4 k7 i" T; p0 ^! p6 Y+ t
/****************************************************************************/; h5 R& W1 |5 m1 H! A P
/* */" C3 D7 i& \% h4 l: `* G( h
/* PWM 输出波形 */3 Y) M# `1 e! a$ p' o8 i( ~5 a
/* */5 Z: q( B! O# G& m( k
/****************************************************************************/ 5 o6 `8 x& R a9 Q$ k& m; ?2 L7 Lvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio) : y3 Q+ g+ V1 K$ M{1 G( \+ ?) a) N. E5 G! ^1 U& |
// 时间基准配置 9 y- [4 o, {9 J F) L( P // 时钟配置 1 ^2 } x" b- w& t6 s {* { EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);3 _4 H4 r. {2 X- k' ]
& I, |: D ?5 b' }& [ // 配置周期 0 c6 r) q; m: `- i' m% U EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL, 4 L/ r; U9 l) I& j0 H5 s% r6 o- P pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE); 1 Q, R. r, p. ~" P3 b% }# X3 t/ J% s- c* ^ @- y
// 禁用输入同步信号1 s5 Y3 r: u& p0 k P8 K; W
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS); 7 Y( a- |; q8 V( |, M 0 f* t2 g6 B3 e3 B" P // 禁用输出同步信号 : I7 d( }4 F# R, M& \ EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);2 _ A6 g a( Y& \
+ ?' C0 Y" I9 t' r6 @* @9 B9 X
// 仿真(DEBUG)模式行为配置. A3 }, ?& i) J5 }, c2 v4 w- Z
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);) L5 s! k8 k5 C- }
- f9 z3 o2 L- K7 A$ b // 配置计数比较器子模块 , F8 n$ q, |9 V9 ? // 加载比较器 A 值" T) q C; D1 m1 A( S/ n
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE, ; ^' y( j' N6 G: D. o; S EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);5 Z+ i2 M7 P# b( [6 \6 N
* E4 q# ?# i' a6 y l) a0 V/ j // 加载比较器 B 值+ P1 g! j- a9 o1 K
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,7 x, p7 m- `* ~1 h* L( [
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL); 1 B& n' L8 s$ {/ {9 T % }9 z4 d8 Y5 q. E) c* w // 功能限定配置(输出引脚触发方式设定) . }5 [% w7 G0 t // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出6 j- _( A1 L5 ]; g# F) a4 n) w
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING, + F! j6 y N% X EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,& o w$ m+ `0 u: U. w
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING); 7 m. Z ]: N# P! t, Q( X' f- Y4 \( M9 j* D3 p# k0 w
// 禁用(旁路,信号直接输出到斩波子模块)死区模块 H3 {8 d' x% ?2 ~; O2 G, w. j: y
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS); e: X# A- R# b6 G5 P 2 i4 z1 S- o/ l' h // 禁用斩波子模块% p1 d7 ~, G* B
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS); 7 _) h0 m7 v4 h& v4 i. D g% j$ E% O4 @. `+ z# I+ [
// 禁用错误控制事件 d. h% T" L/ n* U4 [ EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT); ! g g; q& k: R EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);6 W! n' G' x. d. N. O" ^
$ a2 z$ Y" b5 o$ B# {$ `7 _9 ?7 Y
// 事件触发配置 7 l- d* T8 o. I1 k // 每三次事件发生产生中断 8 H# D1 e8 o# O+ _* i# ]& ~ EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT); ! S" I9 ?! q5 R- y0 k // 时间基准计数等于有效计数比较寄存器 B 值 产生事件5 `$ \& v, n+ B& N
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);$ Q9 f" K( E6 m2 m6 H* g( \
// 使能中断! t/ q: ], u8 Z( R- ^; V4 E' {
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS); % V5 o6 y. }6 W ) k* V8 l! p9 C" R2 v/ t$ e, d5 Y // 禁用高精度子模块 5 e& M) q, S" [/ s( B, Y EHRPWMHRDisable(SOC_EHRPWM_1_REGS); W$ P+ H( n* n% l) J6 ^
7 c: ]7 Y* p: {1 B5 k
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio); 5 U4 ~/ g" c1 g8 |- i} % ~ D. j4 Q! s+ ~ 6 d& X& j4 x t9 }$ S! |; B4 Lvoid ChopperWaveform(void)5 g" F+ U8 C* K* V$ E+ B+ q
{8 O8 ^% R7 U; k: J6 G: n
// 50% 占空比 ; _( J \6 m/ b4 O EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);- J, K7 n" L3 N" ?
// 4 分频3 ~- [7 C5 Q0 F4 m! G
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4); ! f/ w9 F) ^/ J* d; _( r/ [2 J/ v // 单个脉冲宽度3 }3 f7 M* V+ R6 R$ Z7 Q0 Y
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);# a8 k9 F$ \2 ~' [$ p
// 使能斩波子模块, [, x9 \' A1 Y
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS); & z+ u+ P- B- a0 k' Z' d}& x# @+ O& s; K {% e" m
: F ~! s' J- G" C' k
/****************************************************************************/ ( t& ~0 a e6 p! {# `3 j/* */& j& Z/ ^# c* W% K! O& T
/* PWM 中断初始化 */ ! @* o% V! _7 c- ]; v" W/* */ + G- M8 D8 v' R: Z/****************************************************************************/ 1 n1 |4 Z7 ?( }# K# ^, U4 B. |9 L. ?void PWMInterruptInit(void)3 c$ f8 z# J. P+ b. k: w& Z
{ " r4 _- J4 z8 W8 N# s6 k // 注册中断服务函数 & z2 }/ o( h. Q! U IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);) b" g0 M$ s/ k1 J! s. w/ P6 Z. o
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr); 2 q2 T/ B6 R0 f" ]% r( A& q; U, @/ Z8 ]3 M q: U( t
// 映射中断 % B+ D7 e6 w$ h3 b( C. T$ x$ @. D IntChannelSet(SYS_INT_EHRPWM1, 2); 2 t/ w5 N4 @4 n" X) X IntChannelSet(SYS_INT_EHRPWM1TZ, 3);3 b* I0 i9 L+ z: b
% _4 G6 I( w' Y: Z
// 使能中断' P, X! \2 _! c" O$ a7 K- A
IntSystemEnable(SYS_INT_EHRPWM1); 4 L: y4 }$ C- v" P& U& y IntSystemEnable(SYS_INT_EHRPWM1TZ);' q6 Q. D& V, ?! |
} * A: e5 E4 k1 }$ y' g1 p5 R+ N$ t$ H
/****************************************************************************/ 4 P; l4 i' `4 h. B' i/* */) C$ a. T, @5 `7 [4 s$ j: T# d
/* ARM 中断初始化 */2 G1 r6 O. f& v- B
/* */ + B5 d7 [& m' V0 ?/ b/****************************************************************************/# ]! X5 q0 y5 O. s4 j2 u) x% I1 @
void InterruptInit(void) # X7 t3 l5 M1 f. l/ i& U{: q1 F) L s1 Q. _& ~2 q
// 初始化 ARM 中断控制器 / H& u! j: ]/ w: w IntAINTCInit(); 8 |" W% o3 g | 8 A& j% k9 G, m2 q // 使能 IRQ(CPSR) 9 I7 C- {/ |& q6 w4 | IntMasterIRQEnable(); ; x( W+ H+ Z7 `( ^9 h' Q3 I4 p+ K7 ~: {9 \! t& M5 u h( z
// 使能中断(AINTC GER) & {; \0 n# p0 {" y+ h7 g IntGlobalEnable();+ ?6 X' b+ t% V; z. p
& h/ Z* ^! _9 L) r4 |8 X
// 使能中断(AINTC HIER) : G" ^$ _8 D: v2 F IntIRQEnable(); 0 A9 Q9 A/ y% H- _" D* |+ {* }" z} p$ c8 s; T& s* u- c # A. ^+ D% H! U" o, H9 O# m/ n3 @; L作者: 浙江第一帅 时间: 2018-10-30 17:03
/****************************************************************************/ # B; Q$ O! Z& l0 }( f( \/* */# d) d9 Y b2 \' O d
/* 中断服务函数 */ ! C# H) I* N* C# K/* */% X$ o. [% |+ x
/****************************************************************************/8 L7 S( J5 _- z# x& R8 u/ Q
void PWMEventIsr(void) + Z5 U, F' |- y: w6 N{; e/ |& I- b" t7 Q) M; N
IntSystemStatusClear(SYS_INT_EHRPWM1); 7 L/ H, @" X2 W% e4 s0 S$ e5 }8 ~% i( Y4 @9 W1 j, `5 Z% ?
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);( n" U! ?$ ]5 B( E
}" @! T1 M& M( U/ i
7 P2 W, t) \9 _% r8 \4 [
void PWMTZIsr(void)/ `5 y( |' Z9 d, k: A- G. K
{* z2 C3 V! h9 W9 u
IntSystemStatusClear(SYS_INT_EHRPWM1TZ); 0 I8 L! J9 K+ f( P: K6 _* K/ O* n9 c0 N6 W& [; M: d
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR); 7 J6 w! \: Q0 F}- X3 \1 B" R2 ?% J6 Z4 P$ k
$ q* U+ ^: e- y1 f* } R/****************************************************************************/& ^ S. r3 [) z5 x' E
/* */5 N2 ?" p$ I. ?7 ?
/* 初始化捕获模块 */ # \5 s/ E5 Z8 m* i4 P" K( i/* */ $ [9 B8 p* m) `& t9 v& B# q& X/****************************************************************************/ ) o# x, p$ _: \6 Lvoid ECAPInit(void)' z) E& Q0 A3 S! K7 U* H
{ 0 z" y( F+ g. H D1 y+ ]& K5 X /*-----设置 ECCTL1-----*/' _' I. D& i- r& `9 z) ~
// 使能CAP寄存器装载/ m" X% W5 ?( C& T5 l4 Z" P
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);. R9 X- z0 i# {9 b* n9 k& ~; d
// 设置预分频值.; Z3 ~$ ~- I/ ^: D
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0); 3 f1 t3 f5 T6 `4 J // 上升沿触发捕获事件 4 ]8 ~- ^! H$ [: S3 ` ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0); 9 v4 F, x& D+ s& Y @, E+ Q2 D // 输入捕获后重新装载计数器值.! ?" `" A3 p: O/ p8 k
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);$ e4 x# a( B4 i- R
4 k# r6 S- v# ?7 [* U /*-----设置 ECCTL2-----*/ 9 g3 G/ q. D E; s // 连续模式' d2 k! P9 i# D, D! [$ S& K
ECAPContinousModeConfig(SOC_ECAP_2_REGS); 6 ~# n! T" i+ l1 n, U( y; [6 \. d // ECAP计数器TSCTR持续计数6 Y6 {' k9 J' o; T$ y( N/ S
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);8 l. }" x0 @3 C2 R. l. A
// 禁用同步输出和同步输入 $ g: S" q4 s5 B* f( U ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);4 S8 i) n6 f/ q; q& i
// 配置 ECAP 2 为 CAPTURE 模式 . b1 L* \+ u# W8 D1 T2 v ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);- E& q, U. @1 @7 |
: }5 {& A* T! Z8 T& z9 P // 使能中断; ]- Z. W' U, K, P
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT); & P% N x' K, O$ v% U, {2 {* l}/ g) r; Q2 a+ Y q) Q9 c- \. g" r# f
7 J/ {2 V1 f. @9 T
/****************************************************************************/+ T2 G- G7 i7 O( P& Q
/* */8 h# x+ c, |1 x' V i
/* 取得捕获结果 */ 0 A6 K" V- J5 {# O9 |+ f( Y/* */ # v4 Q) L+ `( o# i; V/****************************************************************************/( b- R* t3 x! h
unsigned int ECAPRead(void)1 m8 c+ U! ]+ t8 _
{! L, Y) p3 F3 ]; S9 Y+ X/ d- ^
unsigned int capvalue; ) `" I6 L2 F6 N% V7 L3 T/ u. v unsigned long frequency;( b4 V7 L1 t6 }& O% T& C; t* [$ n
: T" G6 q2 y# k. t* p // Event1 中断标志 ( K" l8 q& c: O2 E U: J' W9 X" ? if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))2 Q* P" c, G4 @. T- B( B: Z+ s
{# x, |/ f; Y3 Y4 k% S8 ?) D; a
// 取得捕获计数( M/ C6 U r6 y1 x$ a
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);4 w5 Q) U1 S4 Q9 \# G. L" j7 z
capvalue = ECAPResult.cap1;) s8 Q" l: b3 q; ?3 n5 ^
$ X4 c z% r2 ^$ O$ c+ S; |1 z // CAPTRUE 模块 228M 时钟主频 & r. A# j) j! I; ? u9 i, H. G frequency = 228000000/capvalue;/ E; b$ Y) l4 I# h8 f8 M
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);. W7 E4 ^# N v
) u) H. P X% Q ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);3 H1 y: J5 |" D; C+ m; R5 [
// IntEventClear(SYS_INT_ECAP2); # j8 X L4 W+ z0 a1 Z- M0 M7 B }( j+ H" u- v. j8 R! |% M& G9 m
return frequency;( Q! _; n+ }* x- b. Z1 }
}0 L5 e5 ~( {# Y: \ 作者: 浙江第一帅 时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波作者: 广州创龙莫工 时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。 ) O5 p- [9 }# ?! M; m8 j* w% C[attach]4202[/attach]作者: 浙江第一帅 时间: 2018-11-1 21:27
可以给我发一份吗作者: 广州创龙莫工 时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。