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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
2 V$ Z7 N, z9 R0 b/*                                                                          */
  S7 y% N; ^0 ~4 U! _* O" {2 X/*              宏定义                                                      */4 i: B$ c6 B6 x2 s7 w% D, }8 F
/*                                                                          */# d: G2 i1 H/ M1 |- @
/****************************************************************************/' Q" m+ S: g9 ^' e5 n  M
// 软件断点
2 I! v/ i$ u0 E. o#define SW_BREAKPOINT     asm(" SWBP 0 ");: ^5 B( C4 w8 J1 Q. A/ S2 j3 j

5 c$ l+ A) Z; c9 R# b// 时钟分频* f) A, @6 E) s  X; K
#define CLOCK_DIV_VAL     228% l( F- L- T. {4 J3 I4 M$ n

5 L+ u) i3 L2 K' s8 R/ M/****************************************************************************/
6 P8 a6 J# |7 o( `/*                                                                          */# q, `# M" `- j3 d3 r" ]
/*              全局变量                                                    */5 _. a- x! S0 l5 _3 p
/*                                                                          */8 V+ p# @7 }' ^& E: l: ]# Y( W) N) x
/****************************************************************************/9 D! i# c4 E2 L# w8 D' `
ECAPCONTEXT ECAPResult;
/ p: i# r, n' O( ~& P
& E1 \9 o1 T/ w/****************************************************************************/
2 R, h3 i' }0 m- i/ m- R  K/*                                                                          */5 S7 X9 X2 Q7 t7 z& R
/*              函数声明                                                    */
# d; r- p' E! p( o/*                                                                          */2 ?! r+ f! A; ?0 S
/****************************************************************************/
5 A) v4 ~8 ~1 m// 外设使能配置7 d) a! g2 s- U; p8 W1 ]
void PSCInit(void);8 s! w8 x0 p" J" j4 i. _6 u

& i# T* x. a$ ]  Q( C8 @6 ~// GPIO 管脚复用配置8 S, X# Y5 M! S% D* J+ R
void GPIOBankPinMuxSet();
% {; S0 c9 w; I) Y
% D* b) O! W9 h$ C# |/ s// 产生波形  g7 z5 X8 f6 ?: p( V5 u+ |
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
# l* C7 Y; z( kvoid ChopperWaveform(void);3 G% o! ?. ?% R$ D# w+ o9 S

; G( w1 r/ q: G% Y5 X8 F9 `// ECAP初始化和读函数
/ l1 D$ U' U7 C6 {5 evoid ECAPInit(void);
- M( X3 T/ i1 }/ K# d9 ^4 Funsigned int ECAPRead(void);9 X+ l0 g. L* _* D/ f6 \5 J# j
# q* q7 C9 A' Y9 A0 k: h8 j
//ARM 中断初始化
# @5 @" k; @. Wvoid InterruptInit(void);
, S6 O) H; j  Z% K$ w! T$ l& }
7 K3 t  [& A8 j0 ]% P// PWM 中断初始化
1 V& }( X6 ?! s0 c9 A- l  m( nvoid PWMInterruptInit(void);( Q- j) }# y; c0 N) ?& g& f
// 中断服务函数: a; ]+ e% v$ p) e) T# U
// PWM 事件
% O- G, ?+ b2 O0 i" Xvoid PWMEventIsr(void);
* b7 T0 ?7 r0 y// PWM 错误控制事件
0 `$ a3 A$ D% V7 s" P0 f6 t( Nvoid PWMTZIsr(void);
* J7 ^6 u& T. y% G/ x# I5 e
9 U) P7 P: h  g* P0 [/****************************************************************************/
# }6 s. j6 G- k2 K/*                                                                          */
; }# L/ n4 [6 o  i7 ~8 W7 F# k/*              主函数                                                      */# J0 I/ d' n& V! b/ C, H
/*                                                                          */
3 `- N4 F$ y' y1 ~/****************************************************************************/
- J, i/ @8 ~) O* L" xint main(void)- S% B! n9 G( X  B% T& v
{
6 r7 Z7 T& U- m8 I3 @6 [4 n        // 外设使能配置% `  T$ D: f% G2 R5 O# ~! _
        PSCInit();
6 ^$ R* ~# C) ]# j
% v3 I& h( {  ^- g) {" i8 @% I        // 初始化串口终端 使用串口29 K# B( y5 x' }. v( C5 s* h; M5 u
        UARTStdioInit();
; p; m- |9 g, R: i7 m2 H3 h       
% U# X6 P. J$ k        // GPIO 管脚复用配置) w, S6 |0 q) `& v
        GPIOBankPinMuxSet();
, i! X/ L% h. z! Z" j! w/ i9 q- E
, @  [' ~/ e) y6 t$ `( \) U        // ARM 中断初始化9 Q! `- @3 _( A. f- N7 O" l6 j6 |
        InterruptInit();+ x6 R& A( {+ q* N( }
- \4 c! }2 T! H. u9 p5 f2 M0 W
        // PWM 中断初始化0 t8 a" S. [$ }( h" I. c, P
        PWMInterruptInit();
! H, J8 p/ T% i+ f* |8 \
1 P4 d& F% W! ?0 ~! Q2 X6 u% \' O4 n        unsigned char i;7 T, v0 A+ t) E* x7 }* z' |. {8 u" f- Y
        unsigned int j;
9 S1 e! B1 ?3 _. D( V1 t) g8 v- [0 M/ {2 H: s$ Z. e3 E
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);5 v  L! U0 I) r1 J
        UARTPuts("------------------------------------------------------------\r\n", -1);  R* M# X7 k' S& r/ t
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);6 \  P: z; W$ @* n) C+ u" V
        // 产生波形$ K3 M! N% Y. ], h! c! I
        PWM1ABasic(25000,50);
3 M4 h2 Z& C/ m0 R. F+ ^
: f2 H) ^' ^7 c2 y$ t3 Z) x        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
* W3 @. z% Q' w+ L        UARTPuts("------------------------------------------------------------\r\n", -1);
* d( K0 k+ M, k. n. j% ~, P) j( _  k9 J0 v5 r( o) K, X2 ?  f
$ e# L, z( v, b7 L& V

$ a0 l& k" R2 F  b        UARTPuts("------------------------------------------------------------\r\n", -1);
! F( W3 Y8 v! o; L        UARTPuts("                    C6748 ECAP Test\r\n", -1);
8 d* n) F  b2 S# k        // ECAP 捕获初始化
1 X% G+ N$ V+ C* g$ x+ T  h        ECAPInit();  w2 e: b, |! G8 Q1 }7 l7 O7 S
        UARTPuts("Initialize ECAP.......\r\n",-1);
/ b$ |% y( ~' s3 d. x' g8 G        for(i=0;i<5;i++)
* y) f: X# Q* Y. Z6 R        {
: S9 y; ]8 t, B: C$ f/ a                    for(j=0x00FFFFFF;j>0;j--);            // 延时9 S' V8 [- f: R/ k* |3 g
                    ECAPRead();
, T% ~2 u4 P+ \  i* d9 r        }
( i  O# {; r9 F9 s" u) T4 i2 T$ x        UARTPuts("\r\n",-1);
2 s0 o" d, i- J& ^* H2 X0 d, w/ p( h        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);& x- d# e% I( P, L/ Z1 l
        UARTPuts("------------------------------------------------------------\r\n", -1);3 j% w" [8 G  @* g7 j+ \4 G
& @# L" I& d- j( R$ I# q# O
        // 主循环- p) a( S/ {9 g! D) g6 @
        for(;;)
  x4 d' y0 m# ~% c8 m' J$ B        {. U5 n# r/ [& s* J- f

/ z1 R0 ]. x" N3 Z- A- {/ D        }
, v: i( ?2 D( U) ~9 o}
$ T! f# i4 u, n, Q7 h' A
+ `8 q7 z3 s- K8 r* C$ n- v( y/****************************************************************************/" D. q5 o# b& q5 y6 o
/*                                                                          */$ v7 S$ F7 c: p+ ?- x5 w
/*              PSC 初始化                                                  */6 d/ ^- ^$ ?4 ~- |/ @# O" C
/*                                                                          */
8 p6 N9 a) R: T! h1 A! e3 b' R/****************************************************************************/5 t$ \; ~  r0 _" _
void PSCInit(void)
$ J* U% g8 z3 ~$ r! x5 s{) s1 W6 a1 T% X. s; W6 ~  H& `/ L/ o
        // 使能  EHRPWM 和 ECAP 模块5 m' ^* o# }' a& y3 z1 ~
        // 对相应外设模块的使能也可以在 BootLoader 中完成
7 z+ S9 d7 p( g3 x6 h9 C0 C# `9 M    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);, q" ^- h6 j, w
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
. t$ k* J' q2 G+ A( J8 [& _}
- Y# O) L6 m8 n  b9 t8 l7 S* r: r9 \7 i( S; H/ \
/****************************************************************************/. h, m5 u. l  i) K
/*                                                                          */( P* w* {- e# G' _5 r. @# l
/*              GPIO 管脚复用配置                                           */
( F* I) J( _& J5 V/*                                                                          */
7 Z* o! o+ g  d& Y" A" T/****************************************************************************/, V/ R: C3 n7 ?$ B# [0 i& y
void GPIOBankPinMuxSet(void)& [3 a* Y6 G8 |2 W; W
{
( B' _0 m: G' L3 x4 A        EHRPWM1PinMuxSetup();
% a* a. k8 S- W  M4 K* w+ B4 F" z  f
1 T+ O- t3 s: \9 ]* g) y        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
( x0 e. z: @! v        // 作为捕获功能时管脚方向为输入% P1 k$ V* C" O% ^' D
        // 作为辅助脉宽调制时管脚方向为输出7 `, |5 I/ F9 ?  h) i
    // ECAP2 / APWM21 q+ m1 C6 o- g9 [3 q8 q7 }
        ECAPPinMuxSetup(2);
. L7 n$ ^5 t5 C* e. x7 ]9 i
$ z4 ?0 s1 ]& U: `        // ECAP2 / APWM2方向设置为输入
& l7 G9 |  W- Q6 L0 y; [1 ^- j        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7], y8 {0 l8 M* r% k, l
}
% K) h7 X$ P# X9 D$ J) e5 L) W. b0 a( ^; D: A
/****************************************************************************/
, ?3 G( Q1 y! i; l7 W& J4 ^  q/*                                                                          */
% c4 h+ m+ u7 \1 F: W0 M/*              PWM 输出波形                                                */
+ b9 m& a6 w' A/*                                                                          */  c% ]& g6 R- E* ]- i" v
/****************************************************************************/' F; t, r! g0 [0 K# R: d
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)6 r$ n, P& _/ H3 _
{. s  I& d( I/ R# [- A/ P9 J2 t
    // 时间基准配置
8 s, g& g- Z: v0 o    // 时钟配置9 G( j* F5 j9 o6 J. {2 c
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);9 n6 m: @, a0 \6 X

1 D% W7 Z7 o, N  w4 j    // 配置周期
% F% |( k- q" H    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,4 I! f/ [: N* ?3 [+ \/ a
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
; o5 H( [- Y5 @6 I  N" R3 ~- g" P; }6 S
    // 禁用输入同步信号
* ?! ~1 v9 b* d: W    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);1 J" N# {- C9 Z+ W9 b2 D7 {

9 i. }6 q2 ]6 i  O; G    // 禁用输出同步信号
7 K6 u, H* h7 r& ^    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
# d% |3 {" N( Y, @# t, v! j* b
$ N  \' M! u+ W! u' ]3 \7 q    // 仿真(DEBUG)模式行为配置6 }& F- t) P" v: X7 _
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
0 b0 E9 P% _* b8 u7 X
- C+ K3 Z" L( }/ B    // 配置计数比较器子模块
" o7 [! _- u, W" _: m9 Y    // 加载比较器 A 值: Y0 o5 r- w" y6 u' Y
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,. l0 w6 H' \1 s; L
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);( x/ {. E  K% N5 @: T; w

, L/ e# U) C3 k5 L  z    // 加载比较器 B 值
: x+ V7 k: |. _5 b6 P5 _: q    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,1 v1 a% M( Z8 H( j- w: d
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' `  j0 o, W& y) }/ p) H8 s- N8 \/ `0 [0 b! [/ {9 t+ T
    // 功能限定配置(输出引脚触发方式设定)' ]: j$ S$ K$ z  `. P7 x! g* H
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
9 k- l3 N* Z, g    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
5 ]7 Q  ^% |! Y1 i/ W/ W$ _4 Q                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,) }0 L" V( H0 W. d
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);1 m3 X' n/ h3 V
) H* E) c0 v& |8 I; B1 B
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
; J3 q0 w: O' R3 U    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);$ @& {3 o5 Y- l. o' o# v

( a4 x0 j$ P& f$ _! z- E( n; @    // 禁用斩波子模块% E, ]5 ~+ M# W( Y5 l: ~. f$ Y% o, s
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);; F4 C/ h, n7 t$ {4 i

. s9 t1 Y4 @' K1 ~: ]' m    // 禁用错误控制事件* j  b$ |: n- Q' D7 l6 k
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);0 p6 r3 {9 N( Z7 z7 L  J
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);: e2 T3 b# R) K* l/ B# ?

& g9 ]; b: K" B$ F4 _- F& x    // 事件触发配置6 z; s5 I+ E' b1 y
    // 每三次事件发生产生中断
$ C& f! ~6 |! a: m& r    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);! r9 N! p6 \" L2 _+ ]- s
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# C3 O4 E2 u: H9 J    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);! x4 P- U/ N' M- t1 T' {
    // 使能中断
* V8 |* G1 k9 K' w    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
% S' A9 b0 ?4 n* I  E2 _6 x  O8 I, ^* b; g5 q% n
    // 禁用高精度子模块
( Z, Q' s5 M- v- V2 O    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
" F& m  W+ Y0 U: e# ]( K7 m, ]4 @2 i; m' U  O! F9 d! G
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);# |" S: o+ D5 K( L+ y0 q- _
}
1 v2 r% ?4 {9 ^/ h4 \# U5 E8 {% F3 x9 J6 g1 |; O) H0 ?
void ChopperWaveform(void)) Y  j( z  k3 W
{2 m2 a7 N* c" g6 v) {+ N
    // 50% 占空比" n! E' L8 o% l* n  }/ ]1 T, X
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
; d& U! t, [2 {* Y7 L    // 4 分频
- ]# X2 n2 q/ l  W    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);- u* A( R# g4 m  y, y/ g
    // 单个脉冲宽度
3 S) B! \/ I' d6 F1 s7 m    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);3 Q& z( ^" z7 J
    // 使能斩波子模块2 I# X3 l! Z8 z
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
# t: {& v+ ?  z6 c7 p}
/ v- O  p; F2 c0 w" S" Q% d1 ^0 \+ e% Z! L( ?% G7 B
/****************************************************************************/
* l8 k( }5 A. ^, w& p/*                                                                          */& `2 A+ M; R0 s4 ~" |" o. s. Q
/*              PWM 中断初始化                                              */# @& R2 s! T8 r3 C6 M
/*                                                                          */
% ~8 Y8 Q) T. Z$ `/****************************************************************************/: }- d5 W, c: n; Q. N# I9 u
void PWMInterruptInit(void)
# P/ m9 o3 N/ V' A  r. _9 m$ N{" V+ E6 C& i8 N' _/ U$ R
        // 注册中断服务函数
0 e& k4 q8 f5 u! i' X        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
  `& m" P7 G0 T5 w4 t        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);7 }7 C- i7 X9 L0 ^* t: j
' m+ d6 F9 U1 B
        // 映射中断
# k* ^) V& d6 O. P, T1 A        IntChannelSet(SYS_INT_EHRPWM1, 2);9 f' E1 ?" t% q& F* i! X  C
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);" I2 g+ Y: ^  V4 v# z
% x9 ?2 c/ G$ E, S/ u
        // 使能中断
$ y9 y- ^  m. x: Z        IntSystemEnable(SYS_INT_EHRPWM1);  D% p( I0 m/ Q1 }! `" _
        IntSystemEnable(SYS_INT_EHRPWM1TZ);, Y1 m7 ?( p. R! l. x  T5 W& k
}  m' H5 q3 e1 O/ N; d
0 N" Z# \- u/ V( w; g1 b9 G0 t
/****************************************************************************/
6 x& F3 b" M+ a& {4 W; C, Q. r8 N/*                                                                          */
; b  O% I% [& o: M) U/*              ARM 中断初始化                                              */
# a$ x: B% r" ~5 s& A/*                                                                          */
% [& c( [) t% g/****************************************************************************/" x0 ?4 J4 q3 q0 \
void InterruptInit(void)9 x% \, R& M2 h: T6 K5 {
{
4 K1 x6 l* n0 n3 b% [        // 初始化 ARM 中断控制器% I, i7 |. ~: r, r
        IntAINTCInit();) t/ f- A, F; Q( [* G# b( U
& V+ T$ E; s- L! C( M1 j7 j4 o9 A" x
        // 使能 IRQ(CPSR)
  B, E, G  m4 Z: b' ?6 D! H        IntMasterIRQEnable();
8 _& Y. v7 U; b  W1 |: z
6 R5 Z% j5 o+ @$ W) i3 G' l0 @9 w        // 使能中断(AINTC GER)8 W. a; D  e: t! U# n9 J# O) C
        IntGlobalEnable();
  i  |, @5 l9 N) t3 Z* k/ N7 M, n2 ]: p$ n; `
        // 使能中断(AINTC HIER)
6 \( d2 h+ Q' O+ `' F" U* s        IntIRQEnable();1 u+ E9 e" u' ]( W" R6 L! m) ?# c4 ~0 f
}
; `: C! W  J* l
4 P1 j  b2 P2 K5 k* D
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/0 l5 A/ ^! s( E1 m8 j0 L" V0 `
/*                                                                          */% p9 [( Y" B5 b8 W. a4 S& Y
/*              中断服务函数                                                */! v6 [2 X% [% X; q7 c4 O
/*                                                                          */% K! d8 A1 j  A2 N5 t. ^% b
/****************************************************************************/
0 E+ N9 }: V/ N; J: xvoid PWMEventIsr(void)+ R0 \+ L0 v; B6 j; `
{' m2 ^4 `" `) ?3 o" ]" `5 `
        IntSystemStatusClear(SYS_INT_EHRPWM1);! v: ^6 l% z/ E
3 K$ ~' G+ v/ Q, k  H; C
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
' T# C9 ^) q7 H- |0 Q* ]" T}  V' N% S  L1 {8 ?8 X, j
( a4 h) F/ K9 v8 f9 P; C
void PWMTZIsr(void)
- J5 v8 B3 r8 W  V4 |{
7 L' m5 S1 E# q$ j) ?; ~% }        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);. ~& A" @- T; d" d! T. r3 O

: p7 S# e# f% w2 O    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
, {. g: M' L& a* \3 x}/ i/ w5 f- e+ r
0 D: B% |# Y( B9 D; n: e5 S
/****************************************************************************/
( i/ _! ?  K- }. I% G/*                                                                          */4 `9 C2 U9 X$ d+ R+ [! Z2 @
/*              初始化捕获模块                                              */+ t4 v2 T) d2 b/ m6 e
/*                                                                          */& G0 q1 P5 D2 e! N/ l5 k* H
/****************************************************************************/# Z6 f" I3 i' W- h4 P. D
void ECAPInit(void)
9 Z+ [) h+ b5 v7 c{3 W( R9 G; S  c5 M
        /*-----设置 ECCTL1-----*/$ |4 U0 @  W4 I. h3 J+ d
        // 使能CAP寄存器装载  q* L5 r7 o( p) B7 Z# z
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);4 L$ b1 G: B& V
        // 设置预分频值.
9 n1 X# j* ?7 Y- F7 y1 h        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);7 a3 i) i& s& D$ h& X; V
        // 上升沿触发捕获事件) ^: R+ _: @. ?+ |0 X
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
6 t! E* D; n: p. I# T        // 输入捕获后重新装载计数器值.
) p7 b1 u& T, V        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
, V6 W* \* o2 c) ^- h- z% ~# i( ~$ o; T
        /*-----设置 ECCTL2-----*/
) E$ O  C8 x  O        // 连续模式" h2 U* M% R- l- s' F+ R( ~
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);- V+ g) W( {* i$ p: F
        // ECAP计数器TSCTR持续计数
8 c. ^4 I* Z  y1 c5 t$ Y+ V        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
# D, O; X# @# F9 {        // 禁用同步输出和同步输入8 k* W3 r( ^9 m# m5 w! d/ A
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
+ w7 s' i9 `9 ?/ |1 b        // 配置 ECAP 2 为 CAPTURE 模式
4 Z7 r! B8 ^- S. _) C        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);) g* v0 G0 z' e' M
. ^8 |% g! z- i
        // 使能中断
& r$ K, M- x7 {6 R# `* Y8 H+ O8 b//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);3 N% G) Z. E  E+ S5 j( V/ m
}
: F+ h1 S& N: t. @* `4 Y4 E
5 @0 u- ~4 Q) g0 u: \4 o2 L7 B/****************************************************************************/
7 v* I7 [! g) B( T2 t# u; y( O/*                                                                          */
$ d5 |! Q3 K. s9 N4 u) Q/*              取得捕获结果                                                */
9 k, Z4 T% a% b, H$ \1 ~5 W/*                                                                          */
! @/ Q1 W; u2 }% u! t/****************************************************************************/
9 @( R! P4 M2 G+ wunsigned int ECAPRead(void)" l0 ^3 r9 R# O; Z8 @% |
{/ ?% O3 O" h" Q/ t
        unsigned int capvalue;
) P) N' _: R+ h        unsigned long frequency;- Q9 d- Q" ?  \

5 f1 |8 O$ h# u; S        // Event1 中断标志
2 P! L- C8 u. f( ^1 U; ]7 n( v        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
3 k  F3 L" V/ I! k, k        {
/ e1 Z( w% d8 e6 Z' s- I, A1 I                // 取得捕获计数
/ h+ F" l9 G. @2 M2 {& ~                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
- E5 ^& O  G  ^$ p7 q9 _/ ^& i                capvalue = ECAPResult.cap1;4 q1 k8 J. y; ~2 t* \
( X  C  }" e3 D7 k' {' |0 l
                // CAPTRUE 模块 228M 时钟主频
# M1 u5 E$ e" T                frequency  =  228000000/capvalue;, k. q* r% E, M( m& u1 B& k
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);, u6 B7 C  R9 ?' @  }

- I" Y# y4 G- W                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
0 v# M6 ^7 T( J! V( W; M4 ^* X//                IntEventClear(SYS_INT_ECAP2);
- h( r* v1 X8 u# K. G        }" [: r% |2 @3 K/ k; z* U
        return frequency;
6 J2 y6 Z8 n! ~" U9 W7 X}
, l& w0 O8 B- e% [: H7 q( U. 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波。我们有相关例程,请参考。
- n) g/ s) l; G" \4 X& N

本帖子中包含更多资源

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

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-5-29 02:32 , Processed in 0.046738 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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