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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
7 e3 j% \& O* V2 I2 @+ e$ Y/*                                                                          */' w% n! G: m1 a- Q/ Z: a
/*              宏定义                                                      */- b/ L- `% T, A( }9 J
/*                                                                          */
: q4 \0 L: l1 S5 b* l/****************************************************************************/
( u  C" d! ]$ p% R' {, s* U% l* f// 软件断点
9 \+ X3 n# T: t2 L& x#define SW_BREAKPOINT     asm(" SWBP 0 ");' R3 W3 [8 ~8 G% j) {" N: e; q- e
$ n# B  l% }) Q2 {* J' K2 l
// 时钟分频
  G- j7 E8 r+ m#define CLOCK_DIV_VAL     228# Y) J7 D1 p) t* F' O
: p0 o* o- g. R  x- N( Y; ?9 v& k- p
/****************************************************************************/5 S: F3 d9 u. _6 @$ R, i7 L
/*                                                                          */
5 ?4 V' C" t8 h6 r- \7 _/*              全局变量                                                    */
$ A0 J+ ~( y' O/*                                                                          */
1 i  h0 M3 I3 E* h3 A' k/****************************************************************************/
% H& F4 i. h. E5 g! V% QECAPCONTEXT ECAPResult;
3 S: L2 E: p5 z3 V' |
" N# y: _) ?" s- q' d6 F: |1 s/****************************************************************************/
8 h! _. \* s7 w, }/*                                                                          *// M: G9 f& z. [4 _& E* v$ |
/*              函数声明                                                    */+ s7 a% l. c! c) U( }+ b, @
/*                                                                          */- e. N+ Y3 i* e3 s; G/ [
/****************************************************************************/" {6 |3 @) f& j3 i% b! \" [
// 外设使能配置
0 i% a. ?) G- d( H2 \8 F" Lvoid PSCInit(void);
  p8 A9 L5 }' W6 `& ]0 o
( H6 U" t6 ^: r  l// GPIO 管脚复用配置
; W& {9 D) Z+ N+ u2 `& hvoid GPIOBankPinMuxSet();, d5 ?" B; L& i4 w7 }' f# f& [
* y9 Q; T4 N) n7 X( h+ F3 R
// 产生波形
  {6 |, ^4 u; e# b! i# C# `void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
) a. w+ |5 n3 p' F! f9 m; c( L  G, p5 Tvoid ChopperWaveform(void);
& f( I) m  K% ?5 X4 y& J2 X0 ~; i( v4 {4 @, d6 n; X1 v5 d0 n8 e4 {4 i
// ECAP初始化和读函数
9 F0 _: G. F  o/ Nvoid ECAPInit(void);. `- O7 L( w3 P1 j0 n# O0 L; d
unsigned int ECAPRead(void);5 E. @& M/ s, m- W) O

7 Z* p, P2 e; t' Y: S//ARM 中断初始化
$ U: x& y) m) k" f! lvoid InterruptInit(void);& Z8 ~5 P/ ]% P: {8 x$ w1 X6 C

7 k  }) j" K( P* ?% a// PWM 中断初始化. U- Q. x# d9 P6 f. J  v3 g1 S
void PWMInterruptInit(void);
, p1 G! Z1 x3 `0 d6 v$ L// 中断服务函数
( K, h) g. K) Z9 [; I// PWM 事件
# v- g1 M% e& h  R# ^void PWMEventIsr(void);
/ I/ }# Q: q. {4 {// PWM 错误控制事件3 c- ^% v# |( j
void PWMTZIsr(void);3 ^" W3 T+ s6 q& c5 F

5 k# R& f6 d8 D0 x/****************************************************************************/
! M3 b- ?" @. @3 z5 Z/*                                                                          */
. a" v% I6 F# b/*              主函数                                                      */
( @# L0 U! v1 x% q+ E* `/*                                                                          */. n* P! B) Z8 y7 C+ A* Y; }. [
/****************************************************************************/
: `! u0 ?8 s% X* p, G$ cint main(void)0 L1 H( x1 Z4 |& A7 A
{
+ I0 B+ J" _* N        // 外设使能配置% R0 K7 L9 {+ t# c6 }8 N3 T/ n
        PSCInit();: [% q, _3 v5 J, t8 D/ A

8 e8 Q( s) w! `7 b. N. I        // 初始化串口终端 使用串口26 Y3 k4 P; H8 U4 Q: M" ^2 C& p
        UARTStdioInit();
) _% D- L  y6 w9 L, a       
8 |) E3 o) T3 d        // GPIO 管脚复用配置* u) |9 F' P; Y4 i( F- Y( A( _
        GPIOBankPinMuxSet();
  J: t. l; g+ N
1 e0 w; x/ a' F5 g0 O# x        // ARM 中断初始化
: y( V' h: N, I7 R' Q. r; m8 K        InterruptInit();
  I. p% R/ W6 S, f
2 ~7 L; x  u- O) a& s        // PWM 中断初始化
% ~) v, p; L# F$ x) e" F5 e        PWMInterruptInit();8 \! ?0 ]7 m# k9 w9 s8 m- W
6 H. B$ b) m' a# u( Y7 w! j
        unsigned char i;
0 c* P- h  \9 q        unsigned int j;4 q# t+ t+ s( b2 Z& C% o
8 o, g. E8 `( J) U+ U
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);; l* Y( a0 A- c' i- Z
        UARTPuts("------------------------------------------------------------\r\n", -1);! F" D  j' c9 N
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
  x% _0 H, a& X        // 产生波形% G/ p. c2 e, Y+ M+ {/ I5 b
        PWM1ABasic(25000,50);5 y% p; L* O' v( d) s

$ x; ^* ~  `: ?4 a% [        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
. a- ], ?! [; O. {# [% S  L( Y& n+ U        UARTPuts("------------------------------------------------------------\r\n", -1);* f" D7 S- i) P  z

0 G- u1 D- z' \" F/ f
+ q9 T) n! {- S- V9 @: O7 z- i, a4 u' m+ ~9 N4 w& R
        UARTPuts("------------------------------------------------------------\r\n", -1);) B- x$ u( g, B1 {( [) A
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
2 J/ ^) b% r9 c+ y        // ECAP 捕获初始化! C! E3 K! `% L& E1 B2 @& c
        ECAPInit();8 R8 U7 |& B& C' w9 d( D( m
        UARTPuts("Initialize ECAP.......\r\n",-1);4 I9 E  a* S, D9 V
        for(i=0;i<5;i++)
1 ^( k: U& H2 _5 S( v4 t        {: [( g! m- U  d0 ~2 Z
                    for(j=0x00FFFFFF;j>0;j--);            // 延时. ?* b/ p: ~; N+ k) g, K2 p1 N' t
                    ECAPRead();- d. G( z5 A2 ~* i. \6 Q
        }
4 S! u* K2 C0 U+ c        UARTPuts("\r\n",-1);
" J7 j8 h7 _9 b: Q; T; j: c# _5 N        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);+ E) H- y# ]; L& J7 A) n
        UARTPuts("------------------------------------------------------------\r\n", -1);
# W1 z  f8 M1 ]) B( e
2 T, I7 t" S- m# j6 E/ V5 P        // 主循环
+ M$ w* y% `+ \! B  _- Z1 M; ?        for(;;)7 k7 {- b4 ?3 e
        {; n7 ^7 v8 D. @0 M/ E  ?! F( e* |

2 f2 i% g. ~' e4 v4 P' U        }) k" W3 x# k4 V  M2 L- ?1 S4 Z- M
}$ [; k0 T% V% _& Y' H

2 b5 i4 m9 c8 H+ x+ w8 F/ A+ {/****************************************************************************/
+ S+ W  u4 b% g% l) ]2 Y/*                                                                          */1 x2 q6 ?  a' f1 }# o) W* X( M
/*              PSC 初始化                                                  */
4 ?- z$ h. L2 O6 z* H8 U/*                                                                          */6 \6 P" w/ [8 y6 n1 g6 U+ N
/****************************************************************************/
, B- p- f8 I9 w- r5 v$ ]5 [void PSCInit(void)
6 Y& k' Q2 t0 }* _+ r4 R+ @. V, _{
1 w+ e! J" A6 u4 ?( J1 u        // 使能  EHRPWM 和 ECAP 模块
+ w. A# ?. v  @3 i. y        // 对相应外设模块的使能也可以在 BootLoader 中完成+ `7 t5 H$ e# Z" \3 }
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);! D8 Q% b# C  ?" b- g
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);& ?. B9 h; k1 L. K
}
9 V, h# Y8 @: }  Z3 T0 Q  X  y
0 k+ k/ c/ D0 v! Q, c/****************************************************************************/. T. F: j& o3 h2 P9 W7 _+ C
/*                                                                          */
5 l  Z6 n! D! q" Q/*              GPIO 管脚复用配置                                           */. {9 _2 n7 U7 O4 {
/*                                                                          */; n$ S) Z  }0 v3 W9 z6 R' j/ q  X
/****************************************************************************/9 `9 r* j7 D. F# K  W
void GPIOBankPinMuxSet(void)
5 q+ o+ b1 Q1 }5 K! X) u. i8 c{0 _, W. D# p+ D" O
        EHRPWM1PinMuxSetup();! _* W) V& }; X% @& ]1 X+ b
7 C- q5 l& \+ S/ n9 p# h: b
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)0 E$ M2 b! v% d% l9 M
        // 作为捕获功能时管脚方向为输入9 V, R; @% }% I: c4 E( e( B
        // 作为辅助脉宽调制时管脚方向为输出% x" p8 l  ?  z6 j
    // ECAP2 / APWM2
; Y3 M3 G7 l5 `9 _6 h( H' i- }4 c        ECAPPinMuxSetup(2);" W% e' F1 t8 w

/ Y$ l6 s8 r. z" P; v        // ECAP2 / APWM2方向设置为输入
1 d7 f$ \, L2 H( T4 E/ A* F        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]+ w! C' p) u" ?/ N' _  C
}
% |. p2 ^: ?) T( n/ E; k
4 Y( j; B( x7 n" O% g# j4 ]& g/****************************************************************************/% l* `) D6 F1 x& \
/*                                                                          */
! G) O3 J  i# c: U& D! D- `/*              PWM 输出波形                                                */
) L7 ^2 P3 c7 ~( @# L7 r* \1 s/*                                                                          */
, R* F/ o7 K" |# x5 m! D  W/****************************************************************************/3 I+ G) x9 D; l9 x
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
# J9 f: a0 i; ?. R* \9 }" c+ Q. n{& a' i+ h, x7 @; X. L: \9 N+ l2 z
    // 时间基准配置
8 N+ q, f+ w# g    // 时钟配置
- E# ~) ^( y6 Q    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);' n& W0 C' z% K4 j1 \

  h" t, G, p9 m2 v    // 配置周期4 c; u4 c  j) O8 ?! r
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,9 I( @; Y% ]% T" E: T, ]" s
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);% R; y. D/ ~8 x- ]; Z7 N

2 g3 E& \- A4 Q- R1 s8 U. C0 b    // 禁用输入同步信号
  N3 _6 N) M8 Z' o    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);1 I; W5 [' k) \( t# n. h
; R' V+ b  {$ D/ i
    // 禁用输出同步信号0 ^# K( r2 T3 d8 A& P0 D
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
0 ?- U2 ]/ @' M8 g( y- q9 s# c# D0 M8 a6 {# H' W: O- [+ f; F
    // 仿真(DEBUG)模式行为配置
* Q+ K. N' T1 t/ a    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);+ Q5 Y+ Y$ W" U1 S& [2 D
, u! D; z4 \' B' P
    // 配置计数比较器子模块
4 K+ e+ R, i4 S! j2 v# A/ N5 y4 V& R    // 加载比较器 A 值; n+ F1 s4 u5 y/ {% d. _- c5 ]+ @
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
$ y+ u8 R! b; b                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);1 G4 F' U* n/ G  I

# }( M6 N) r8 ]7 `6 h. ]    // 加载比较器 B 值  `' l0 E) d9 ]2 u2 K! c+ r
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
" R$ a7 z3 c8 Z& U" ?, O) R                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);& L( N- Q! ^5 ?
  z( B- M5 Z* s7 W4 L% r( M7 [
    // 功能限定配置(输出引脚触发方式设定)
, M, E" Z% K2 F0 Q    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出5 R$ \" e3 j: e
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,3 I2 p4 W& r# b" q+ H" R- V; H
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
- W4 a1 s1 \9 ^3 j) I                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);4 Q2 F' |3 i9 U. I- w0 Q- {
# c' d0 H& ^; f
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
+ Y$ _0 W% F2 _% R, t3 R0 h1 m( F    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
: C& W8 {. P/ j$ q1 p7 B( h' X! m) s( p7 X4 s) m! {
    // 禁用斩波子模块' x+ o+ K9 x  E- d% Y% i
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);: v: L( b4 D: L

5 \3 _' A1 U" U" X" O* [    // 禁用错误控制事件! Y1 `, S) b2 }! a3 B# S1 G3 C
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
4 t+ d8 m6 p& `  \' k' I% C. Q    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);& O1 e  r; t: L+ Y2 n6 @0 V5 t
" s3 I& f# Q; y& y
    // 事件触发配置
6 z5 Q# G* i) H5 e4 R1 r( B    // 每三次事件发生产生中断
3 I) B; b7 l7 M5 [) F3 M    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);9 u* v5 R' t$ O% _. U; J* J
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件3 `7 O: ?& E1 E9 b  S" ?9 N; N
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
# Y( h7 W" W5 e2 u0 |+ F    // 使能中断; |2 ]) @- Y/ N2 p& n9 t( t3 ?
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);+ L2 [7 b* r% T" C. H$ d2 C

" V4 P1 J3 ]3 Q( b! Q    // 禁用高精度子模块
( ~! ?6 t3 q- J    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);! R7 b* Q' r3 I0 \3 [: ~

5 ~6 S1 t1 f& r' z    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);5 G6 A! }2 a# p8 {* }, J
}) l$ o! S( L5 O+ l! u9 i+ l
8 @' s( j% j) ?( X' b
void ChopperWaveform(void)
2 a; Y! `- P/ b. p2 T{
# s6 T( @/ x' b    // 50% 占空比
' J: ]2 e/ F$ y* D# i  F    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
$ Q. n: P4 l3 w. Y5 T. R    // 4 分频
" o% _' u0 K* ]9 l5 i    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
, w* C# n. t1 z- ^6 f    // 单个脉冲宽度
' Z* j5 {; K1 |% r  L2 {    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
# m( A$ A) v8 t8 }$ j/ ^    // 使能斩波子模块* V" B+ m% R  B5 q. O) g3 B
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
. N* o7 D. j" S# x# b& ?}
/ H" g( r: j- @- S: Q
9 F; T: Z; v) l$ A( ?  p5 B) _/****************************************************************************/+ ?9 H0 G0 Q. Q7 A7 W" ]7 c
/*                                                                          */( t0 [7 n/ R' |, {" C9 C
/*              PWM 中断初始化                                              */
5 P/ m/ q* }# _4 @; T0 e, m3 w$ m/*                                                                          */" O+ P+ E$ T5 u( [
/****************************************************************************/  y4 h! x2 j6 U1 c* z& q/ L' J
void PWMInterruptInit(void)4 p, C% X  H) q8 g2 u# }# G* j( Z
{
, Z6 d' K9 C  w/ `        // 注册中断服务函数" U& e% X/ k1 C$ C8 q3 y! ]
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);+ i: K, b0 `* ]. m/ s  _# n
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
; T- j4 M9 ]. |) G0 f5 h! _" u4 n% e9 t( b: K4 j! C
        // 映射中断/ Z# m0 v5 ^7 D
        IntChannelSet(SYS_INT_EHRPWM1, 2);
: y4 h, `. V5 e        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
8 Q  g) y1 H( m! ^3 d( J% ]3 ?+ w
        // 使能中断5 \& _. V/ y. u- `7 f
        IntSystemEnable(SYS_INT_EHRPWM1);* Z7 n$ k6 x% o: P4 }* o( b
        IntSystemEnable(SYS_INT_EHRPWM1TZ);* l7 g0 U. E3 U" T7 [9 u( d7 m
}  L+ ^% [& z- u2 P7 s9 R
0 q4 y1 K  r( V; w
/****************************************************************************/$ B/ O5 C/ F/ j9 i& }
/*                                                                          */0 w' q0 s9 X' ]( ?
/*              ARM 中断初始化                                              */( D- H& |9 l4 ?/ G
/*                                                                          */: B8 h3 o5 X. e& W2 U. a
/****************************************************************************/
  p& }% D) n4 q4 Z5 s4 C7 G* A! }void InterruptInit(void)
0 x3 y6 U7 t' j6 ]{7 R) k# v! P% u* m! c, O9 o& k
        // 初始化 ARM 中断控制器& o$ h+ n- X1 f0 D! U
        IntAINTCInit();9 r. f& L1 S+ Q% c' K! D1 j
/ {4 c+ O* V( D! T. {
        // 使能 IRQ(CPSR)5 J- X3 H6 |, n, K5 |3 O( P1 ~2 U
        IntMasterIRQEnable();2 ~( `* K( }& j/ \

6 V# _. u$ A$ b% _        // 使能中断(AINTC GER)% S' D* o6 o- V  A
        IntGlobalEnable();
2 h: f& G; G# J- ]' f
% L9 h9 n' W" \, G! n* o        // 使能中断(AINTC HIER)4 x, p5 I- H3 g! F) e
        IntIRQEnable();* n2 W7 u8 z  Z0 L
}* m* S+ O  f* f$ Z1 o9 I; r" F
& m+ y4 o$ `1 ^* i" B; [
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
- H* W" z7 Y4 |' t( e+ a2 X0 k/*                                                                          */8 }0 A4 ~5 v+ ?! R2 V  e2 f
/*              中断服务函数                                                */
) T- _: E# ^* L, @/*                                                                          */
+ ?$ m0 y' j4 o; B, r% Q/****************************************************************************/
4 @. P8 F8 ^( t' i. _2 bvoid PWMEventIsr(void)2 a3 f% \8 I9 W4 w
{
* j' R* P# @% f, u        IntSystemStatusClear(SYS_INT_EHRPWM1);
% T$ v/ k5 l( ]2 N% `! U0 y2 n0 f) o+ D) ]
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);9 r6 b5 a( p& W. g- O4 _
}4 j3 g- O' y6 {
7 s8 b* J$ y/ \5 f4 C' u9 f7 W
void PWMTZIsr(void)/ r$ H* V! T5 W5 A" |8 P
{
1 T: M+ \; }# z/ }        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);8 _5 d/ ]9 p1 M7 z" f) D
/ W" {" f1 x! D% A; A, C2 p
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);9 f/ r3 l3 R1 }( V. k* T
}; j; q4 @( w( O9 h
7 t  ?7 X/ Z- V4 k1 E) G
/****************************************************************************/, E6 l* f" o" x1 q% o3 J6 G) ~
/*                                                                          */- i% X4 [6 G4 ~# F/ K
/*              初始化捕获模块                                              */
6 s% m4 ]1 E9 C' }7 ~% i/*                                                                          */- T4 I' J5 Z2 h0 h6 X5 x
/****************************************************************************/
/ ~3 \) d8 w+ v* {4 m5 Z4 O. P* O& pvoid ECAPInit(void)
6 l+ O% p# p  Q# ~% J{& N+ Y$ S4 j# t$ S3 Q/ u
        /*-----设置 ECCTL1-----*/4 c6 X* @+ `0 B! v3 r0 g
        // 使能CAP寄存器装载
6 Z8 t* r: @6 }( k- Y1 t; P  f7 g; k        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
( c2 ^  v' F2 B. p8 h        // 设置预分频值./ X9 x+ }$ T$ F# m# I) V, u6 z
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);$ i7 D  |; c9 ~  y
        // 上升沿触发捕获事件
* `1 r7 N2 E% f  a- H5 @* R        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
- q1 |  J: Q" M; x' Q8 {7 I2 E. h# |        // 输入捕获后重新装载计数器值.
/ R, n' r! C# v6 K5 X5 [+ S! J        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
! p, N4 F% e* J, h( h. d' L3 z) M' N6 W7 L: G
        /*-----设置 ECCTL2-----*/
9 K( c( V: `$ h( R        // 连续模式' E. r" H8 R8 n
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
) _2 o: y. Y9 S* O! g& |        // ECAP计数器TSCTR持续计数% N# @2 `3 e# B9 z
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);9 O6 O' Y8 Y" f
        // 禁用同步输出和同步输入
5 z& Q: ?  \) w! k, J        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
) T7 ^  o/ w0 {. w$ f        // 配置 ECAP 2 为 CAPTURE 模式  X. K: t4 ]& H0 y6 _2 L( F( n
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
+ i% f- u+ }. b, F* H
2 l: c+ s3 I2 p9 G9 f/ N% E4 ~' f        // 使能中断
8 e1 x1 a& h' \5 V' I//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);. {4 g) F% \( Z! h% P
}! d4 A2 a3 w1 }. }4 V$ B' }& o
: g# l  c' W- A% ^; t3 C
/****************************************************************************/
0 `1 P2 k; q; t/*                                                                          */6 B' D' F/ j, C) i: l( d. J1 l
/*              取得捕获结果                                                */
3 E* N* N$ C- \8 {/*                                                                          */
6 d0 H4 e7 {: a' ]" }/****************************************************************************/
& i; s1 ~! Q7 E: }1 Uunsigned int ECAPRead(void)
' [1 b* c0 t) o6 j2 f{
& L! V/ |" U7 R" H        unsigned int capvalue;, c' U- J! |8 g0 L8 ]7 a
        unsigned long frequency;, m% `8 ^$ k3 u2 V

. j0 ?2 v9 z. e$ @7 R& ]; z        // Event1 中断标志4 ]: f' `- F& v0 S
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
# y) f% L  K" X9 ?6 Q) c  [        {' W+ }6 r. F, x; f2 v) e2 T2 p6 t
                // 取得捕获计数+ I2 ^( T7 j( a) }: C' c) I
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);! l; F* N$ X$ t' c% A7 p
                capvalue = ECAPResult.cap1;9 l% J+ @" f! S: y  U& g

+ c5 Y, ^: b8 E5 `! z4 J                // CAPTRUE 模块 228M 时钟主频
7 ~1 M1 o  s  R% v% Z* J7 `3 Y$ _                frequency  =  228000000/capvalue;& v; ~8 `% x' I1 s3 M
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
: C6 o" W! u' ?: W7 }# @6 F/ _- ]) X4 f2 T/ q! ]
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
* m& R" d5 t" }& H4 r& T4 O//                IntEventClear(SYS_INT_ECAP2);
, H: M/ ^9 o2 O) V        }- Z) m# `+ h) s8 A/ J2 H) Q7 H+ n) l
        return frequency;2 ]- ^. }% u3 h4 i
}) @, B/ s- W4 W3 u+ O1 r3 \
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。8 v1 G5 s* r6 b- b  {& Z+ I

本帖子中包含更多资源

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

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 12:29 , Processed in 0.044419 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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