嵌入式开发者社区

标题: 请问一下怎么产生PWM波 [打印本页]

作者: 浙江第一帅    时间: 2018-10-30 16:46
标题: 请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
+ \9 O4 D' a1 Y5 {9 t
作者: 浙江第一帅    时间: 2018-10-30 17:00
/****************************************************************************/9 @: l% G* Z; F" O) u6 }0 P
/*                                                                          */
" a+ K- L: z: I( d7 |/*              宏定义                                                      */
! _6 P% B5 r( U/*                                                                          */& I* l1 x+ w& O- }$ H( J
/****************************************************************************/
- R4 i. @! T# s. U( D( `; B4 F// 软件断点
( g& b; T  r' E#define SW_BREAKPOINT     asm(" SWBP 0 ");
  H) o3 D+ p* k1 p. @3 e! q- e8 N4 A; H& ]- t: d- ^# I- j1 p
// 时钟分频
7 M9 w8 P8 E' I9 S! n/ i9 O! V( r#define CLOCK_DIV_VAL     2281 M( P: w* z' b0 @- Z
; O  d& y* M7 _/ R# z) @) I: k7 R
/****************************************************************************/
& R( r9 f4 B# q2 D) o; \3 j/*                                                                          */" M" e. Z& n1 l2 l! A
/*              全局变量                                                    */
/ n+ X* g, W" G' i4 \& w, t/*                                                                          */
; k! _& i1 D6 c, G2 _" Y: y5 I! n6 d2 _/****************************************************************************/
+ e: Z, o0 }) X2 p6 tECAPCONTEXT ECAPResult;
- o" A. ]1 a9 L: y3 ?' o. i" {; c' x& [5 u
/****************************************************************************/  L# j; C- @8 C5 p: U
/*                                                                          */
1 E2 i) S% s% j9 y. n$ x/*              函数声明                                                    */
% @9 S  u, w2 N7 l& J( M/*                                                                          */) w+ I( Z2 w6 q$ _1 e7 k+ `
/****************************************************************************/
' K5 {/ p/ }" Y- H4 c- i+ H// 外设使能配置( d! I* H1 G6 Z0 N* t: Q; c
void PSCInit(void);
1 }( B" {4 d. |
7 f8 S& Q, i+ l# d! q/ a: |// GPIO 管脚复用配置9 q$ ]. \$ C& R% |# G& V+ s
void GPIOBankPinMuxSet();8 M) G% H" [0 k6 {

$ r& k6 U" w9 a+ z# C1 X5 J4 A// 产生波形- w( o( c" ?6 x/ U' N! i1 q2 @$ A, H
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);0 C& D, Y+ \* Y6 q# B
void ChopperWaveform(void);2 `  w6 O$ ]$ S* E
- e* K3 Y7 ?1 s
// ECAP初始化和读函数
( K9 m0 U+ s8 p2 ~# l/ j, avoid ECAPInit(void);
/ S: }- x' Z, B* A4 n# n: Munsigned int ECAPRead(void);) Y: ]& y/ f$ `
4 G2 V; T2 u7 U  t0 O5 [/ Y( z
//ARM 中断初始化
2 S) x! O. u0 F8 e: ivoid InterruptInit(void);
4 [& m! V: M7 w6 P8 k2 ~& P4 c" c2 v. g4 D3 a
// PWM 中断初始化
9 f: R  I0 T2 q, ovoid PWMInterruptInit(void);1 k' G# \8 P) S! |( F1 ~
// 中断服务函数
# t7 X  L5 F( M$ s1 K3 u6 b// PWM 事件
" e. m9 \1 M* m/ W3 N: Nvoid PWMEventIsr(void);* A6 R. ^! t2 y% a6 b
// PWM 错误控制事件: K7 Q' ?6 X* h
void PWMTZIsr(void);
, P. P+ l5 M' v3 x7 b. a3 c6 r- }' e+ E' h& O9 n# H
/****************************************************************************/
3 h& J. n0 m- o/*                                                                          */5 I/ x1 g3 N! |4 X, r
/*              主函数                                                      */
: s; x8 ?! v. \: M, L, j/*                                                                          */: L& o& P! l/ Q
/****************************************************************************/: E: z0 R& Z2 N. ~% x  D5 u
int main(void)
' k1 E; f" L- L' A, x+ l{! \: v5 [6 |4 f7 m5 N: U
        // 外设使能配置
; B. v; z. y- z; _1 R        PSCInit();
) o# ~2 n( v6 o! n/ r' ]0 l
, j# ^  S+ Y6 @1 J2 e        // 初始化串口终端 使用串口2
! ]: v1 E" V( S5 ~* M8 F* b        UARTStdioInit();
3 }! s: q, A0 H' k        " Z% y: j9 |6 `7 r
        // GPIO 管脚复用配置
6 w3 t/ @6 L2 X/ K& j        GPIOBankPinMuxSet();
) e& [' ]% k. f- g# A# V& x) \) v6 s3 I6 o* b  n2 r# X
        // ARM 中断初始化
% v+ F/ V' l: J        InterruptInit();6 A& L+ z! _5 r* @

/ q( |( _! o9 i) F3 l$ H        // PWM 中断初始化
2 D, R1 |& d+ i, u( h        PWMInterruptInit();
+ _; ~! e( d% I! b2 B
8 J  o" l: M0 [; G% `5 c        unsigned char i;$ I: t% T" ]: C
        unsigned int j;
0 }4 Q( R4 j: @. j+ M$ X6 d# P8 [+ ?. Y! a8 N; ]1 N7 ?- b
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
- L0 @3 [- J; k. c, N        UARTPuts("------------------------------------------------------------\r\n", -1);
4 f4 I* S- y0 ]' y/ A        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
7 c, [. W  J/ l8 H        // 产生波形
" ^  [" C% D5 Q        PWM1ABasic(25000,50);
( d+ ~6 b4 Z1 T' U, B3 I% P# [1 o7 x  ^0 u
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
) K" M+ f3 D& K' s, e' J5 {        UARTPuts("------------------------------------------------------------\r\n", -1);
6 _8 h* p+ G, G& F  j0 u9 D( W4 V% X7 d# f- O9 A3 w7 t
! s7 _& [* ~8 e1 h$ |: j1 s
( a5 e( ]+ c6 O8 x3 \" D: w' L
        UARTPuts("------------------------------------------------------------\r\n", -1);# v* j; ]5 l, p
        UARTPuts("                    C6748 ECAP Test\r\n", -1);* }9 H5 X( `/ p# b
        // ECAP 捕获初始化
# o6 w: K+ u' Y/ k        ECAPInit();5 r" Y& g) u( `$ V
        UARTPuts("Initialize ECAP.......\r\n",-1);" v/ `5 Z1 c! L2 @. `+ b  Z
        for(i=0;i<5;i++)
3 K$ Z1 _1 p' o  o$ S' @        {  x& I& g; }  C9 D/ i. x
                    for(j=0x00FFFFFF;j>0;j--);            // 延时8 a$ U0 @! M7 q1 n. b. ^# ]5 l
                    ECAPRead();
) ^2 }$ e; v! H1 _) p: E# I7 \" @        }
: E0 G0 r" Q9 F% F, t8 [& H* b        UARTPuts("\r\n",-1);
- Q7 l. G7 W* c& T2 @  U        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
! u4 @, C+ p& B  A& L        UARTPuts("------------------------------------------------------------\r\n", -1);" A0 H* M. z+ H5 K/ u5 u

9 W8 G& S7 N2 N. h4 G        // 主循环
& w0 h- \' c$ r8 k        for(;;). w( B$ Z9 l& z! W: X7 }
        {
9 [: s- `* \' K* P; o. E- s0 |2 I0 a' Z  U
        }
( a/ P. a+ |; X7 y/ h( F}8 V: a+ ]; S# p. t4 W
! |& X, G: S# Y5 X; V( G
/****************************************************************************/0 G0 V. X; G& E& ^% b
/*                                                                          */6 @" K5 J8 V6 t; R/ _
/*              PSC 初始化                                                  */1 `5 u6 C( n4 e0 `+ q( i) ^4 f
/*                                                                          */
0 x  e: h) p+ T/****************************************************************************/
8 L" v# H2 X# j. }3 R& E8 B' ~% Jvoid PSCInit(void)
" C+ P( ^; W7 f  m{
8 M6 `4 I0 q6 u3 b7 ]. j  S8 i        // 使能  EHRPWM 和 ECAP 模块1 g0 l, ~; |' f$ k0 r: f; e
        // 对相应外设模块的使能也可以在 BootLoader 中完成
# J( e8 J7 \% @( n$ u9 I    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);; J% w4 A; _# b' m9 b5 P
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
3 J" }8 Y% n+ K( Q0 y}; W5 z8 D: Y* ^1 H$ g
0 ^! A" h, I# L  R
/****************************************************************************/; M  x) L/ ]2 }
/*                                                                          */
: l, F& c% Z: N) ?# B9 l0 T/*              GPIO 管脚复用配置                                           */# j  b2 e7 [* X, X
/*                                                                          */* e0 z5 p7 s/ i/ L6 p( m
/****************************************************************************/
4 L# L( T% X% hvoid GPIOBankPinMuxSet(void)
) z; ^: G6 n  |& L! P6 ?. ^{) f7 Y7 W8 c7 U. I7 n
        EHRPWM1PinMuxSetup();  z# Q6 s  C; j( J

7 m( a; t1 w$ L1 n- C* Z# Z        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
" D0 Z) q) p7 h0 T- Y5 ?        // 作为捕获功能时管脚方向为输入$ [' J. [- c" |' p# h1 [
        // 作为辅助脉宽调制时管脚方向为输出- ]7 h: l" y- L6 y+ X: k
    // ECAP2 / APWM28 Z% s, j: q' T5 `  Y2 ^
        ECAPPinMuxSetup(2);* S0 i8 Y) C. Q7 a
# t* T4 J2 J, _- p8 n2 V' B
        // ECAP2 / APWM2方向设置为输入9 j$ K0 X+ z/ ^3 H; g4 {
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
) W2 R! z! J; j( t% W6 K- b}
3 _& `5 X. y" n) @" M8 a0 F1 \" m3 H- w
/****************************************************************************/
/ l% N5 X/ A$ H$ I1 l/*                                                                          */
! A$ q# D, k; |5 @7 p, j7 D9 A% W/*              PWM 输出波形                                                */. e) D$ Y% C' L+ m1 E1 B
/*                                                                          */
" Q4 A- V* A; ?# u* ~/****************************************************************************/
* r# O, q5 C: X' G6 A- ^  [; Zvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)* Z& V- b: y+ l+ `1 ~* I5 A
{
6 w' S# z4 u8 A+ q1 g7 i    // 时间基准配置  Z2 U4 t8 a6 L) {
    // 时钟配置
9 C) M2 u8 Q4 M8 }/ t& @: S    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
  W6 I7 r7 v* I/ Y9 Y- }2 E# S* {- y& a: c2 Q
    // 配置周期' W" Y# B, s' |6 s0 [& [% T
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
0 U2 Q0 S4 {' Z# i! I5 C- F. b                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);- I. J6 W: Y9 f& ^0 O

) q8 I9 q5 |+ m( ~  ?, i    // 禁用输入同步信号8 G+ Y# X; w( t, Y' g! r
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);5 {- _. V7 Y$ z# Z* z8 v
, u2 w9 H5 a  \: D# a# m( O
    // 禁用输出同步信号6 X4 j5 J7 f% W8 J$ k: ?- R
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
& B  B: o2 I" F) i/ O. P  ^+ Y4 q" m* l+ X
    // 仿真(DEBUG)模式行为配置4 V( }6 l9 g% I& o# j! O
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
$ l' r3 o4 N, B: s, Y' v( U+ q' t5 E/ [
    // 配置计数比较器子模块
* Y3 H* m8 p) w    // 加载比较器 A 值3 ~& N. o- n) x9 w) K4 d$ M
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,2 ^7 ?( P, C8 O
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 L' x; A! j$ e: n+ c0 Q7 k. m/ V7 T
# {. i( R: t* I2 F    // 加载比较器 B 值
4 i; W1 _: O: j, |$ r    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
: [4 |- o- Q& k4 R. z                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);6 X6 y9 H$ w# x" X7 k( E  ~
4 B4 P8 ~! P0 ~2 q5 Z  \( P
    // 功能限定配置(输出引脚触发方式设定)5 ]7 V5 h$ C. ]1 ]
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出9 s0 y4 e2 h; }, z' _
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
7 P% J9 c+ o4 x& h7 K4 o                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,, C4 }7 N% v/ |& [5 ]. ^% a5 w
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);; C- y) P3 `3 k; w4 P0 W+ \
% y4 E) M3 g4 ]2 w9 {, v
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块9 h7 x6 S5 L2 |  n- @
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
( {3 P% y  J$ e/ {6 o! l6 [. V8 P) _; S. k8 C* `
    // 禁用斩波子模块! D" W0 T) H& E3 i6 d. g
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
  Q# X4 F: Q$ P0 x- Y
# Z# Y. j2 |2 p    // 禁用错误控制事件
5 r6 f2 z2 j' K. @- V4 ~- {2 j) ?    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);0 y0 B) k6 ^' V7 i1 m
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);6 |) W: s; o" ~; h. K# }, \$ Q
( O5 R! M. l; I
    // 事件触发配置0 o& K% S7 i; B
    // 每三次事件发生产生中断
6 e  E" s7 m" a' r    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);7 G" E3 X. \2 {+ z) @
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件( s& e% P+ l- Q4 u
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);8 e) [9 a8 d8 m1 T
    // 使能中断
9 H! F' ]* A; v8 m) S/ k: ?* ~" a    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
- R% e4 T2 k2 @+ m4 \' Y+ o7 f' \! X' d% T4 m
    // 禁用高精度子模块
; N0 X1 A) Q3 F    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);3 w( X: m" A3 g  h9 C, _
0 N& F. ]3 i3 z4 H6 |1 @
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);0 V& a' q& y2 Q/ _4 t
}5 c! ?. O8 J, F2 h7 F
, t% Z8 j( w. J6 R5 a  `
void ChopperWaveform(void)( R- X2 [* I" T' ?4 A# L
{" p* ]. g0 Y1 Z* [8 t
    // 50% 占空比
) a4 {. K" p7 C    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
: v; a. h4 m( M2 z2 H0 ]    // 4 分频2 N5 Q8 @, C. v; H
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
9 e0 M& c$ S/ m2 T    // 单个脉冲宽度/ L; i0 T. W) c; X8 @9 q6 H; x
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
6 q& P8 z6 O6 x' b: P' O    // 使能斩波子模块+ m; n% B7 S$ s6 [! R% @
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
: w! \( L( D( i  O! L}  R/ ]9 @" Y$ N7 w4 q5 F& E  p1 f* y! A
) `$ k' u, `9 r, }* u
/****************************************************************************/
, b* c6 @  J4 _. y/*                                                                          */
7 X; z$ I0 U6 X; h8 `8 `/*              PWM 中断初始化                                              */
/ Y" q$ o$ w$ ^: A# q/*                                                                          */
- _& \) }( u1 j' s# k; {" h' x) F" d/****************************************************************************/1 }; ?1 U$ _' a. o8 G( ?
void PWMInterruptInit(void)
% T. C8 F+ C* l' U3 X{8 f2 e0 Z/ B9 o% \5 q/ ?* l
        // 注册中断服务函数
4 q3 z& q& f+ @' ^' G8 N* |        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
+ M( I3 M" h0 ]2 j5 t        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);3 n9 y$ b" q2 V
! k2 {0 i, a* Z0 [4 F0 N
        // 映射中断8 l# I1 q' z3 ?# s9 G6 _
        IntChannelSet(SYS_INT_EHRPWM1, 2);
; o' D. _7 ?/ g! ~3 R9 P' q        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 i  G. E' u2 H9 {$ M* h2 ~% g
# D# Z* W3 ~* m, f7 U$ F5 a# z1 ?. l        // 使能中断
8 X4 G. x/ x' W3 V+ U        IntSystemEnable(SYS_INT_EHRPWM1);
( \2 a0 A  C' C. C        IntSystemEnable(SYS_INT_EHRPWM1TZ);
) ?4 k& q) ?3 X}
* k$ |* A; ^) C! v' _. R$ \8 G1 Q4 x+ t5 o1 b
/****************************************************************************/) m# }3 X7 u7 P; u
/*                                                                          */; G( S8 J4 q# B- n# L- t
/*              ARM 中断初始化                                              */" J" i9 W2 t9 ?& p
/*                                                                          */
1 k* [6 l) I% N7 z7 h( Q/****************************************************************************/
' Q7 t) C6 c" O3 B: nvoid InterruptInit(void)
/ N# U' T- M/ n7 ^7 O{
9 d- |! l# n  W* u+ L        // 初始化 ARM 中断控制器
4 Y- x/ j/ t% o% e( l6 R        IntAINTCInit();2 M) I: P. [0 f5 Q* q, ~( A8 Z( v! r
/ l* Y1 u& L4 C  \$ J- z8 a) e
        // 使能 IRQ(CPSR)
2 `0 m; I, X* E        IntMasterIRQEnable();. n9 B* P2 X2 P; P

$ T; h! _! \0 \7 o        // 使能中断(AINTC GER)
% [) b% r7 K; F- V( }) B* V        IntGlobalEnable();
' E5 s* r3 k; T
  [- J" C  Z3 n- J( a# i        // 使能中断(AINTC HIER)
& t% Z+ y! d0 U- U        IntIRQEnable();
- ?$ D( V. L( u6 d) }0 l5 w4 t}
4 Q" l+ N& S; L! Y. ^. S8 R2 {% y

作者: 浙江第一帅    时间: 2018-10-30 17:03
/****************************************************************************/
7 v# F7 C0 G2 p, q" O+ a/ [/*                                                                          */* m  U8 A/ O+ W* {/ O$ l# j: K1 m
/*              中断服务函数                                                */
1 y/ v  ]' k  ]/*                                                                          */) Y4 w) {! N+ M
/****************************************************************************/
5 w+ R/ e/ V' uvoid PWMEventIsr(void)
) ?/ q( P' m9 Q- h{9 T! \3 S! {6 O% v
        IntSystemStatusClear(SYS_INT_EHRPWM1);# n' @3 g+ X; H! \

" R% G0 k- [6 V    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);' s7 ]! }0 X) Z* S
}/ G- ]" D+ Y( x! T/ a
( C, _3 t) T" R0 g
void PWMTZIsr(void)8 N9 u' l0 ]: L2 Z
{
& e. l# w& B: M( o+ v2 ]0 i- U        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
( `* _7 i/ R5 c/ m* b' o
# ~, t' x( p( W  q9 ^# L    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);$ l: _7 W! [+ {) H5 M( h
}) m: c4 w: k+ @3 w

+ N" X1 e8 P5 H) d5 b: t/****************************************************************************/$ B/ x1 x2 P( d
/*                                                                          */
% }2 K+ ?" s0 O( J* q* {; X( Q/*              初始化捕获模块                                              */
+ l$ U& p7 u% V( M5 v* P5 @1 @/*                                                                          */$ g7 l' d( X: g- Q; F+ C( b
/****************************************************************************/
( H( F$ k" X" n6 i  m% ~. q' kvoid ECAPInit(void)
: P- z% \: j3 C- o! a4 a{
$ ]9 k9 v* h( X/ Y1 L        /*-----设置 ECCTL1-----*/
, D  W* r; W, `& l. G/ {        // 使能CAP寄存器装载" \# d3 Y( h4 t; O: N$ n" F
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);7 A' [/ l. d2 Z4 y
        // 设置预分频值.
" L; e, Z. C: u  H0 y6 _9 \        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
3 ~3 F$ P1 |% K5 O, l        // 上升沿触发捕获事件2 I4 ?7 T" o5 R
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
# j) I# I# J& B  R- y: d8 z        // 输入捕获后重新装载计数器值.
# N6 }& O* i6 s$ d1 Q        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
+ ^0 H# X  I# Y! a
; |1 ]9 O* p" ~! r+ G, T% d+ y  |        /*-----设置 ECCTL2-----*/
$ k6 W% {4 L( o8 @2 I        // 连续模式) s3 _: b9 f9 B% w
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
, S% ^/ D, L* d8 b! R( i7 k4 W        // ECAP计数器TSCTR持续计数
9 I7 X  k6 g5 I% A4 O" w6 N        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);$ U0 s6 T1 n9 k6 P
        // 禁用同步输出和同步输入% r4 q& n5 m8 F' s  L
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
$ m/ A% f5 k" V! h0 X' M) @        // 配置 ECAP 2 为 CAPTURE 模式- J. k6 k( j, ^& ?; E
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);/ ]: ^8 j, u% O3 U
! W8 X' [& Q3 g& J! z% C
        // 使能中断
9 Q' v( c6 F/ R3 f: z3 p$ m# N//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);9 R9 X' z% Q! q4 Y) j2 S
}- a5 T" v" q+ ^' K
! m) A) z8 e2 G3 w- l
/****************************************************************************/
* \1 x4 Q$ @# _* r/*                                                                          */
7 G% ?, X$ M- J9 Y- ]; l/*              取得捕获结果                                                *// y: Z% ]! s# }; m) Z& r
/*                                                                          */
; F" z% p; T4 t' z6 K/****************************************************************************/
. a0 ^: e/ `9 punsigned int ECAPRead(void). K3 d( R1 d, f4 Q. g# I
{
  W) d# I  P4 J( u4 Z% a4 w6 s        unsigned int capvalue;
! Q$ b) K' j& u  m        unsigned long frequency;7 U; t! J5 X3 B5 J
( A; m2 Z9 \( B7 q+ G
        // Event1 中断标志" V* P' q- D  T& U% |1 a6 c0 N9 f
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))/ B$ ]0 f7 }; [( @; s
        {, j* V$ k2 {" P
                // 取得捕获计数+ f' [+ |) Y9 R& I9 ~. X
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
2 d6 y! F3 F* H0 C# a0 t  P                capvalue = ECAPResult.cap1;
3 W) D2 a1 ~* R8 q1 ^; p# `
  J9 ~) s4 V# |. p- O                // CAPTRUE 模块 228M 时钟主频
/ C6 v1 a/ y9 l( c                frequency  =  228000000/capvalue;. D/ y1 I) ], c! O
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
, T9 }9 m6 K" `0 x+ {
& w+ M+ p7 G' i                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
9 @) X- C" L; U+ _& o//                IntEventClear(SYS_INT_ECAP2);
6 h+ t- d& T$ z6 n' z( A# {3 d        }
! B/ N/ ]3 A: w        return frequency;
' \; O6 ^% F; ]6 u) j2 Y}5 n0 G7 ]. U. \

作者: 浙江第一帅    时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者: 广州创龙莫工    时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。; C* q: i9 q6 ~& P8 f! S7 P' ?
[attach]4202[/attach]
作者: 浙江第一帅    时间: 2018-11-1 21:27
可以给我发一份吗
作者: 广州创龙莫工    时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4