请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5201|回复: 6
打印 上一主题 下一主题

[已解决] 请问一下怎么产生PWM波

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家* a- q# E1 e0 x* Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
- ^% j5 E4 v- G/*                                                                          */1 U# |* j2 R& v' x
/*              宏定义                                                      */( W+ S2 \) P% i1 U& a
/*                                                                          */1 |/ V" d2 P6 D# S5 L6 u" d. g5 e! X2 y
/****************************************************************************/
- l0 J0 P/ L3 d// 软件断点* \7 m4 f4 B- k
#define SW_BREAKPOINT     asm(" SWBP 0 ");
" z) ~5 @2 Q3 E: q. I
& U( K# v# `' w/ v7 {7 ^' k// 时钟分频% G% W; Y6 _' _# F1 `; w/ Y( \! M
#define CLOCK_DIV_VAL     228
* Y3 w  Q6 B! R4 B/ m. W1 l9 g
3 K) l7 V% n3 M( |/****************************************************************************/
  c4 D; @9 l6 y6 [" ?/*                                                                          */
2 v. z" j  E) |3 }5 @1 x( ]7 K/*              全局变量                                                    */
. w8 a8 U, ^+ q& P9 J5 D- `: e0 E: `/*                                                                          */! M7 T/ F, ?6 D; J" H! h. Y* y5 U
/****************************************************************************/
& K/ \! `# V, E: g4 |ECAPCONTEXT ECAPResult;/ R% _, B  V% N- ?' r* l

  j( ?7 i( w" E% m! I( @/****************************************************************************/
4 f" n$ e- u& u- {% |! m( r; O/*                                                                          */! J9 E! w1 p( Y$ R/ e5 D
/*              函数声明                                                    */4 ^( L* `: _2 I; G4 {
/*                                                                          */
/ p7 v) T& s- i6 L- [' L/****************************************************************************/
+ |% O( L. g0 k& v' m- j1 b// 外设使能配置
! K* X, [$ I; }/ [) J4 N6 Jvoid PSCInit(void);5 I* U, L1 Y1 N
/ H0 L3 L; q* {
// GPIO 管脚复用配置
( `/ |4 D! C6 D2 f( W5 xvoid GPIOBankPinMuxSet();
9 T& d' j# R$ H, _8 w6 ^
/ v4 U; ^. ?  C& w3 k4 U- P// 产生波形
  T9 b* R( j7 svoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
5 ^9 i2 p& i) S9 svoid ChopperWaveform(void);
( j. A5 E4 ]/ x7 Q
" j" M% ^% j" h// ECAP初始化和读函数( y! v5 H  L) Q6 o1 p
void ECAPInit(void);
# V9 y8 o4 r6 s8 f1 Sunsigned int ECAPRead(void);2 S/ l2 d' d; \
; w5 @! M" u/ V2 m: s$ {2 X( R
//ARM 中断初始化
4 x, M9 s3 p1 I9 M) E. n' F  [void InterruptInit(void);# B+ K6 a, [* O, N

$ ]0 r3 j, a/ p( i# E& _  I// PWM 中断初始化
& m. n) h) A# F1 W; |: ]  Vvoid PWMInterruptInit(void);' |# J1 X2 L. q) _) r( @
// 中断服务函数' B% j& G, [0 R2 X: Y
// PWM 事件
& r  v5 n. y# Z5 o5 fvoid PWMEventIsr(void);
* N4 A: Z; ?6 f- m// PWM 错误控制事件5 Y! H8 {0 E; }/ w" H, ^0 p6 Y
void PWMTZIsr(void);
. n: K6 k& E- t2 k
) x6 w4 a5 w4 T: e. Z1 j& O/****************************************************************************/. V0 t7 W. b1 M' s
/*                                                                          */4 O" w3 n0 W" _7 \
/*              主函数                                                      */0 R* y; k* y4 z3 [8 w
/*                                                                          */7 Y& y4 t/ P, Y6 ^0 \. `' `
/****************************************************************************/
0 V& C+ W2 w7 c" q+ U2 rint main(void)3 c1 l% y# P8 S) B
{9 j$ _  a+ U* V
        // 外设使能配置& k  r' {% C9 R
        PSCInit();
! R0 Z! u* G) v$ q1 C8 g0 ?
) L% W0 C( V5 _6 f6 F        // 初始化串口终端 使用串口20 B; M+ V; j  S9 Y# \# o4 L
        UARTStdioInit();! f3 Z# T; v4 O- f( T2 L: A
       
3 D, ?* D3 G, W0 J        // GPIO 管脚复用配置# {5 [+ t# j4 l, `& F
        GPIOBankPinMuxSet();6 {- i; R( R, C/ }) P  I5 l
8 d) K, n5 r; o7 s
        // ARM 中断初始化
' G% k  j; T2 j* {        InterruptInit();/ I/ w- M; D4 r
8 Q/ ~+ }) r& s, [7 W# W* t
        // PWM 中断初始化7 {% w0 U, p2 N9 e  w
        PWMInterruptInit();
3 Z& O, I9 x" S7 k
$ }9 `. G1 p. G& f2 e# V) t- d2 |* X        unsigned char i;) [3 \9 [) n8 o, S' j
        unsigned int j;
: d. @& y1 ]7 |
; x  m  q& S% _: x$ H1 L' `& h        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);8 ~! v* p2 t  b$ B0 U8 B
        UARTPuts("------------------------------------------------------------\r\n", -1);
. `7 r7 J" Y+ q4 N1 x- p2 t        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);' {- h2 Y5 ]- r  H
        // 产生波形! q. a9 }& D5 {6 H
        PWM1ABasic(25000,50);7 _& j( q( q% P& X9 ^' u5 Y

3 b: K+ B2 b  C- u        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
' v5 b, }: y( d! v+ k/ B        UARTPuts("------------------------------------------------------------\r\n", -1);4 U" V7 t  G& Q. u- Z1 v
2 M% i2 X' Y0 e: b; e. H  L
$ G( C. @2 d5 C
8 ?$ j1 a) a4 x6 Q6 u$ R
        UARTPuts("------------------------------------------------------------\r\n", -1);
' E% J3 {& W! T. z3 n/ F        UARTPuts("                    C6748 ECAP Test\r\n", -1);
/ G4 [8 t/ u9 I+ H        // ECAP 捕获初始化2 \+ f/ ?  G/ J
        ECAPInit();
4 ]: C0 f, u) `        UARTPuts("Initialize ECAP.......\r\n",-1);# |0 {1 p" X/ M2 m# ^3 \0 S
        for(i=0;i<5;i++)9 H: k  i0 K5 S; }" L, k
        {; o# U  M# u' y' P1 ?4 O7 w
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
) L: B# J: H& n, V& g( j9 R                    ECAPRead();) E+ p: G& e9 u* D0 p+ I
        }
4 d( z! s2 e6 r  x        UARTPuts("\r\n",-1);
" U) k* c$ b5 E. d        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);& ~' I$ H* i0 }
        UARTPuts("------------------------------------------------------------\r\n", -1);, g0 s( t9 B6 K: h$ \
  j! k% X4 ~# ^* V/ _
        // 主循环% V# ]/ v! F) a6 y' b: d
        for(;;)8 C5 l8 \% z# B
        {0 g, F' J% D$ S" s4 B1 l" t8 I

" H0 I4 K) I7 [        }
! R. ~& H, x+ i2 Q}
- D: }5 X: n4 K& H' ~9 w& Y( U3 |6 y4 w' z3 i7 p
/****************************************************************************/
( N1 x& e' |* L2 S& a2 [/*                                                                          */
8 u/ b: m( u* `6 d1 U/*              PSC 初始化                                                  */' W# E8 \& G$ m5 [1 P5 v
/*                                                                          */. F7 F# g* ~* _7 m
/****************************************************************************/- f0 v7 J) c6 W- Q, q
void PSCInit(void)! }& N* ^' ^( [8 ^) a
{
- C9 I- P% B7 R: o5 r' t        // 使能  EHRPWM 和 ECAP 模块4 r0 B2 K" N: o+ _
        // 对相应外设模块的使能也可以在 BootLoader 中完成# b9 g/ P0 ?- E  v' F" V8 b. j
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);8 P& |& ?& q: S$ L6 E/ N
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
( Z' `' n1 l, Z}; H1 _, _& K# N. D5 N% a; G- I- g

4 `- P- u5 a3 b$ m& ~/****************************************************************************/
/ @- o4 e- U4 G* `  z/ c4 }/*                                                                          */8 \! U& U8 n6 `8 q1 s5 ~- g
/*              GPIO 管脚复用配置                                           */
( n) M/ v% I/ n$ v1 d/*                                                                          */& b  {/ \# l8 {
/****************************************************************************/
9 A' O: l. e2 z& w# x0 F0 `4 P3 o& yvoid GPIOBankPinMuxSet(void)
- z2 P9 r- f; P+ o% s# p9 D) K4 _{
% T( z/ M4 d& \6 M2 j& K* ?4 X$ M5 [% q        EHRPWM1PinMuxSetup();
" a: L7 k* y3 j: `
/ M5 N  x- ^0 D/ H        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)+ _+ X- h' f5 \9 ]% O) @4 ]
        // 作为捕获功能时管脚方向为输入
8 v% h' M/ A5 V0 x        // 作为辅助脉宽调制时管脚方向为输出; R$ `7 w0 {, E2 v
    // ECAP2 / APWM2
, \9 T$ s  h5 T  q7 c% b        ECAPPinMuxSetup(2);1 a9 W( g3 l2 |6 U( O5 v
" ?9 d/ _( F+ W. F$ P
        // ECAP2 / APWM2方向设置为输入
! r0 B+ e0 `7 Q0 \- `        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]' q" K  p; \# h$ u% C) P
}
, {4 I/ p  k- l7 F& D4 v6 H
. z5 J1 [" W: C8 Z/ E# n# I/****************************************************************************/
3 ~1 O& ~" [9 _; }) Y- z" x/ V7 ^  [' f/*                                                                          */3 E6 m+ i$ s1 G2 p; N; S
/*              PWM 输出波形                                                */
) j2 W; E5 F2 F/*                                                                          */
9 a3 D/ @! ~6 c0 U" l0 H# B! Y' W! L/****************************************************************************/% I/ v5 _# r5 Y: G+ W( @/ e3 B
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
) ]# j7 W. o7 q7 p$ G{
1 k  ]" n! ?, n# K- W- E$ k" C    // 时间基准配置+ W5 I% Y5 y9 e$ p
    // 时钟配置& Y2 W" z$ v' i; W$ X5 C, c& u
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
% I) O8 `: f1 l$ F7 a
/ c) Y2 k! C" \4 d( ]' G( y. G* u    // 配置周期
+ ^7 D" c; i) y& {; n& x+ r    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,$ B0 j3 m  E) c7 q( n  k
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
3 p, K6 A0 V5 p
' ?! }' q" L( [6 F( D; Q8 Z% \0 t) p$ v    // 禁用输入同步信号
% O/ d( B8 B5 @: F* j    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);6 U3 E% x- ~  k, h) z! ?
/ T! X( n; c8 P$ b3 r' Y( J
    // 禁用输出同步信号
1 {0 K* a8 I5 ^& }    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
5 \7 f; {6 {5 l0 A- Y! T$ G, P* l) g1 A
    // 仿真(DEBUG)模式行为配置  \1 z8 G# c- y9 B& g5 t, z
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);3 v# Y9 u- R( }1 Z4 Y( |
) L3 N# ^. L2 u) a0 y, `* Q
    // 配置计数比较器子模块
& z- j; \" Y9 I' J    // 加载比较器 A 值( ?$ N( A4 i0 m$ W
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
8 z, O4 Z* }' E% s) L; P                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);9 j* d; q( b/ R' C$ k
  l/ B4 @  p) W' n
    // 加载比较器 B 值
& l$ p: Z9 N* B. O4 Q    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
5 S5 u1 A6 n, T$ A/ @5 z                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);; f" a  K/ v0 ^2 X: F
1 \  H7 W6 D# m. K( Y( f4 u/ Q8 ]9 |
    // 功能限定配置(输出引脚触发方式设定)
9 j: Z( N: i  u8 j! T0 _    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出: N  s' ]% X3 [, w8 g% a
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,; V  T$ \+ F' q9 k% l
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
( P. E) j* ^5 z. u  c7 Y. _                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
3 ^  N: T5 o& X5 J8 x8 u# s$ l5 Y9 g: g$ }
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块4 ]$ k. f% o) c- ^. ?; ^
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);, Y  B, Y, S0 v2 E1 R7 B2 Q7 h1 O3 }

9 m! F, S: M" R0 Q    // 禁用斩波子模块
. f9 p: X& ~. c" x7 f8 N0 Y    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);2 J  p: }. g& v9 n. S3 [
3 f2 O; `3 ~* ]5 p2 |
    // 禁用错误控制事件" i0 ~9 [; d4 O' I) P) z) B
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
) z% ?& I* I9 F2 p7 T. |    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
4 H! r" m2 I: g" y3 r' C) R- q' y0 J' @; k9 r; m( @* ~
    // 事件触发配置& e' V$ M  Q$ j# L3 [. q/ g
    // 每三次事件发生产生中断
8 I, J5 m# w* ]) K9 v    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
' E% e+ C( K9 g$ l0 p% i" D+ y    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件/ t! F  [  P6 e9 |0 h4 N
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
7 B+ `6 I) k1 p$ ~" G- f    // 使能中断
+ o/ U. g' o  u7 I  i. w/ k    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
. G- z% b. y* G* E' e
7 W/ z; W/ i8 Q4 G( \  _# U- ~# I    // 禁用高精度子模块! x+ \6 u( m5 |
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);' Z* M- C& s4 \7 m. H' g+ f

+ G+ B. D4 B3 Q5 [    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);. a3 T3 [& Y$ F. w' i
}
) [% C( `0 f) o+ {
+ }: u! {4 W7 D, l1 Wvoid ChopperWaveform(void)3 `7 H) ]$ S& m" L, L, q
{
0 b% t, [8 O) k* S5 V7 h    // 50% 占空比
0 F+ e- D8 a# i# j0 _  U    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);- Z- o2 C0 I/ l- k# \
    // 4 分频' N1 c: @) ^; W5 u7 R! Z
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);# j+ ^, Y9 H% {" X
    // 单个脉冲宽度; z/ L, z( d- h
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);- }4 a8 B  i5 c& z% u1 a( |* E
    // 使能斩波子模块! S/ G' l' }+ y- J/ ^8 _5 J
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
8 B9 m. t" ^9 ~: A- N}: c  o, C- u3 w& ]3 `# c) u
2 v* L  I* t" {$ D: ]3 w
/****************************************************************************/
' h9 w/ S5 g( s5 r- B/*                                                                          */* a" z4 h" k+ P2 ?8 m8 `" z
/*              PWM 中断初始化                                              */
+ w! f- ]7 y! O; \% R/*                                                                          */
" `" q$ s* Q% `* O: v" C6 V8 R/****************************************************************************/
. m! l. {8 Z* Wvoid PWMInterruptInit(void)3 ?; Z. a% b8 W0 k; @, I: e
{9 i0 B3 v* O3 X
        // 注册中断服务函数
$ S7 r/ q& V8 C: I        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
2 E# s0 D+ p2 A- x( W# c        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);( V; E! ^# e7 j: j* D4 u
3 u/ ]9 P4 b9 C, f* A/ b+ _
        // 映射中断
: x& f+ H7 b! Z        IntChannelSet(SYS_INT_EHRPWM1, 2);
6 U6 }6 P9 E/ ], }) m        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);5 c# F$ `* A8 f- k$ M+ m
; k* U2 L' c2 a$ L; t! M
        // 使能中断6 y# s9 X: C$ p9 t, t
        IntSystemEnable(SYS_INT_EHRPWM1);
8 t0 @2 v( }6 Q        IntSystemEnable(SYS_INT_EHRPWM1TZ);" ^. m( a: O( t$ [) E  s
}
: _/ v0 g$ ]* S2 W' r$ A' c! b$ u3 q0 {5 r
/****************************************************************************/! \/ E& Z" E; j
/*                                                                          */
2 ?6 W/ C) H# s) K: |/*              ARM 中断初始化                                              */
& t9 A, h0 h6 y8 U$ q, Y/*                                                                          */
" l, i* }4 d: Q+ ?# u/****************************************************************************/  A; l& Z7 O  y5 T" r3 E4 P
void InterruptInit(void)
  ^( C( K" Q) O" {{2 ~  p# \% U" ]8 E
        // 初始化 ARM 中断控制器
* j, o! |' N$ R( T& p( f, [, c        IntAINTCInit();
. m9 A: R8 x1 e7 x6 `9 {
9 a4 A7 ]! t6 E/ A- e6 I# X% \  h        // 使能 IRQ(CPSR)4 Y! b! P9 C: q0 O: z2 B  t& x) r, F
        IntMasterIRQEnable();
5 R; s9 Y3 O2 D
% c1 L! e" D9 p3 N) n. o        // 使能中断(AINTC GER)
( g& y( ^! B- z( [# g1 l' `        IntGlobalEnable();
0 T: W9 W+ K6 ^/ U: E4 y  I# k3 _2 x7 ^
        // 使能中断(AINTC HIER)
& Y" w, y+ I4 F# }        IntIRQEnable();
4 ~- L) U% @$ V}) b* n; {+ k! N' [
& q5 m& o# K5 v- S
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
6 @2 ^. _- o+ @# ^( l/*                                                                          */
0 {' \  J+ H& ]/ N/*              中断服务函数                                                */
4 M5 K6 S3 Y' K( l; F3 e/*                                                                          */4 E# ?, {3 e# K, ?" ?- {
/****************************************************************************/) D8 Y, z( f# J# ]8 H( @0 g
void PWMEventIsr(void)
/ @- X0 ^) p" V9 I9 G/ {( x% O{
2 p1 {/ y' p6 J! ?        IntSystemStatusClear(SYS_INT_EHRPWM1);
: a0 U0 H1 w$ c3 s0 C1 ]
" W3 M% J- b, |2 X; M7 Y    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);5 U" L" L# X1 _3 ^
}
$ L' {; l' Y- {$ w; v4 C- @4 X' _, y% p2 u, V: K
void PWMTZIsr(void)
" j+ H: w& H- b4 a! G{6 S4 \# M+ \0 Q
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
! Q6 ~. B- i) U' q: d
- k: Y4 R/ T+ ~% B& s+ l    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
2 ~6 J$ p& D6 l/ j' O}
4 A+ z+ i" F" `, \* x4 L
1 o! p0 A, w" }' o. L+ \; X/****************************************************************************/1 Q$ z: I* G8 w1 S1 Y
/*                                                                          */
+ a! |, o7 l9 G# e: |" R" n/*              初始化捕获模块                                              */0 }, W6 G( m$ \! W( }" b# z
/*                                                                          */1 m  }( Z) d, v; h+ Q0 F2 ]% `
/****************************************************************************/2 ^  B; \/ h- b: v
void ECAPInit(void)
* d- p, e& t! X/ `+ T{6 h* v9 y. a, [) K' f
        /*-----设置 ECCTL1-----*/; @1 h9 _. i/ O0 ?' H! d
        // 使能CAP寄存器装载- h" V& ~7 M5 |# V7 Q; q* m% O
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);" m2 v1 Y! G2 c  C6 Q( ?/ `
        // 设置预分频值.) [- A3 q. N# m
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);: m! \; R" V& q4 V6 i! z: X
        // 上升沿触发捕获事件
, v& h  d0 n8 M        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);8 ~6 z8 j0 [- i  e4 l% U7 p) Y6 S
        // 输入捕获后重新装载计数器值.
& ~" |) D- m3 c7 }+ `) ~6 H7 y        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
5 I8 c* r. @: g  `) M) @8 w, H8 x2 c( b
        /*-----设置 ECCTL2-----*/1 p- L3 h( q- m, j- Q% V
        // 连续模式
# I. i/ T; k$ v8 n/ Y        ECAPContinousModeConfig(SOC_ECAP_2_REGS);0 N( P1 }4 }: w
        // ECAP计数器TSCTR持续计数; s) U; w% \. {# b7 ^8 J* |
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
, X' r) G9 r8 [6 y0 K3 S# y7 a7 s8 P6 X        // 禁用同步输出和同步输入6 D. n9 ^/ ~+ J2 V. d
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);4 R" |3 W  V6 U8 `1 _9 p
        // 配置 ECAP 2 为 CAPTURE 模式
2 E6 ~! ]. x3 u( v6 D+ m- i2 M        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);% f# v) ]. u. B# h8 i

2 @" _% T% [/ p& }6 j        // 使能中断
* J8 Z5 x' ]5 ^7 B//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
6 ]1 K# V8 X! y1 v, w* e1 S}) t% B; J. `7 ]% ^- r
: h9 Y5 j1 q4 \
/****************************************************************************/
+ k7 \+ V3 q! s! e. _. T( T$ ?/*                                                                          */
! U( t' l* D9 {2 M( Y6 W, [/*              取得捕获结果                                                */
5 O* N: ~; F) K& Q' w; s! a- \, ~/*                                                                          */
8 g) N7 X4 D( B: d" j/****************************************************************************/
7 L- q. p- O" M+ a- T3 c2 Hunsigned int ECAPRead(void)4 J/ _: x4 {& F- W& |
{
. _- D' a9 E+ i4 _0 J4 m" U' W        unsigned int capvalue;
% n- m$ m( v2 Y        unsigned long frequency;# n- M3 Q. t6 _
( x& J* i  w/ G0 T% I5 l) j
        // Event1 中断标志
- V0 z$ Q! d. [$ o        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
; g* H/ J7 Y% ]: Z        {; V; p$ G* v+ B6 w( U
                // 取得捕获计数- [2 D8 K( ]" m( \  M
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
- _1 q5 U( d" B) q  _4 a7 _                capvalue = ECAPResult.cap1;
5 t! |) E, [, N2 j* n; y3 H# q. B1 _( z4 i" T" c
                // CAPTRUE 模块 228M 时钟主频% x7 d5 Q$ S% j8 M4 N; p
                frequency  =  228000000/capvalue;, B9 V' ]" c% E. a: Q1 w
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
8 q5 I0 h5 O, z1 U/ q) M# h2 [( x, @) F' f7 K
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
7 Z! m. n  H& c! y- Y+ p$ x//                IntEventClear(SYS_INT_ECAP2);
) ?1 X* k6 K0 ]$ }        }8 ^( O! t3 R9 N# y# F. H- u3 m' [
        return frequency;* o( D6 ?0 L! \. o( b; V) x6 h
}
9 s7 x" b8 X8 f
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
地板
 楼主| 发表于 2018-10-30 17:58:06 | 只看该作者
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
0 E7 L, }. h! r1 p8 V6 g  k) E

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
6#
 楼主| 发表于 2018-11-1 21:27:34 | 只看该作者
可以给我发一份吗
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
7#
发表于 2018-11-2 08:51:16 | 只看该作者
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-6-1 11:32 , Processed in 0.046916 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表