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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
: [9 X( p9 G3 e' U5 \! X- Q2 B/*                                                                          */. R( G4 k8 {9 m% _* E' j
/*              宏定义                                                      */
+ B' \$ g; O8 j! {+ }, ]3 U$ }- d/ G  n  y/*                                                                          */2 ]/ @9 Z5 x" Q* T2 L4 N; I/ f* _
/****************************************************************************/: u6 ^# h8 q& s: n
// 软件断点
+ l) Q; z* h+ k- ^2 p9 d* ]3 g#define SW_BREAKPOINT     asm(" SWBP 0 ");
8 o& j) \9 E& o" E' m4 l6 T) Y7 W4 k* h% u  G9 z
// 时钟分频
9 n6 h: o, d; {( u' V6 D#define CLOCK_DIV_VAL     228
/ h2 i( v% O4 F% k9 P  K- H0 c
6 w: t6 S2 [1 i3 |4 X1 V; T! y7 U/****************************************************************************/9 o+ i" x, @* r2 _
/*                                                                          */
4 i2 D. l; J7 F/*              全局变量                                                    */
( M. L9 H& M$ P* M/*                                                                          */  S3 y* f% }* y) O$ H! K; G' I
/****************************************************************************/
& `6 w; J$ s1 z, t! @9 s7 YECAPCONTEXT ECAPResult;' @' R! D4 R) D+ z+ L& w& S* u

5 |2 R3 b) Z9 `& y/****************************************************************************/
6 J; {/ i) K2 P- C/*                                                                          */) I6 \- O4 M3 P) y) S2 m4 H
/*              函数声明                                                    */
' G: c- }. U+ Q. O/*                                                                          */8 C7 C) w5 O6 y9 L! {$ r
/****************************************************************************/1 P0 O  H5 a+ ]3 |3 A
// 外设使能配置9 E0 r9 A$ k* S3 I; z+ w. J0 L
void PSCInit(void);
' Y" n3 u8 q% l" S2 r; X! e* w$ W
// GPIO 管脚复用配置
  `, U+ W4 s; u" J' Pvoid GPIOBankPinMuxSet();2 O+ w8 W: i" h3 [( y9 N' H5 j# j

' O, z  n3 k! ^! i& z5 X, _// 产生波形7 q7 e  p# \6 Y$ b; _
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);- D  [/ U: f: J/ `2 u% D9 o2 e8 a
void ChopperWaveform(void);" ?+ I% d# h+ O

1 e3 y3 D6 i' P2 w- N8 Y- Y- c// ECAP初始化和读函数- n. M0 x  a, Q4 @. h; f
void ECAPInit(void);  M8 c( u1 d3 _
unsigned int ECAPRead(void);
) b* L0 C1 G" S1 R" I: h1 q+ U, X, l! o1 y2 c
//ARM 中断初始化
% [& c8 V/ L  l/ @' o' T  q+ Bvoid InterruptInit(void);0 U% T9 {7 F( ]
+ l" A0 K0 v# t. ~
// PWM 中断初始化
4 R7 c. @/ t5 g; d2 x# h6 N  rvoid PWMInterruptInit(void);
8 B3 K$ r. V+ o2 }7 v// 中断服务函数! O* G' }2 H# e
// PWM 事件
, z* }8 r. S: O4 O' v2 Z8 jvoid PWMEventIsr(void);" \' k: o# ?6 i& S5 `; o. h$ c
// PWM 错误控制事件$ P* a1 g6 O. o  @4 S0 @4 d5 X
void PWMTZIsr(void);
; d2 ?3 I: I! k4 A
! v8 T( a$ W; ?/ R4 S% [  g( b/****************************************************************************/4 U  E& f0 K+ N: ?9 c4 y
/*                                                                          */
3 j$ p: W5 q' m2 l0 c1 |; d- C% B/*              主函数                                                      */; o% J8 Y/ \/ I" B( T7 A
/*                                                                          */
9 P' j4 ~9 R- t/****************************************************************************/
: x  Q  u$ @/ H# l, \int main(void)
2 l  L7 s* w; ?  C. _{7 o: F3 w8 H) M5 ^
        // 外设使能配置
/ {! H$ r7 O5 i# W& Q% c/ k) n        PSCInit();- A3 s1 c, Y3 x( u
( r( d0 T3 `7 H- C
        // 初始化串口终端 使用串口2' P$ b, J  ^) R8 x: p$ L  N
        UARTStdioInit();
2 C( m% j2 I  l! B3 I4 T       
7 `& R. i# n4 u' ~" R" ], E! S        // GPIO 管脚复用配置2 u- ?% C, R( L, A6 t, C
        GPIOBankPinMuxSet();& b" Q# {  s  J

3 Y. ~$ g' W2 t: d9 r; X' x        // ARM 中断初始化
5 R+ ]# b/ A  k& Q  i5 z        InterruptInit();
7 q0 ?3 y2 f9 G( T) W/ Z* {$ r! F3 |9 Y2 e
        // PWM 中断初始化! R3 J( p( O7 p
        PWMInterruptInit();9 m& i+ P3 N0 u% x, k& I3 f
: n  t' \) q. `8 R- g# I
        unsigned char i;: k7 {* P! G% a! y
        unsigned int j;: @' S' x5 G/ m- g
1 C  t  W4 H, ^: d) ]: r5 A1 b
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
& R& V7 W# `" N+ @        UARTPuts("------------------------------------------------------------\r\n", -1);
$ F+ r1 A, Q! q- Z) W        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);7 q$ w+ e; ^  W1 }
        // 产生波形
( g! J) W. X7 P6 u        PWM1ABasic(25000,50);" ]1 l  _; l+ R: G7 b
0 s1 U! J, R0 R1 i/ F6 f! g" Z
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
& t$ D9 T: h0 u  }8 B- `' T1 V* c        UARTPuts("------------------------------------------------------------\r\n", -1);
9 k. @, j/ u" e" H# |6 k4 p  z5 n+ q3 R' m; j3 I. M
/ I" D) G$ E) I9 k
7 R7 f# v. _( y7 ]& ]; f
        UARTPuts("------------------------------------------------------------\r\n", -1);8 w) x& G! V8 N: H8 [2 g+ g2 M' t
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
& T. u4 n6 s, x" Q        // ECAP 捕获初始化, D) Z- W4 a) X, j/ o
        ECAPInit();
) d1 E  q* A+ F8 C( ~5 `4 E        UARTPuts("Initialize ECAP.......\r\n",-1);" ^7 y. u( D( R; ]) K2 B- X5 |  G
        for(i=0;i<5;i++)
) d) L$ Y  y3 ~+ K9 ~7 t        {! E, T. r! N6 `4 W3 ?2 @
                    for(j=0x00FFFFFF;j>0;j--);            // 延时) h7 @. I2 r6 y
                    ECAPRead();2 B2 G' ], Y) v9 P. F( n+ u( _
        }
1 K/ ~/ Y  L. M3 k        UARTPuts("\r\n",-1);
' m' \' k( u# m) o% e        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);( E8 R9 J& z% H$ o4 P! S) ?$ o
        UARTPuts("------------------------------------------------------------\r\n", -1);
* y- h8 J! Y/ m% U7 m9 D4 E- w
) L# ?9 N9 K6 |% |5 U( N3 n6 e        // 主循环
& N( \, N6 l# f, ?        for(;;)" S: S* O. m9 l# |$ q
        {
, V. Y" O7 N! z9 ^2 d5 L5 A/ e: B: Q4 t9 Y
        }5 |, t, E  S! l. g: @+ _$ R
}/ ~/ U& I, R( W& J
7 T7 s) V3 j; E  k' o2 N/ B( M
/****************************************************************************/0 J! [/ g  b+ v: |2 t8 U
/*                                                                          */
9 ]- W7 h- u5 C! L# G$ A/*              PSC 初始化                                                  */
7 v8 w* f6 x& I. s0 n( Z; Q/*                                                                          */9 i" Z1 Y0 |- \9 J4 ]
/****************************************************************************/2 }) w% Q! n/ E) ~. a
void PSCInit(void)  _( h, Y9 l0 d# }. Q  `: s- a
{: S/ t7 `8 n7 ?; C4 u
        // 使能  EHRPWM 和 ECAP 模块
0 C4 Z+ u* r. P$ U# g% @& ~/ y8 ?: D5 ?        // 对相应外设模块的使能也可以在 BootLoader 中完成7 U( K  ?+ r' F4 i
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# ^1 N7 N& ~1 n' c7 G
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
" H9 F- C; p2 c* _. z: e}  u( ^5 V4 ^* B2 Z; ?- Q# ~( I

, P  u; P  |' P: ^  V7 L/****************************************************************************/
: d1 |! W; f  S8 o6 B3 @/*                                                                          */3 h! c- W' U; `- H4 Z
/*              GPIO 管脚复用配置                                           */& ^- Y# _) Z2 S/ |1 @8 }& F
/*                                                                          */
. h/ y/ Y' ^$ V0 Z* H) y/****************************************************************************/4 B( G$ o" t* X/ a- G! U" _
void GPIOBankPinMuxSet(void)
, ?: z: X$ l# X; T0 r  e6 ?' R6 Z{
2 G9 Y: p8 }; T3 [/ f5 O        EHRPWM1PinMuxSetup();
& U4 J! Q. r1 v9 g/ l7 A
" E" E# v1 @2 Z7 |  B* b& B        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
# K$ ?, q9 A6 q! F        // 作为捕获功能时管脚方向为输入& [  k6 x9 t: Q* w1 @
        // 作为辅助脉宽调制时管脚方向为输出( v, m% T& R2 n
    // ECAP2 / APWM2
: S8 X! A  k4 H7 S' o3 ~: V        ECAPPinMuxSetup(2);
7 v, A2 M- E2 d! H8 C) q7 o# Y8 ], J( v0 |) Q
        // ECAP2 / APWM2方向设置为输入0 U" y2 T* y6 I! _
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
1 X* K7 x( J& ^/ R. o. ~}7 c; N* ?' |; B0 w
, \/ U1 O$ q9 g
/****************************************************************************/
; K: M, B# o$ r2 V" ?' u2 [7 J1 t/*                                                                          */( n! G& S& E% a6 R1 n9 h2 |
/*              PWM 输出波形                                                */
& Y. I, ]; K, V, L. G/*                                                                          */8 I- Q! J# J8 q/ u" p
/****************************************************************************/+ E- G* F2 y* w5 O' Z# z
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)$ h+ W1 Y% y" i; s6 \" F& w
{
6 A. ~5 _( V+ ~. r& v. q& ^    // 时间基准配置( k1 j( x6 g$ I1 k5 g. z1 }7 T
    // 时钟配置
4 g: z! J! @2 ^0 _8 H    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);$ e8 X3 M: ~4 D
$ Z; M# \, h3 w5 h& _
    // 配置周期
1 P# m' V6 U7 x7 m    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,2 ?3 u7 H! X( q- Q; q+ Q1 P( `
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
: z9 P, U7 @( `! y
) H, U: Y+ o. `9 j# \    // 禁用输入同步信号
" O; q% Q6 C3 K, c1 Z    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);! G( g$ M% S0 m4 M6 `+ g

( k5 d4 f# D$ V& o    // 禁用输出同步信号) ^) z  |; g" K5 M7 Y' e. O# V
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);$ x, A; g6 X) H7 s
5 k  k- p! ?  l1 K7 n; F
    // 仿真(DEBUG)模式行为配置/ S; N, b" a1 _4 F( T
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
4 d2 L4 ?- l3 h$ I6 z) m, _  A& N. k) G/ p% }2 p. C0 k% O9 m
    // 配置计数比较器子模块3 G* ]- B6 {6 c7 S9 k# k7 c
    // 加载比较器 A 值
7 a1 T, R7 I; f3 U    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
. \! T' R( N' k) j* ^                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);. h- W  f! L* S* _4 g" s+ W
: b- b; b/ f: e. ^( ^7 h/ J
    // 加载比较器 B 值& ~; x% [* D( }
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,/ D0 e( P1 \, ]  n0 ?* h1 O
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
! }; O7 A" a# k3 l1 u& N8 l0 M" w# @/ [; L" ], R& B9 T
    // 功能限定配置(输出引脚触发方式设定)- k6 D, }; u$ b# v$ N* @
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出! _+ k% r, t, J) O9 |6 ^: n0 r! t1 f
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
) Z8 g: Q4 w+ N3 z- M# `                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,7 F1 V: a1 {( n
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);4 A8 m/ i1 Z. A: r

+ s; D/ d) O) R1 C' Y, I    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
3 C, X0 J- K; l0 f7 F    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
; Y9 W9 x  x; E8 @6 X& c1 w
8 u; n# f# d* O; p* R) K    // 禁用斩波子模块
" l# W+ f/ `8 e& W5 z0 m) m    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
9 c  Y, `2 J5 S3 P
0 u- j) S% [9 ?" x4 m' P    // 禁用错误控制事件, ?! ]0 j$ f; h0 T+ ]
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);( X5 n4 t& R0 [0 c/ A
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
1 n. U+ e4 [, A
4 y! M+ _: q4 b0 U3 |    // 事件触发配置
( h9 P! b9 P9 J0 o2 [, O    // 每三次事件发生产生中断5 _5 V1 c  o( k3 {* e- J
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);' n5 M/ O# e% J& @0 X# m0 C
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
- B8 e+ L" P' ]8 i9 |; n    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);$ I* _/ ^  l; o/ L- v8 O% B8 {
    // 使能中断
- B/ ]; L% M$ g7 X    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);+ g! e2 Y( I; |* o

3 U" R( j" {: q4 i( n, Q    // 禁用高精度子模块
4 m5 ^: y. U. k+ U6 d    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
' \; f# n1 i3 y. M  m
% C; E* e6 U2 x- U    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);/ r6 X8 A# N9 j  ?5 _3 A* ]) A
}
) \# s8 Q* z2 s/ n% p2 V' w$ A0 ~3 {2 K4 @
void ChopperWaveform(void)
; T7 h, V. q& S& V{& G; M" ?6 v& f5 e3 c. \! Z
    // 50% 占空比
' R5 f2 d" o% g9 z& U4 T5 L    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
) t$ G5 R% |4 H" }( w! D0 f    // 4 分频7 c( r/ H0 r" Q5 A, z+ _
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);  w& H* q3 W8 [# J) p  {; j' k
    // 单个脉冲宽度# O7 q; {1 j7 b" H  b" Q
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);* B8 @+ a7 V( O5 u
    // 使能斩波子模块
5 N: K3 U0 R  o  k. K5 l2 l    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);- G5 B  F$ L( E: ^) _" R0 v5 |
}0 u1 v! D: f; `" }

) F4 {6 J  S0 w4 e! P5 T& ~/****************************************************************************/
0 O) I, T5 q+ h6 {0 X$ q" g+ p/*                                                                          */$ }/ ?1 F0 k$ N6 }4 j7 @% _) _
/*              PWM 中断初始化                                              */
& L1 U- I+ z, @7 [8 @/*                                                                          */- v" V! B# z; u0 }9 p
/****************************************************************************/# R$ ^' }, G0 \
void PWMInterruptInit(void)6 T7 e0 D/ z- L3 L# g/ H
{
6 {# L. M* N5 |6 P# Q1 f( x        // 注册中断服务函数
: I$ R: K5 U( ~3 T$ J2 @        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);; q# u% m8 a+ b' ]' \& B  ?
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
: [+ d; z( ^) L5 d! u* d
, u* u, c" H8 ]9 o) B; q4 w        // 映射中断( {. r9 B( Q2 {, w' W
        IntChannelSet(SYS_INT_EHRPWM1, 2);
2 j2 y2 l! H* @. {" Z% I3 u: y4 ?) V% v        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
) I5 I3 Y  M4 d4 i, r0 c9 j- z6 @
0 Z9 a8 O  G2 M$ d$ X0 _& \        // 使能中断3 C. ]& g& C) p* B7 w: b
        IntSystemEnable(SYS_INT_EHRPWM1);
# L; X9 L4 r0 j, Z9 V+ Q5 G4 j; |        IntSystemEnable(SYS_INT_EHRPWM1TZ);: [  ?- |1 ^& L7 v
}0 D  P# a+ L# l
1 {9 ~9 e) Y$ X& l1 Z
/****************************************************************************/
  s: q1 H. t! S: @+ m/*                                                                          */: k( f" E8 G6 I, J
/*              ARM 中断初始化                                              */5 D& x- }% f5 C2 ^- D* `
/*                                                                          */
8 M( R0 S4 |1 {$ |* W1 n/****************************************************************************/# L  m* r9 s2 g% \9 m+ ~
void InterruptInit(void)$ k' X8 @6 r1 W& o
{
* I( ]! m* H8 R" f- r, c) E! C        // 初始化 ARM 中断控制器
# v# \. j( I: l& L- c2 K# t5 R        IntAINTCInit();& c# H2 Z% z9 Z# Z0 s$ X& Z7 |0 X
0 Z3 E1 V" m% Y9 v( ?- {
        // 使能 IRQ(CPSR)
3 F% _8 D3 w" i! C        IntMasterIRQEnable();, O* E1 i9 I# x1 I

3 X, z) g; i, J        // 使能中断(AINTC GER)
) C& R# d6 g- A" U$ {& y( L3 t        IntGlobalEnable();
* ]; M3 n7 T. m0 Y2 ?' Y
; ?' P) ?) ^& c- B/ Q) X        // 使能中断(AINTC HIER)
+ k8 K: P' v$ _- ^! ]) d8 ^3 a        IntIRQEnable();
& m8 e6 j1 V3 z9 J. v# g! \}7 x6 M4 Q; s: n. s0 x( s( P
1 Z. M$ i0 X$ I4 e7 K$ b% W; [2 c
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/, Z  B# U0 R) h  {$ f( R
/*                                                                          */
4 L/ m/ _) n! I/*              中断服务函数                                                */. f0 V2 a' g2 d6 N' Y2 P
/*                                                                          */
( d7 f- ^) m9 a, a/****************************************************************************/
6 S' g$ K( M! |  j3 m8 dvoid PWMEventIsr(void), l/ _% n2 x. M* }( [( h
{
/ v' T; S3 z3 H3 M+ I! g7 i/ U  Y        IntSystemStatusClear(SYS_INT_EHRPWM1);6 h$ D0 g, o8 d
' {2 w7 x* ?6 J* v" a" x
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);5 ~+ S# @5 o1 v& m% _/ A$ _
}
& F8 C2 z: e0 q) f6 L, s
8 P$ j8 f; P0 o5 G9 Evoid PWMTZIsr(void)
4 @2 X# \0 r! n/ R{
( {3 W' V; S6 I; `8 e; s% k        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);6 ~( ~2 ]. }- h" V
/ `- z  g7 y4 H* S& \
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);% b+ `: y3 g) I; B
}
- \8 y! j' t0 f  E) h7 {% s! ^
1 O  P! Q( C7 n$ r* s  ?4 P/****************************************************************************/
+ h' ?2 ]# m% M/*                                                                          */
5 v3 g% ]6 M8 f; j/*              初始化捕获模块                                              */# E2 s' {5 n9 _4 D1 L0 p1 j
/*                                                                          */3 ?9 u# F0 ~5 Q( Z( t. k8 D, U
/****************************************************************************/
& f0 u( I2 Z0 |7 Bvoid ECAPInit(void)
/ X8 [: t; g8 H- Y1 J0 z; M{+ R# K) Q3 {- g# f4 |$ g
        /*-----设置 ECCTL1-----*/
4 X$ h* d0 T3 b" I* P" W$ x# P        // 使能CAP寄存器装载
3 H1 e7 R) L) n7 n0 e        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
' X, b  e0 a5 }. m4 q8 ]2 u        // 设置预分频值.9 Z6 ?5 {) P/ {4 S& ~' @, _
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);" p3 ?9 R, m% V! m) c
        // 上升沿触发捕获事件9 B; z# H# b8 D- w0 E  L% V; w( ]% T
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
& [; c: g0 E) p* k; V3 }2 G        // 输入捕获后重新装载计数器值.
* E: s0 \2 Z! j  ~9 h' U" z) Q1 R        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);7 h! G: u$ p) @; P* p4 A* q, N
0 ?: |/ s" k, d; [0 n
        /*-----设置 ECCTL2-----*/
. d# p  Q( s1 m. U' [8 ?        // 连续模式
' R+ u6 F' O/ g        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
- F# d9 a3 A( X        // ECAP计数器TSCTR持续计数
0 |- g* b" a( h        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
- \' U% n( b. S3 R5 W. U( m. ]1 `        // 禁用同步输出和同步输入6 Q! B* ~, P4 y! R6 i
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);! \3 u6 p! z. \6 g, J
        // 配置 ECAP 2 为 CAPTURE 模式
: X( O, N1 ^& ]* ~        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; D, f% |! Y, U6 W3 s# N. G, i5 P1 R! l1 x0 v
        // 使能中断
% }# w1 e' `5 g2 p$ W- L1 X//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
* I4 o4 Z, i+ B; p5 ]' F}
. ]/ ~- Q- U4 Z8 y$ i' v; k& I( r  x3 u
/****************************************************************************/5 m& j6 e& R$ M$ e7 a; w  f
/*                                                                          */; h$ C- b$ T/ x6 S1 q2 e2 c
/*              取得捕获结果                                                */# N- l/ b6 A7 G5 G/ I+ L/ a$ o
/*                                                                          */0 K" A- Y  b9 ]9 I6 G2 c
/****************************************************************************/
1 x  H0 W$ X% l, Y$ Hunsigned int ECAPRead(void)
) q/ g2 }2 G0 a{
3 ^$ S0 v' x/ ~$ W        unsigned int capvalue;0 Q9 o5 ?( ?% p0 x" U2 |
        unsigned long frequency;' ?, C+ n0 n" U) m0 `

4 s8 @1 H% x# e# Z: X3 u9 |; w2 R4 r        // Event1 中断标志8 u& |5 L4 y* D0 q& @
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))* I& b( F+ e6 u& U( k2 H/ G
        {
4 p' t9 n/ o5 P3 a2 q                // 取得捕获计数) b& {' k1 I# [' o
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);: u0 A5 O" \7 {* q# a( G: `6 s
                capvalue = ECAPResult.cap1;" F3 S% l# @5 Y% C

. D* @9 t! N0 t4 m# F  c; ^. N                // CAPTRUE 模块 228M 时钟主频% r5 v; i, w, i5 m+ ~
                frequency  =  228000000/capvalue;
- `8 [2 G+ S/ @+ [- Q1 z, {. i) i                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);* \! B/ N# B7 T8 g
7 T: ~# ~) z  T! a+ {% O
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
& Y  G' T! e9 I//                IntEventClear(SYS_INT_ECAP2);
( d4 R+ k/ d, t. i; D        }
2 J8 p# s9 ]8 {* t        return frequency;$ b' F$ e# ?  v! t) f$ x& E: z
}
& m' j4 G0 O) g! E! o" L" D$ m
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
' x/ _- A: L9 ~2 _+ z9 `1 h* }

本帖子中包含更多资源

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

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-4-29 23:54 , Processed in 0.053296 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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