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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/- L! T( a: S3 d8 A' r# X& F8 O
/*                                                                          */
3 j7 W9 ?2 p- O- @# q# c0 S* R9 S/*              宏定义                                                      */& K7 Y* Y2 h$ ?5 Z4 F& D: L: ?1 C
/*                                                                          */* E# K1 U" \! A8 g% i; Q
/****************************************************************************/
0 M" r6 ^- y) f// 软件断点& ]' u# M4 [7 R& I" Z
#define SW_BREAKPOINT     asm(" SWBP 0 ");
, u$ S! n0 w* v' v2 ^0 I( i6 F# m  x
// 时钟分频+ ~" X4 _( J2 i' ~" ^
#define CLOCK_DIV_VAL     2280 n0 X3 A  R& k" K
4 H. Z  `2 s" Y, d& B) h
/****************************************************************************/' ]) Q: s4 o; w5 n/ ~3 h/ x
/*                                                                          */
2 t+ M  Q2 J, Q3 m/*              全局变量                                                    */1 J; g& a+ X6 N/ k: k" m
/*                                                                          */3 I; s  Q9 |9 q5 p& ^: f
/****************************************************************************/
" S; O' s/ Z# Y; r& Y# t* p) n: MECAPCONTEXT ECAPResult;5 \, B4 N. O; G. O& z% h4 v

3 X2 Q, d# O: G7 r+ u/****************************************************************************/
  Y/ \: X1 B7 L- f2 @/*                                                                          */+ q1 v$ X% u( w$ b$ f7 X
/*              函数声明                                                    */8 u) X; a9 C$ G" K
/*                                                                          */8 k/ L) d7 i% A! b& N' H% f
/****************************************************************************/( `+ |, p0 r6 g$ ?3 _
// 外设使能配置
% T6 W5 p0 [% wvoid PSCInit(void);
! q6 p2 e3 ]9 Y1 z6 O" k" j: W6 u7 `& y& L) _3 x% ~) T3 _) G8 v
// GPIO 管脚复用配置
1 i; Y, K: u0 h" t- Mvoid GPIOBankPinMuxSet();, E7 v0 f: k$ X0 N3 n2 b
" I3 i: V$ a; c5 E
// 产生波形) [* N, x; s4 l
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
# Q) [, {, W( u9 W8 c6 o9 fvoid ChopperWaveform(void);  ]7 T" I/ |) z' b% y% z/ G9 a" @
3 Q3 p" v& C( L& ]
// ECAP初始化和读函数9 I3 V& T6 B# P+ Q+ u
void ECAPInit(void);
" g# I  z$ G6 h* N3 vunsigned int ECAPRead(void);5 k, D& p9 e, ?% q4 E0 R
3 ?, i( w/ z2 X+ z2 S
//ARM 中断初始化; D+ F/ {, \2 n8 F5 E7 `( `% _& k
void InterruptInit(void);
3 Q4 r9 e8 H* t! Z
5 V- _6 y/ Y1 s: }2 k# _1 ~// PWM 中断初始化% w) z) @5 h9 m- U6 y4 L9 V
void PWMInterruptInit(void);
* G. n( j! K# a9 n// 中断服务函数
& W" d& m, W* z4 w8 t// PWM 事件+ l3 c5 r) i/ M) `
void PWMEventIsr(void);
4 w9 I2 Z5 |& }: x+ x/ o// PWM 错误控制事件
* w# j) e1 X  h7 a- [void PWMTZIsr(void);- j% y( X4 c5 V$ n
6 S, g8 m" q1 m5 I9 @; E
/****************************************************************************/3 [4 u2 c1 n8 t) G2 z. b1 p
/*                                                                          */
$ R) X3 h' Y  `3 U- f2 s+ C/*              主函数                                                      */
$ q5 y  M4 C6 m" h% K/*                                                                          */
$ F+ r" q. B8 ?/****************************************************************************/
* y4 r6 _/ g. I$ y9 u- oint main(void)0 r1 Y# E0 z. e6 C, K$ j1 t" w
{
1 z) r! K( ]) u1 v        // 外设使能配置
& c: [: c; K; x! A        PSCInit();
7 q/ a) v2 y! L! K+ B, [% ^- ]
- t3 {: O+ ~% B" y8 n! ^        // 初始化串口终端 使用串口2, X5 F  ~, O7 Z1 q2 l5 y. c) _+ l! N
        UARTStdioInit();
% o+ V) `  g, Q+ y9 {$ j( g        + ?3 P  a4 u" I3 ]; b% M+ ?
        // GPIO 管脚复用配置& W- l2 _' o+ ], C
        GPIOBankPinMuxSet();) @; x& r; k) G' D7 z; j0 y

/ F* S0 X2 t* H- Y$ w' P        // ARM 中断初始化
3 B4 t4 N2 ^5 L7 _7 [1 m! S) A        InterruptInit();3 a. w, [2 y, m! v! O

( U5 r% F, O# s/ x9 ^        // PWM 中断初始化0 u& {9 I: k" G4 n9 b* c2 p- b: m
        PWMInterruptInit();/ C1 z- ]& K0 f0 D$ d$ L

0 Q, A6 P4 y* B: I% \: ~7 y) i7 Q        unsigned char i;
) q: F1 I3 \. F3 r% g        unsigned int j;
: K0 \8 a: G4 K+ A( M% \2 g- y9 O5 d: L1 q0 H. Y  |
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
0 R+ z2 B$ Y# P. n        UARTPuts("------------------------------------------------------------\r\n", -1);
7 u! G+ s5 J: S  y. `! x        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);# r% S/ S) t6 R$ f  r$ ^, K
        // 产生波形
& t. l& G3 P4 }  L9 C6 V        PWM1ABasic(25000,50);7 o' ?# t8 o, Y. ^

0 s2 o  T# X8 q1 T        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
7 W( B6 K: g. t, q. F( q        UARTPuts("------------------------------------------------------------\r\n", -1);
, N8 ?( Q  {& L! x
9 D5 E( F* B1 h9 {" U: M* D
+ X+ y4 k; ~' \2 ]9 V$ g4 O$ X( E" R3 @% x$ T; H8 w
        UARTPuts("------------------------------------------------------------\r\n", -1);
3 N" A& y) _, |# A" B' Z; G        UARTPuts("                    C6748 ECAP Test\r\n", -1);7 M; O# M' B7 E! o
        // ECAP 捕获初始化3 d3 `( o8 D* `: @3 S  z
        ECAPInit();% z/ d# X0 K1 E. E- @2 H6 A
        UARTPuts("Initialize ECAP.......\r\n",-1);
; W$ Q' k7 z% _1 l$ A7 R        for(i=0;i<5;i++)
8 g. ~" }2 [2 ]        {% m8 l2 U: t# }+ Y& a
                    for(j=0x00FFFFFF;j>0;j--);            // 延时8 R9 e# i" U% U, D2 I' P- K
                    ECAPRead();* u( I- k8 ?& }8 U, y' s2 y) b) B
        }1 h$ i6 W- x* @2 Y) P/ k
        UARTPuts("\r\n",-1);) H3 y" K% A3 o& }- }* L$ C
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
, V# h* {& Y& o2 v, K. |' U3 S        UARTPuts("------------------------------------------------------------\r\n", -1);
5 V5 I! U& ?. a# }/ q) i6 d& q  W" ?4 I: d
        // 主循环
3 t( g+ l! ?$ v( y- ]0 _8 b* [        for(;;)
0 b. s2 M' I+ q+ i        {- x! [! e1 t3 y+ e/ k$ @& V
1 C/ F# k% L- u4 P- j5 a
        }) U0 V4 _& ?  i
}
. |" g( r6 M* V! q/ H8 A
2 R/ G) s' B, o/****************************************************************************/
  F4 B1 z" m. |2 K/*                                                                          */
  [9 R* d+ |+ V+ r1 H! G! c8 H/*              PSC 初始化                                                  */3 T( t1 {$ e9 s! u+ {
/*                                                                          */' l' ?+ q8 v  t0 d
/****************************************************************************/1 Q* Y6 G6 Z$ a* h1 z
void PSCInit(void)
( Z% T3 ~/ y  k. s% h5 \{( o/ t( \0 `2 B; B2 k+ g0 d7 x
        // 使能  EHRPWM 和 ECAP 模块
* V# ~- t3 M# c% N2 h5 I4 e        // 对相应外设模块的使能也可以在 BootLoader 中完成8 d- e1 D6 Q+ ?5 d& S0 Z4 a
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; o, }9 E! q( E* ~6 W/ K    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);( l! O, o  `- S9 U! F
}6 D9 B' t% T2 D

* k7 [3 s+ S( z1 W2 R( V- Y0 a, V/****************************************************************************/6 D$ z9 A0 ~2 @8 |
/*                                                                          */
5 Z) I) L/ L8 ~+ F/*              GPIO 管脚复用配置                                           */
6 h% d% W1 m+ H2 D# S( W/*                                                                          */5 x4 E& f, b# k. n% U7 l
/****************************************************************************/5 K+ H) d6 a" O8 ~1 W$ s- [
void GPIOBankPinMuxSet(void)
1 m0 \" F3 V( D- F{
2 e( P, u7 w/ S        EHRPWM1PinMuxSetup();
. w3 {0 v+ ^! V* l. L$ v9 j/ Y' \/ u
: w4 n) V; V/ c2 K        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
- }9 a3 u2 ~( `- N+ y6 h        // 作为捕获功能时管脚方向为输入  K( M- v7 t/ V  o! |4 ]! w& ]
        // 作为辅助脉宽调制时管脚方向为输出2 F1 h  r; s7 P& [' A8 Q0 z
    // ECAP2 / APWM28 s0 ^4 ?5 t$ U. b  ?- n3 x9 W
        ECAPPinMuxSetup(2);
- |* |' ~/ {: D% j, j  _! @% p7 `
5 e2 U& O! ~$ S0 Y, @        // ECAP2 / APWM2方向设置为输入& V  a: z- ]$ J8 ]
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]. L% d( o- a: b. C! F4 c6 {
}
; L: S9 X% U& a9 v$ t: [: E  }% }' v: N/ x1 O0 H8 l5 l
/****************************************************************************/( g9 j  h: N6 |/ h/ P, X
/*                                                                          */2 [  ?' A4 e7 X* ^) M' J
/*              PWM 输出波形                                                */
8 }2 k5 J. B9 _+ D4 A/*                                                                          */7 J5 u. N- c3 R
/****************************************************************************/) V" \/ ^2 ?4 j; G( t7 }
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)) f( o) C4 b9 Y+ i* r& {
{
! G6 p$ _7 Z7 b- X% p% k4 x: }- y    // 时间基准配置4 g, g+ B" N) t9 c3 M7 `4 O$ t
    // 时钟配置: I, ]6 D  [. E5 Z2 r' M7 {
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
# [. U/ i$ m) ~& k' T) N- |+ m
% N! x! ?! G+ }: }' i- q    // 配置周期! c/ U. V0 N* J; x  D
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
8 G0 G8 K) C8 H; R* ^                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
4 P, d" T* n7 O+ C" h! T
" \7 b0 C: x+ r+ U- ?    // 禁用输入同步信号
6 |. P! v8 W8 A& Y# ~, L- ~    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);6 p9 R7 u8 q7 P

2 D+ ]8 x% j, M7 I1 \& x3 w& S1 m    // 禁用输出同步信号
% Y! _+ ^& a( e6 l3 F+ F) B    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
* K. u8 s4 p9 k$ h! \6 Q
5 M0 a! w% }8 X. \7 ?% v) a1 L! U    // 仿真(DEBUG)模式行为配置5 V3 F+ S) k  H
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
( X) A& _, c! \1 q; ~, N% ?* T( k/ [  N
    // 配置计数比较器子模块2 n  Y- }, }8 c& [/ n! {
    // 加载比较器 A 值' h6 Z, _4 ^. F( a
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
1 m9 k( x5 j0 w( b+ C' O" o                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
4 h' M5 \. E* k7 j) E* P) h6 b
( e* b* b) R/ n" e. b3 T    // 加载比较器 B 值" J4 N$ A! q- [# l
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
8 p3 Z3 W) P! Q& h. }                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);$ q$ b$ o+ N+ t7 y( J

7 V! u4 u+ G6 s& z: ^$ A# G" P    // 功能限定配置(输出引脚触发方式设定)
. ?5 F3 d. A  M! h$ k1 E- c    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
3 E% W. U1 _& a: u- n- N    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING," ~8 ~6 b6 i, c# K2 t* ?1 C
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,1 j" ?8 E4 b$ g3 G5 G" C# M
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);$ s, B& c1 I' P, ^" C! l

0 K- k" E- _0 s% P* `    // 禁用(旁路,信号直接输出到斩波子模块)死区模块+ X, c: _& m+ T
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
! B. d! Z- s) i( @* A9 U+ ]
/ I0 Q) O1 c- L  u; q    // 禁用斩波子模块$ D3 b. l/ {, e( t) L7 P
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
& y" B! f; L* n( D
# v& P3 p+ }% S2 X& ]/ Y) K  U    // 禁用错误控制事件' V( P0 F0 {7 Q% T/ p2 x
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);, |5 C; b1 y1 o: C
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);! ~% h" D) G2 d. |; B1 y. i% M
" P+ ]0 Q5 r, x
    // 事件触发配置
- J6 J8 ]2 b7 G9 K' f2 |3 q5 j    // 每三次事件发生产生中断) T$ H6 `6 Z* E+ t2 q% N1 G! g
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
0 ~+ _4 ?* S1 b8 s3 Y) X  L    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
, x5 E3 |: S9 I8 S4 ~    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
5 o* h& q2 ?* G    // 使能中断$ }+ H3 a* I! Y3 Z3 ?
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);' X# C/ _+ ?- i& R! d+ Y  ?& |

, H5 S4 W+ @0 n3 a    // 禁用高精度子模块5 R. |! B. V+ }- c3 D2 f1 u' ^
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
- q9 w- y6 ?! T7 `% t2 a, D
+ j4 u# D8 z' r' i6 R' H1 f  e    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
. R* f# X1 s' U}# b, N/ T& g% E' K( f5 S3 ], U/ P

: T7 M. [% @# j2 Uvoid ChopperWaveform(void)$ W, J% k1 \) ?
{
5 W; J* g9 p* L    // 50% 占空比% g1 v: D- y6 b4 C. f
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);* ~# R$ m( i6 w3 T; a
    // 4 分频: s" q4 h/ e0 {! W, x& E* P
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
# U# ~9 Y8 J* v* E- [    // 单个脉冲宽度  @# h; b/ ~/ w: R2 ?& u4 o0 |1 y
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);" @  j+ o2 Q" @0 l+ E+ k4 Y' s) O
    // 使能斩波子模块
) E8 p& i& |/ d1 l% Z2 R. k' t    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
7 U, t7 Q5 w9 O8 ?* I% J6 Z7 @# p}0 z" r9 A9 {7 U* r% v

/ o6 {4 M$ }5 K/****************************************************************************/! p# }# V5 D" w, D
/*                                                                          */
4 Y6 _' n! w' f% C# J  ~/*              PWM 中断初始化                                              */1 A( h) e1 s2 n" d
/*                                                                          */- ~: `. U) |0 e# d# ?
/****************************************************************************/+ l/ i# M2 }+ [5 W, p' T! ~
void PWMInterruptInit(void)/ u( o* g, r* h3 g6 x# r
{8 i$ {  a& Q! F9 ~. }; f
        // 注册中断服务函数
9 z8 }( l7 S( M        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);6 ?9 V+ i/ t: A) a
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
6 c  B# s( Y. u6 E# M' h
: y2 b) B, f1 s. Y$ _        // 映射中断* q# |7 W8 k  w8 j: ]
        IntChannelSet(SYS_INT_EHRPWM1, 2);
/ n5 |4 Z2 Q! s7 O6 }/ n5 T        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
* K: n  ]4 w9 i3 \8 X( p) @; n0 u3 t. Q
        // 使能中断
# n8 K, E7 u. U3 E2 ^% N        IntSystemEnable(SYS_INT_EHRPWM1);! _5 Q* m- W% h4 h6 X1 Y
        IntSystemEnable(SYS_INT_EHRPWM1TZ);: o) x) p- W9 O' K
}
0 O' I/ X8 B/ q# N
" a4 w" j; T% r" A/****************************************************************************/. ^$ u8 W' P/ h! n
/*                                                                          */
% p0 h# o! b4 A3 g% [) H, Q! |4 }! {5 M/*              ARM 中断初始化                                              */
7 b! V1 {6 j, i( g6 M% T. s/*                                                                          */( I& K/ i  T  N) q# t
/****************************************************************************/
' ?# p. H  ?* a3 A' Dvoid InterruptInit(void)
! ^! j% ]6 i, b1 W; f! l{! O6 v+ _* I# u, F1 S5 ~& I
        // 初始化 ARM 中断控制器0 r: L, l! h  K) M  O
        IntAINTCInit();7 k5 ]6 `& d. s; p
, c- ]& R" S5 F- M  r. M
        // 使能 IRQ(CPSR)0 l2 M8 T3 F4 v9 a3 p# @
        IntMasterIRQEnable();" n# T3 S6 L* z1 s$ Z

. J2 o- m" {7 U& k5 U( T: T        // 使能中断(AINTC GER)" @- I/ f+ c6 U+ d& z* l0 t, ?0 j
        IntGlobalEnable();
. {3 E3 S* r* u* Y
- H  i+ a+ f8 a+ ^4 w6 o0 x6 b2 O        // 使能中断(AINTC HIER)3 `4 x; a7 Y1 E
        IntIRQEnable();
; l( t. k4 o2 Z" Y5 c}
* z5 G6 `* `  a. b' q5 j+ z
& g0 c9 f$ z+ |2 `& G$ W
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/( j: ^  i7 p2 n& Y! J( j' ~
/*                                                                          */: i" q- L5 [8 t4 V4 |
/*              中断服务函数                                                */) }: B0 s7 U0 L& o
/*                                                                          */
( t0 {/ H# l& ^/****************************************************************************/
, b* H/ B6 ^; v( xvoid PWMEventIsr(void)8 I$ O3 _! {$ H( W
{
9 ]1 n6 D7 N4 j" T        IntSystemStatusClear(SYS_INT_EHRPWM1);, W& s: R& @6 _* x
( V& @8 U' e. t# j2 K) V
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);0 [1 z1 |( J% u4 U& M( v% _' |2 c4 R
}& j8 Z  p" K/ G" X& U. M
! L' C% [/ o1 J2 N/ R, K: k
void PWMTZIsr(void); M+ }: a2 Q8 N8 {" B4 v" W
{' M: M$ B+ V) f  X& a
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);1 `& w7 T1 g9 Y% B3 J% `
7 P# c) t! r$ Q% t( n! I+ N8 t
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
0 C- `/ U2 D6 E+ w5 o2 P* i}* o. d- P1 j& `5 j/ G# G# _
) q( ^1 k0 D+ I, B" `1 s
/****************************************************************************/
8 T; V$ i  W5 ]# O3 n6 e/*                                                                          */- K7 k; t! ]* v& D. i! g
/*              初始化捕获模块                                              */
2 [5 h0 G) Y$ T8 H. J/*                                                                          */
3 i4 C+ A, d/ V* {4 d) x/****************************************************************************/
7 k1 h0 H$ J3 Svoid ECAPInit(void)0 y/ ?# U& S- Q7 O5 l
{
* r6 z5 d+ k+ `" U; V9 G7 n        /*-----设置 ECCTL1-----*/
0 A8 n3 i" G% e4 g9 s( Z! t        // 使能CAP寄存器装载2 z  s1 R% Q7 u( W6 L- n
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);# g7 E/ q2 C. d5 e' l
        // 设置预分频值.' B- }* s' |# Y% c1 u
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);9 B. g" d9 ?  x  m
        // 上升沿触发捕获事件4 ^9 W( w* A$ W9 n3 J- h( ^2 ^
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
$ p& r1 V% `: T# |8 g! t5 n        // 输入捕获后重新装载计数器值.5 m; P2 N9 s6 w7 e! G* j' W
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
( U$ ^, `: X7 L$ b4 v% ~0 l/ N5 U# O  }4 U5 `% a2 [
        /*-----设置 ECCTL2-----*/
+ k' {" B. ~$ J7 q5 ^5 l+ ~5 S$ o% x        // 连续模式' v1 t2 m- g  U8 c
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
: H1 k3 b3 h8 }        // ECAP计数器TSCTR持续计数4 {0 W/ r5 {7 [7 |
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);8 N& P! x0 m) e, {
        // 禁用同步输出和同步输入0 v) `# o+ C* l' p1 D
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);; l" q; o  J- M6 ^( T1 e7 t
        // 配置 ECAP 2 为 CAPTURE 模式
9 @( ?0 k' Z) j2 R4 G        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; @! v  E% ^+ O- e3 T  ~4 v3 K" H" y3 ]$ I
        // 使能中断; ?3 C7 c/ n2 a+ w1 I* g! Y% T# P
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);+ h8 N3 I% l  _% j- `6 T
}
" C5 X( I% B) A. F
/ a+ _: c, Z9 ?6 v+ a/****************************************************************************/
% N3 L: c4 M8 Z8 @/*                                                                          */" j! Y3 J  @! \( Q
/*              取得捕获结果                                                */& a9 C. y1 X- p( E+ t2 S' M
/*                                                                          */4 D, P# }+ p( E1 j: l  h2 `3 ?
/****************************************************************************/9 I& I- x* ~$ }  @0 c
unsigned int ECAPRead(void)
2 F. Q- q% p9 A8 `6 C{
. U3 t& [4 P- {0 G! u6 r        unsigned int capvalue;
, e7 F2 Y  ]& Z* S: H; Y" j# L  H, J        unsigned long frequency;4 ]2 Q4 g3 u  k8 p, x
% \% J0 h  b  [4 R: Z
        // Event1 中断标志1 ^. N; E" Z1 p8 e0 C, |
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))3 J9 ]5 N5 [: P6 i0 @+ C
        {
5 @6 t9 K& P; ]                // 取得捕获计数
5 |' D3 c, z/ h' J6 ?4 M3 i                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);' o) _: K$ U0 m1 w+ J
                capvalue = ECAPResult.cap1;; ]: l" z, Z" Q/ x

" T& G0 I( i. p) _8 L! g                // CAPTRUE 模块 228M 时钟主频: j6 d0 c. H3 K
                frequency  =  228000000/capvalue;3 Z9 @) ?* z7 r3 f' r
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);5 Y# K2 G( ^6 R0 D) t2 b! T9 I# F, h
! }& A$ p1 Q/ p& n6 i* p* t3 w; {9 H
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);) u8 n4 D" u3 e: D; D4 r1 A4 z( g
//                IntEventClear(SYS_INT_ECAP2);
$ x2 `4 o0 m$ z8 x! C1 F5 H  l0 k5 `        }' D4 g/ e0 R3 g
        return frequency;. \5 j' r2 B& Q% l( ?, W% x
}$ Z; s. A- p  u5 A0 z( |( h# y9 K
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
5 |& A1 T2 z; M8 q! C

本帖子中包含更多资源

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

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-8-11 14:16 , Processed in 0.046249 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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