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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
* ^4 H4 e0 X' U8 R3 F( I- P/*                                                                          */
, i5 D  N+ ]( O, |6 h/*              宏定义                                                      */0 }( G3 Z% T/ E; ~
/*                                                                          */
+ \# r6 c3 I- Q; f4 B1 A/ J/****************************************************************************/
0 D0 ~8 D6 t* ~# n// 软件断点
" u5 r9 V1 {$ X7 n% Q$ F+ _#define SW_BREAKPOINT     asm(" SWBP 0 ");
- k8 h% i. }" q3 [5 t9 A& E5 ?2 ]3 B2 z1 J$ O& o4 ~
// 时钟分频
6 `+ R$ \& F" [2 R6 I#define CLOCK_DIV_VAL     2281 M8 m! g. H, p; x5 J
' j) Y7 A) [- k
/****************************************************************************/
& P: h4 ^9 }+ g6 Q6 f. ~# J! I6 z/*                                                                          */5 Y; q. r, s8 z1 J4 l! D2 e
/*              全局变量                                                    */
- w2 Z, e* l, ?, X' F! ~/*                                                                          */" J, d7 ^% H/ D9 n2 `) L
/****************************************************************************/
, \/ v: H7 @% o: H% y( rECAPCONTEXT ECAPResult;3 W5 o" i9 m! J* l' s3 m- }; i4 e

6 V/ }) E- j( [7 {5 {. f6 b/****************************************************************************/8 n1 N& b5 u% f- i
/*                                                                          */- [+ d; @& j6 D: B! ?4 P
/*              函数声明                                                    */
- A7 d9 r$ b6 g" r' r$ S( e. t/*                                                                          */
$ H* z8 z3 E7 n/****************************************************************************/
8 D& [: O6 w3 Y# j1 w' J// 外设使能配置  a' N3 k: L5 M; L: v" l% M+ d
void PSCInit(void);
0 x; ?, J9 o) n' y# \7 {$ F1 g) s9 j, w
// GPIO 管脚复用配置
7 ~& n! W# d; F" v$ R" Wvoid GPIOBankPinMuxSet();3 m; G7 L/ J7 B5 Z& D

) O3 t1 _" q* g6 N  q# g// 产生波形6 W, V+ f' g0 }
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
! W& x6 G+ Z8 G+ k1 [/ Kvoid ChopperWaveform(void);
# z# O8 P1 j6 R; s9 r3 t3 n  @; t9 n& r" r/ s$ e4 e# a" s2 h1 ^4 ~
// ECAP初始化和读函数7 [7 z- x% J) L, Q3 ]
void ECAPInit(void);% {, m' m+ J" ]1 \- j+ d
unsigned int ECAPRead(void);$ O9 N1 M5 l3 k! @8 E3 K

! S, Q) ?( D4 d! h% [3 C! \//ARM 中断初始化* G! p1 W% b0 X: I+ ]
void InterruptInit(void);
3 y7 c: Q. D* i  S: f, Y- ~
4 x8 j% r5 t( k9 ?. Q// PWM 中断初始化" e, G! z& n% q2 i# p8 z
void PWMInterruptInit(void);
2 ^: w+ W- W0 B  V5 |- c// 中断服务函数
( C3 O$ Z- ?8 G* b$ g# @) Y// PWM 事件; U/ ~6 D7 Q+ w( }
void PWMEventIsr(void);5 t' h, E& t$ v. ?0 X& ~1 l# `
// PWM 错误控制事件( W  v4 F% i; x
void PWMTZIsr(void);
$ k+ c: \3 ^2 X; D7 T+ Z0 A# Y% c4 l9 c. |, U: {( i
/****************************************************************************/& v( l# H- d$ n" Y( r  n
/*                                                                          */4 Q1 ?; `& u8 I+ V, K
/*              主函数                                                      */
1 L0 u1 r/ D* R4 i/*                                                                          */
, k" O0 b- h& M/****************************************************************************/
+ O/ c- F. C& q3 J8 ^int main(void)
2 k4 h: c+ K$ T, w8 N{$ J$ w8 ]! ~* l8 ^  D
        // 外设使能配置
* q" z. T7 w' h  ~4 h0 }" `. U- X        PSCInit();5 A! T6 x9 A' m9 R

4 X% Z; J- Q* k" K9 f1 ~        // 初始化串口终端 使用串口2
3 A: W; f& K$ ?9 N        UARTStdioInit();
" T) e8 |: a8 c' @       
6 P* K+ n- T, j  r" M9 O        // GPIO 管脚复用配置! B; h4 d- b2 y2 k; V
        GPIOBankPinMuxSet();
1 J/ u; w  h* y5 ~' H. g1 \" `5 Q5 j4 Z9 w, m/ H
        // ARM 中断初始化& V/ v8 M% y- g2 g! B# u; q+ H! }
        InterruptInit();
2 z) w$ ]" G% ?) _0 u, R2 `) O( M$ I: b. ~# Q2 H8 _+ Z/ `" l
        // PWM 中断初始化; w4 f# @; t' T8 A7 Z7 ]( H: I) E
        PWMInterruptInit();+ z+ F( {8 I" V

$ Z! P+ @7 d  s) e7 r" B        unsigned char i;
1 ]3 T1 d; f6 x) Q5 q' P        unsigned int j;
- ]' l7 o2 W- l' q1 e' H  d9 T9 U6 F6 x. @
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
4 d% T! ~! _2 R2 L$ J        UARTPuts("------------------------------------------------------------\r\n", -1);5 r% R5 r) U- v9 W4 j& K
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
8 v1 I) D1 B2 _- V4 i- }        // 产生波形/ z/ b9 q; Q+ y+ i0 H( A+ \
        PWM1ABasic(25000,50);# g2 p1 d9 b/ E. ~; U  W

) `3 @! \$ C2 S& J( w# L  G! c        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);  u' g/ K7 g& J: k9 N- O3 u. m
        UARTPuts("------------------------------------------------------------\r\n", -1);
# ~! }0 j: {: s2 U
* r* h8 J( f& c6 o2 ~! Z  s8 f6 M7 f

6 h  U1 K$ D. U& d8 s6 v  {        UARTPuts("------------------------------------------------------------\r\n", -1);& I( p1 y; d0 l- d+ V3 x) |
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
8 _' i, j$ q0 a% J/ A+ ?        // ECAP 捕获初始化
! |' r7 x- F! o0 N2 B, n& y        ECAPInit();, n( L2 `3 L% ~; _. B" N3 M
        UARTPuts("Initialize ECAP.......\r\n",-1);0 Y9 h# Z: S- |8 a. K( E
        for(i=0;i<5;i++)" Z$ d) n8 M+ M; C
        {) t- x. |4 ~# `. E. F7 U+ U+ \
                    for(j=0x00FFFFFF;j>0;j--);            // 延时# ~% M4 X& y& `2 I0 o
                    ECAPRead();
0 |' U& m& k! {  K+ ~        }
0 c! T' R1 |$ d8 F1 R$ ~, E. P        UARTPuts("\r\n",-1);
& ~$ F* ?; ^0 d% l6 \7 Y( ~        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
7 X3 ?# r' X: R' |/ {        UARTPuts("------------------------------------------------------------\r\n", -1);1 r4 M% S6 r( F5 x; d5 p

) h# p3 i/ A# Y+ C  s        // 主循环
; c* z' t: p1 q2 }( I: b% N% A4 u        for(;;)
8 N- c: z4 F9 C7 _  k7 \" ~+ u; t        {
% l& p, O" Y% A6 j$ U3 X" Q6 f
" H# T6 A0 t2 C0 ]! @0 D% E8 s        }
) c5 Y* r, m2 ^}
4 D8 g/ p: z; v! F, n0 g" _1 B' i( g$ K$ `6 @4 l9 T$ c" P
/****************************************************************************/
% J1 O$ o! N' S" K" V. f/*                                                                          */# ~% @  P4 J/ ~  T' h* T
/*              PSC 初始化                                                  */
% w8 R. \+ A4 r- ~2 b0 X& C/ N1 Q' N9 H/*                                                                          */; l+ b) i! l# a3 f
/****************************************************************************/
/ D6 Q7 M  a, ~5 ^void PSCInit(void)3 Y5 F' r( F8 c/ P$ L. U
{
3 w5 e, c& [9 s3 O3 I7 P1 P) o        // 使能  EHRPWM 和 ECAP 模块
/ I9 a; E# A! ?; X        // 对相应外设模块的使能也可以在 BootLoader 中完成/ ?2 p/ |5 r! F1 [2 N: }
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);! @- z" p3 a1 y7 K& ^
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
2 _: c5 O0 n1 R" i) o) F; s' }}: D; n. h$ ]% C& ]4 d
; h% B1 G' X/ k6 Y- [7 \: N2 G
/****************************************************************************/
4 Q5 [9 [& W8 ^/*                                                                          */$ B0 }1 d: |  B+ ], p
/*              GPIO 管脚复用配置                                           */9 v! S$ t2 z8 y* p+ G
/*                                                                          */
6 \! q8 e9 N8 K' h: P/****************************************************************************/
" b8 X8 ^- e9 m4 j0 a0 V1 ]void GPIOBankPinMuxSet(void)
( Z& A. Z  s: p$ d% k5 i{- z  `. l7 ~* x/ H
        EHRPWM1PinMuxSetup();( g6 D) N) [7 [" G4 w
2 Q: {+ i0 V" ]( V9 ?  ?
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP), N8 n& P: x) g' i
        // 作为捕获功能时管脚方向为输入- }3 l% O. s8 ~) h
        // 作为辅助脉宽调制时管脚方向为输出
' L% ^6 x8 V! q4 y$ R1 @/ V    // ECAP2 / APWM2
3 `" m7 F) ~0 C9 }        ECAPPinMuxSetup(2);5 B) v" C7 w3 D, ?$ Y

: Y. T( p' n4 c5 d8 b* k# j        // ECAP2 / APWM2方向设置为输入
/ D8 A3 Q- v7 I3 \, ?        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]5 O! `" p4 f0 Y0 q5 W7 {) o
}
" R+ R! n# r3 p2 \$ O2 u  b# B6 o8 _+ L$ B7 q
/****************************************************************************/
; Z0 H- Z! M6 h3 |/*                                                                          */* N7 z4 Y9 U( i- H4 \
/*              PWM 输出波形                                                */
2 D5 U2 l# f( F: d2 Z/*                                                                          */
9 d* B5 K) f) s2 X( ]/****************************************************************************/
' D8 r" }% b4 U) X1 Kvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
' e- i: d7 j. }4 m/ }{
. L6 U/ z8 a% `( \    // 时间基准配置
3 A0 ~" J, @3 L2 v    // 时钟配置
2 j* C+ p+ y6 ?8 }  r    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
( J8 K3 p: \: g) {
$ n; M. w' Y7 l' W: X1 n4 i1 {    // 配置周期1 h. N8 Q  j+ ^# l+ U0 E  I
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,  V9 U& H: [2 ?- m& o) q6 s
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);; c" q, H% i. P# H6 R

1 |4 W& w- W9 ^2 W' g0 Y9 }5 s    // 禁用输入同步信号% R  }; ^. M4 Z0 B9 Q
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
4 |( a% h5 E7 a0 o) i) W  W3 H0 J9 c8 _/ t+ ^) X) K8 g# F
    // 禁用输出同步信号
( k, x9 Q. Z+ N5 K    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);3 H$ i, [* `5 l4 {& l: h

  P) Q% G3 D) a    // 仿真(DEBUG)模式行为配置1 q4 ?( @9 z8 }" |
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);/ ~3 X: V5 P0 P8 r0 z
+ T, F3 A9 M6 _" q
    // 配置计数比较器子模块1 `) d- _) v4 A6 _
    // 加载比较器 A 值
$ D0 E8 x8 f' R    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
2 b$ p1 _1 H( c  _1 H* `                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 H) o# u3 O3 i" G+ c/ P9 p+ |; L. @3 G# K2 ^
    // 加载比较器 B 值5 C. J8 _, {. {3 K+ Q) n$ o
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,% k" ]3 y& Y5 l# w0 G
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);1 m  s, v5 K4 Y4 a( H

0 H# F7 j6 z9 l, A6 C7 P5 l    // 功能限定配置(输出引脚触发方式设定)
$ ~# C. y% t% E: X    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出5 H5 q  k: ?9 j4 J: i! _( i
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
, J/ A9 b" ~2 }# R( F6 I                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,. V: _0 f# N9 T$ U- }+ e1 ~5 Y
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
& V& k4 p" {' k; W, U  m9 e1 B/ z
+ R7 A8 d& W# O1 L# _9 x1 H    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
  x1 `5 Y/ i2 y5 a8 o& b0 u    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);6 u5 R5 S0 e8 ~3 w( g3 c
% i0 V! }' F9 C3 w5 Z! X3 [# S, g
    // 禁用斩波子模块
6 r, S0 e1 R$ d2 a    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
. k  a, z4 J. B4 K/ {7 W: ?1 E) j3 C& s4 o
    // 禁用错误控制事件" ?- y4 N  a, o( k6 V6 ]5 E! V& l& f
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);$ k7 y, ]" O- R6 e! g" [
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);5 D& l* Z2 g+ u$ U2 P+ J
* B* Y" ?8 a6 u# k
    // 事件触发配置
- q, }) ?& f9 I8 \4 v$ N" a+ D2 _" ~1 `    // 每三次事件发生产生中断! T# I! M. X+ F" a8 H" d
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);" b2 e7 D) g+ R) S
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件4 y6 N1 Y1 o" z  L, q! k
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
$ B- a& b& _9 p    // 使能中断9 f/ X& z' O+ S2 Z% H0 c: s' h
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
, B" j2 g# O3 L# X" _* c& {3 Q3 h
    // 禁用高精度子模块
" E5 [0 ~6 P$ ^8 g% J- D    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);1 t- ?/ j8 K5 K, b  ~. O

$ g7 N) s0 u% y    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);- z  w9 ?7 ~0 o
}4 i. e5 f: c1 T  H$ c5 W( O$ b- G
% F3 P. T& Z  D' U
void ChopperWaveform(void)5 [7 i/ h; m. o& _% ]& L3 u2 G
{
( {) J: R+ h! p4 C! k  ]    // 50% 占空比
- c) h4 d6 w- w" i& l" J. _6 `    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
2 [7 y8 f1 m6 D3 `    // 4 分频7 E6 i0 ?# [& F
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
5 y' N4 u, H  R: u5 b* n5 A! f: I    // 单个脉冲宽度! P. ~: U# A& g. T$ r
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);' r3 h0 \4 W- D% F; Y- m
    // 使能斩波子模块
4 t) Z, ~/ d$ o2 E+ B5 i    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);4 O. v6 r( y' K& c$ ^0 s2 V2 R
}
( Q+ i; ~6 r; F# J' a, R; j
9 a8 \1 x5 I3 z+ M* S- l/****************************************************************************/
2 L% n* Z- M& g$ s' H/*                                                                          */6 f- b* ?2 v+ \. T
/*              PWM 中断初始化                                              */
6 z7 j4 G* `" b/*                                                                          */
- z4 Y; n3 M' _4 d  ]/****************************************************************************/
3 \$ ~* C/ t6 Ivoid PWMInterruptInit(void)$ \. M1 }! L. P
{% e* r& X/ _% O! I
        // 注册中断服务函数7 [9 m& N! @, U! d7 m
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
9 _: l0 g8 a" e; h9 |( R        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);# ?/ h* N9 J+ H: J  ~

6 ]. h1 D; Y6 u4 X+ I        // 映射中断' N) y/ ?7 G' ]" D" z
        IntChannelSet(SYS_INT_EHRPWM1, 2);
4 p3 |/ N& I% P  [6 v5 ~; ~        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
6 {# I0 {3 ]$ z8 t5 l/ y; l# U5 }: @! W
        // 使能中断
" y: z2 C% K7 s- H        IntSystemEnable(SYS_INT_EHRPWM1);1 e: {: c4 f. U
        IntSystemEnable(SYS_INT_EHRPWM1TZ);0 l" f+ Q+ y7 r1 ?* e/ N
}( {; h1 R  c* |& h% l% u
2 H& j, j6 l- @1 Z4 v1 O
/****************************************************************************// G9 ^2 f; Y( G# {+ I) x
/*                                                                          */) y# h) q0 r7 |
/*              ARM 中断初始化                                              */
3 o, O8 O  B8 M3 D" m/*                                                                          */
, ]6 r6 @! H4 I: r3 [! _/ _( v/****************************************************************************/0 \. z- V1 p8 \1 \- o
void InterruptInit(void)+ K; ^, H! W9 q$ {. _
{: n) I" ?# H; j$ ?, m
        // 初始化 ARM 中断控制器4 {5 z7 Q5 j# Q
        IntAINTCInit();) f6 a6 @1 u7 W8 W, C  ?4 I

/ B6 V) a, ^1 e+ L  B& Y! H: X        // 使能 IRQ(CPSR)
# n- D/ H& i& j        IntMasterIRQEnable();4 W7 i8 N$ ]. ^; H& _# D' i

, s! i5 o! `) y3 }$ o        // 使能中断(AINTC GER)7 O2 \: N& O2 i5 @" X# s) W5 D" f$ D
        IntGlobalEnable();
: U6 A- {' l! S4 i8 M# T9 G
3 L2 l' J! U, z) H/ \! t4 P5 b        // 使能中断(AINTC HIER)# [) I! C$ e1 W3 ^: b! y
        IntIRQEnable();4 Q; `5 c6 y2 p* g
}
, b$ W  V/ G' i: b; {" {2 `
* w. J4 ^0 a% h8 e0 U. j  l0 S' E* f
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
/ O9 j% s! T- m% x; J: g- s2 A/ p/*                                                                          */
5 B4 \4 m& `* P1 ]! |- r5 o3 }! }/*              中断服务函数                                                */, b/ U% U$ N. `$ n' C8 X( W
/*                                                                          */) @2 x0 b: `9 h' ]4 ^7 Y& B
/****************************************************************************/6 b- S+ T5 f. c  F2 l
void PWMEventIsr(void)% U6 c3 G2 x9 _2 q7 ~9 x9 P$ P
{
6 O0 A! K  g1 G, u/ g2 T) W: N        IntSystemStatusClear(SYS_INT_EHRPWM1);' A/ ?' \% m1 H0 T5 F! X$ T2 G

" F. q" u% I3 t2 U    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
' A/ E0 h( y6 L& ]: A! X5 u. b}; J& N. y- D+ c( A- {$ ]

/ \/ q4 V4 J& ]. \* k5 p& t: Wvoid PWMTZIsr(void)
; @. U1 H+ S; o  N" j$ T, T8 g1 R{, X1 k8 E% o) o+ K' }- b/ M
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
2 F2 i' @! L7 e+ Z) E, ?0 Y  `" ]& b5 V& \' [
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);$ t9 ?- _( `3 E( S
}% r2 n1 Z9 o6 e
7 Z" Y5 F5 N* n+ M( C  f: R
/****************************************************************************/
- H7 B; \# g8 k  j/*                                                                          */
: Y6 U7 `# W2 |5 ?/*              初始化捕获模块                                              */
! Y2 h. h$ B) [2 J' Z9 i3 `/*                                                                          */% M5 _8 p" E) h: |: U$ X+ P8 q
/****************************************************************************/
8 _% |9 T0 J2 t7 ]* O) tvoid ECAPInit(void)
9 ?4 R6 I/ ?1 ?" I{
$ {' `; b) J+ {/ n5 l9 g8 k# y        /*-----设置 ECCTL1-----*/
2 C7 E/ T0 y, S% E4 \& R0 y% e  w        // 使能CAP寄存器装载6 B, i2 s: q: T
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
- D5 J5 a9 A' R        // 设置预分频值.
  [9 o$ W5 H4 q- \        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);8 k, A2 |; G; z9 w# J
        // 上升沿触发捕获事件; v& s- ?! D( Z7 {9 B
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);/ J& _$ I. _/ h) f! h+ S
        // 输入捕获后重新装载计数器值.
6 Q# w# b) Y) u1 a$ i. @' `( d+ J        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);2 D. N2 e: ~2 \# F; W6 v  P
( L: x! \3 i3 c, x. W
        /*-----设置 ECCTL2-----*/
* X' s4 K$ ^( u2 `4 L: @        // 连续模式( {& a# D5 }- Z
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);# `7 z. _% y' N. ~' {! Y
        // ECAP计数器TSCTR持续计数
" s+ L2 |0 _) r. G* k        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);9 ~1 B6 s& w9 D: {9 s( o- J& N
        // 禁用同步输出和同步输入
8 g6 j2 H( A( u# J$ b- l        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
  e* r/ K. h7 c/ r        // 配置 ECAP 2 为 CAPTURE 模式. \% g! r$ u1 C
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);8 T; T: u$ P3 o9 w2 n

1 V2 m. V; P$ w# |        // 使能中断
' f$ u. Q9 @: \6 C) O% v//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
5 G3 i9 @# O# [$ U' ^}2 H& L% Q& S8 @  V9 u

8 R6 v! X1 L6 C( H( h/****************************************************************************/0 X* I+ m: E2 E( h9 S4 J
/*                                                                          */
: d! Z( }' h! ^5 g6 O: }: H& u/ B: V/*              取得捕获结果                                                */+ A4 I5 c9 n7 Y/ p* K6 v3 u! k
/*                                                                          */& ^' r- E: H* O8 i; }
/****************************************************************************/8 @. G# \! m" a. H0 W- R" I/ f
unsigned int ECAPRead(void)
& P, Q4 V/ f- ^9 X{
8 o+ v* p, [& E        unsigned int capvalue;
: W# @$ ]9 y5 \' r+ p$ B! @        unsigned long frequency;9 z# s% d1 q% h( {! q2 Z. a( b$ O
' G! A( o5 M7 }& d5 _; n
        // Event1 中断标志
6 }) m: [6 F6 ]$ V        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))4 z7 w- s0 B8 ^4 m5 E# N
        {
- [, [1 N( Q8 Z- n+ R) v                // 取得捕获计数
+ m  @* R( z$ @                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);: a( y. F+ P& [) @: i# W" t
                capvalue = ECAPResult.cap1;
$ T, H" N- y6 q) K+ I5 o/ ]4 Q* ?3 y1 F
                // CAPTRUE 模块 228M 时钟主频( D9 W* _% O3 y9 _
                frequency  =  228000000/capvalue;
) O. |: G! D9 G+ G0 R4 j6 Y                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
5 \! i8 _6 j' d4 x, m; C1 T6 d) W" V( t: @' c: a
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);, Z+ w( H# f6 D. R% E( E
//                IntEventClear(SYS_INT_ECAP2);
9 ]' t3 d) ~# |+ P        }* T7 P% O$ I  p. R6 U/ f6 H8 @
        return frequency;: u! I- y% p1 w0 N5 \9 g
}- g2 a( n; g$ _+ O1 E
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
3 @1 M; b0 {: Z  {+ O- R$ _( P

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 03:47 , Processed in 0.046228 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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