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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
5 b8 v: ]! h$ n$ |5 b0 g4 h+ Y1 O1 @/*                                                                          */
& J: A; K. b1 j% C/*              宏定义                                                      */! D" k0 c1 H8 A* {; z
/*                                                                          */
% ]7 S5 C3 n5 _/****************************************************************************/
9 D4 b) u( w5 w! b3 S// 软件断点
) B" i1 B1 _1 r5 G6 K9 d4 P" i7 {#define SW_BREAKPOINT     asm(" SWBP 0 ");
8 ~9 Y/ P% p% G' U/ [+ g3 T7 X" K0 K2 g5 G
// 时钟分频+ C* f/ x/ D/ C. G8 ~
#define CLOCK_DIV_VAL     228
8 j+ R2 Q  p  H. V" L9 L& x! E0 W
. O- e& \2 e" }: s8 P) |/****************************************************************************/
; u, N) f; @8 h1 A6 G4 ~/*                                                                          */
/ T9 ~* ~# Z+ q/*              全局变量                                                    */! D3 K+ Q' Q& q9 D3 y
/*                                                                          */+ u$ ^7 G! Q6 d2 v3 S+ ~
/****************************************************************************/4 R% Z. w/ z1 a& m- m# f7 K' _
ECAPCONTEXT ECAPResult;
6 o, f- J9 @/ c# o" Z; f0 u# g( Q& m- u
/****************************************************************************/
( V" O% n* p* H& k- C2 k/*                                                                          */
8 o/ X3 V. N) C% L( P! Y* l, t/*              函数声明                                                    */
0 {" T/ H6 @3 `% x' V/ \/*                                                                          */
6 b: T3 b3 P1 c3 o) B# B/****************************************************************************/, k- H3 [5 Z2 s
// 外设使能配置
2 O  G& Y2 |  J  x% X" b# xvoid PSCInit(void);
) x' l* Y3 A; V8 l: l/ S
; ^$ Q& q. G, r* g# h/ i- ?: f// GPIO 管脚复用配置
# [2 P1 P9 w# f* w$ h" _/ {void GPIOBankPinMuxSet();
* P) ]/ F- p  y, \6 Y' S% Y
- p/ _3 |% T( P% U* k" |  h// 产生波形
! p' Q' n) U1 M- jvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
1 E: h4 N* x6 d6 L  N8 tvoid ChopperWaveform(void);
. n! O* `% k# _. m( m! R' O  Z5 B
% e. W4 E7 G$ d// ECAP初始化和读函数0 O% O- B6 M! e: P
void ECAPInit(void);1 Q& p. K0 y7 O5 c: L; n3 ?1 n
unsigned int ECAPRead(void);; A/ B2 U; s" I7 l8 I% P4 B
3 ~! N  \! N' w. {- |; v8 [
//ARM 中断初始化
' ]5 |' L+ H  o+ N# G, }0 w# }void InterruptInit(void);! S0 F8 w/ @# y2 K
2 l+ u4 W2 E' P2 m2 o+ z8 I
// PWM 中断初始化
; O: B" K7 e/ j& Y7 e* mvoid PWMInterruptInit(void);) T. k; b& ?0 l6 V
// 中断服务函数
- t: c. K3 b' z  n" N// PWM 事件
1 E2 a. O- y! }& B: I3 e: Nvoid PWMEventIsr(void);2 P( T' z% c7 l! L5 }
// PWM 错误控制事件* L5 h1 x. p. R. F  l/ W' h
void PWMTZIsr(void);! f$ m8 j# b+ d0 ~% d' J7 B6 n  |

- r. ]  @! @8 `( ~! B/****************************************************************************/
  M3 a6 l6 t; a& \2 V6 Y' Z/*                                                                          */4 J% ^/ D/ R: C3 }( I
/*              主函数                                                      */# B* F* m# A/ K* a1 K/ @: C4 h
/*                                                                          */0 C  [/ V- k( b$ L, }
/****************************************************************************/- W( x' e4 y- {
int main(void)
3 f: n  p9 [3 @+ r{
0 k: z! v! X. v) A        // 外设使能配置: \, }( w+ Z6 u' o. u/ D3 Z
        PSCInit();* z: v$ Q+ k- Q5 Z

" E8 ~3 V1 B1 C) c/ Q8 x        // 初始化串口终端 使用串口2
+ p  Z% j8 ~9 @5 K* f0 C        UARTStdioInit();
9 c0 D! Q$ j! N0 ]6 f8 B        * j! o5 x8 \4 z1 Z, C& R
        // GPIO 管脚复用配置
. [. _$ U: [# Q9 b4 _        GPIOBankPinMuxSet();
. {6 z; G1 r1 T* y* H' h$ |6 F: m
1 D4 ~/ E$ W$ U0 ^, H2 W2 n        // ARM 中断初始化2 B6 Y: \& I  X/ r* ?% x, M7 @# u" _
        InterruptInit();
8 Q! }$ |- s  T4 K& Q0 h+ P3 X8 w9 Z# o
        // PWM 中断初始化
# d* @$ U; U- ]* H6 U  Q) E& }        PWMInterruptInit();0 y+ a/ x: x0 f: i% c* q$ O, ~

5 X/ Z/ J2 `: \* Y" ~0 T; F- t        unsigned char i;% E1 B( H  r4 F3 w! n
        unsigned int j;) M1 j+ F6 \; L- b$ Q* g
, o  T, F4 Y' j9 ^
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
3 c: f6 }  I$ Z& s        UARTPuts("------------------------------------------------------------\r\n", -1);; m+ r, x3 a$ J
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);" i8 y9 F* F4 b6 b8 Y3 K# m
        // 产生波形, j. C* r% [% D% z
        PWM1ABasic(25000,50);) c, |! L# V2 l' n" [! m  Q$ B
/ S# a. b# N3 k! a$ ?
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);; e* a6 n# s* n
        UARTPuts("------------------------------------------------------------\r\n", -1);1 L4 c+ t5 V  I! C8 t/ ~% p6 H% m1 x$ [
3 `6 a7 i3 u5 R6 u

3 _; g( R9 h5 X# ~7 G( y0 R6 R4 X# u) d: C
        UARTPuts("------------------------------------------------------------\r\n", -1);5 _# F: _5 Y( p. W9 l- R; n) j5 m! m
        UARTPuts("                    C6748 ECAP Test\r\n", -1);: W, ]* }9 G+ r, v6 N- g; I) j
        // ECAP 捕获初始化& \! o$ i3 F1 t1 r4 X
        ECAPInit();
- F' \. ]" F5 x& o, x        UARTPuts("Initialize ECAP.......\r\n",-1);
! j; o" T) g+ m: e        for(i=0;i<5;i++)4 I7 G+ k4 `; l& C# @& N# r/ _8 [
        {
! i2 `( s0 c7 e* v; f3 T! N                    for(j=0x00FFFFFF;j>0;j--);            // 延时
1 o) x2 M+ I# B. G5 J                    ECAPRead();
7 m$ j! _6 r: y0 U8 Q( K+ {        }
) Q' r8 Z& _5 K5 f1 d        UARTPuts("\r\n",-1);
' ~, i- s" T2 S$ q( a8 d        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
/ P% Q* m) J  y4 q+ K4 R        UARTPuts("------------------------------------------------------------\r\n", -1);' S  u& ~" b+ v* l

* R& S' E, E4 U6 \0 m$ w1 c4 o        // 主循环, G. z: {! g) s. E  R
        for(;;)
+ j& P0 e" v5 y; w! d2 z* C        {2 l& `2 a- |9 W
/ a7 F- C4 {4 h9 [
        }1 N/ u- v" u; Q( p8 @
}+ w, j/ o& o! B+ b

4 _8 o$ {( N" _# q6 @: R/****************************************************************************/7 D! ]  x. ]; U( N
/*                                                                          */+ B6 r8 Q( P5 V5 w& P
/*              PSC 初始化                                                  */
! l1 y& L$ u8 D! V) {/*                                                                          */
' U" x$ o0 U* N2 J+ Q/****************************************************************************/- u" P7 l  }/ V" v, B
void PSCInit(void)
# @2 B6 O. y5 q* L, T3 Y% w4 _{
! k) H+ I" M, g, P' k, }        // 使能  EHRPWM 和 ECAP 模块% J( K4 S$ W4 B5 k; Y2 j
        // 对相应外设模块的使能也可以在 BootLoader 中完成& f" l" M* I: M" ?4 V
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
2 m& P, P7 Q3 H2 }5 ]- Q! @    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);# {# m# @# r" m1 [
}
, ?; q. E+ G: b, E8 P5 [- ?2 W% W4 D6 S$ V( A, _5 b
/****************************************************************************/7 h5 P- k( i4 P) m, z" L) Z9 s8 e
/*                                                                          */
: R* N- n3 i. d# {; J/*              GPIO 管脚复用配置                                           */( c; l: V( H4 u) `
/*                                                                          */
7 v0 G) q& ~( n8 x; z% Z$ M7 d( W6 S/****************************************************************************/' J" t) G+ ]4 Y
void GPIOBankPinMuxSet(void)
6 z0 f% x/ H- s3 z, p- g{
" n0 @( U4 w" T0 C6 C: o( `        EHRPWM1PinMuxSetup();
9 a0 ^. B* k! N# ?; b5 Q  W* n& {0 {# T
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
9 r( P  Y$ C5 d' l% o" \- `        // 作为捕获功能时管脚方向为输入
4 z8 ^% E) G5 p. d$ @8 f        // 作为辅助脉宽调制时管脚方向为输出
2 D- m' c7 m$ Z4 S% G7 \) i" D    // ECAP2 / APWM2* P0 z# v/ B9 K" ~# b9 @* N
        ECAPPinMuxSetup(2);( I1 @( {( U( \! Q( x) a/ r
% o* ?. l6 {- O( Z% a9 b* U7 A9 r
        // ECAP2 / APWM2方向设置为输入4 ]" s1 A/ K" d5 U2 k8 q4 a
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]- n1 e3 ~. Y3 F3 y( ?
}* I$ I4 u! |  U" e8 z2 h8 E# I& e
- M- A- `5 h' Q
/****************************************************************************/
! g. x- x& L9 {) b/*                                                                          */
) x* a6 c7 p4 p+ ?# f/*              PWM 输出波形                                                */( B2 N* b, K* Y7 Z
/*                                                                          */0 V* ?( Q0 y( e) O/ y0 N3 n$ g
/****************************************************************************/
# m+ z2 E- ~3 X  y, X- yvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)( f. u; c- `2 @7 B7 t
{
3 o/ x7 t! R# H& r3 c; t    // 时间基准配置
4 Z4 l( ?4 @' Z4 X' S    // 时钟配置
( r. w+ S! g. T& I4 ~3 J    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
' P/ I; o5 |8 e7 W$ V, m7 G% v4 j( B& n. M2 r3 M& T
    // 配置周期/ J5 I, m! u' c. A7 _# G0 l
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,. p) l( @) {$ l
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);& m; A* m/ H/ f( i' a
4 Z% k! Z" [3 z: C3 s( A* ]8 t
    // 禁用输入同步信号
* Q, \& f. o1 ?1 [! r    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);& M' E5 l0 X: E' K

& A6 s7 N. ?3 f  Q    // 禁用输出同步信号8 @6 J0 m# `7 t3 [) v
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);% x0 a; |; b, K: `- q0 m7 O0 Y' ^: D% ~
1 R2 c; u; ~* L
    // 仿真(DEBUG)模式行为配置
+ g+ q. J! z6 H; M    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
4 I' r# P. P: p, ?  \. _5 |8 k0 i$ N: e. j# H7 ~* N
    // 配置计数比较器子模块! D2 x" p. ?7 z8 ~/ G
    // 加载比较器 A 值
& n0 ^6 Z/ V, P3 V# V1 n    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,% y& `) l" t! V- N
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) j) d! k  Q, O
1 Q0 i4 |- {9 `9 _    // 加载比较器 B 值/ t8 Z5 \3 N' J9 ?
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,* E* }! Y3 _' ?& \  Q0 I
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 p/ s+ e- V9 y# b% p3 a5 z, t4 c; e
    // 功能限定配置(输出引脚触发方式设定)) ]  [# {2 j: ?9 l, @. E. Q
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
' J  c+ r& |' {) U$ a4 P" a+ ^    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
. c# f) ~/ [) p8 N1 s                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,& |% W/ ?4 S4 W1 x$ L6 m% [
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
- m0 ?& k% P% q7 U' [. ^6 [, Z; Q# H' @! o% B) f
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
! p7 ]7 x% D8 Q    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
4 Q1 }' c7 u: v8 O# G
* q" Q  ?% ]# ]6 D5 ~1 S    // 禁用斩波子模块0 }$ z* G, O" W5 ?; U; F% c: i1 v' H
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);+ c0 j9 G+ f* p
& h& E3 U; y) I
    // 禁用错误控制事件
( a$ B2 J2 B- x9 c    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);0 S# H  K+ F" I/ E
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
& D# A' g# ?5 D- I# y/ }
+ t/ C, X' n* G. v8 W5 ^% Z8 \1 Q( P    // 事件触发配置; n# S: P* M7 p- ^
    // 每三次事件发生产生中断
# P  f7 ?5 [1 [; v' |1 g( e    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
2 b* V; M4 A/ b; q  t8 b    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# Z- H5 Y% h8 h" h    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);; u4 w: K( n2 z$ A
    // 使能中断& I; V# J" w1 S8 ?0 W
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);: ?+ ~; v8 S/ K% \; Y- U

% t; k& y" d/ f' o  ^, u    // 禁用高精度子模块
9 ?- T7 O% ^: c6 l" N    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);/ u# A4 }0 h( ^, q+ U
6 X8 O) l" ^2 K7 ~: f! j1 [. n( r7 S
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
  A' R2 }# @) W% p8 Y1 V" [% ]}8 ?; ~: S7 W) w

1 @/ e1 f" z& w5 D* o8 Wvoid ChopperWaveform(void)* X# x' x# D! y0 R5 w
{
4 f3 j0 i, e6 \  }8 I' ]    // 50% 占空比
9 q5 i8 R# I, F    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);6 q& O" P0 s3 R$ z
    // 4 分频
! }& p& m& D$ k. z& M    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
  I1 V- |# q; c2 E    // 单个脉冲宽度
/ P: W. Y$ q5 ?2 H$ _3 _    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
1 w- S8 H" `  W  |, d    // 使能斩波子模块  e( T- g  [" U6 ]7 T  N
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 }& A4 w' |- L1 e  C% K" x* K}+ s) Z1 z% K0 G* z0 Q4 r1 Q" Q

) s" G' K0 |/ N5 ~- y& u* b4 R/****************************************************************************/
8 y. b* Z( N, t/*                                                                          */
( g. ~' H5 [* L7 J/*              PWM 中断初始化                                              */2 }0 ?7 r- C9 v& R: C2 k* r, ^
/*                                                                          */
$ E- `+ h3 S! c. ~* V/ N/****************************************************************************/6 S" L6 L! h# h( {# d
void PWMInterruptInit(void)
2 k4 [$ d' v3 p& J; K( s{; T4 z4 H, `$ R$ A7 L
        // 注册中断服务函数, z. X1 L& j" X  D; ]: S( M
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);) O7 b2 D  Y, B5 r" z7 p( v( K
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);% C  t/ s1 F5 l- w- d3 w

0 E* k3 q- ^0 l9 {# G; e        // 映射中断$ B8 s1 ~4 L& z& I5 \( m9 j0 w6 B& Y
        IntChannelSet(SYS_INT_EHRPWM1, 2);
( A* O. C# F2 j8 z  }        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);* t# I: X. i& R1 ]

% M8 s. ?$ s; N( T8 ]( y        // 使能中断
0 v$ k7 |6 ~" M% o( a% \8 ^        IntSystemEnable(SYS_INT_EHRPWM1);; u9 t8 ?1 U5 H4 @: A
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
9 z+ E5 Z! X" ?0 f8 l}
+ p6 ^  _/ i: z! n+ N% t* b/ Y) Q
+ ]1 C3 ?  F4 e  S/****************************************************************************/
( c7 `4 q4 |, Z: `9 J. {+ e/*                                                                          */! M. t" A$ s. Q: ]& }( i5 L
/*              ARM 中断初始化                                              */+ r- Q; ^3 p) J( {2 m% g& k  }
/*                                                                          */
( P0 {6 M+ o" x' F  ?/****************************************************************************/
+ R% }9 e4 s. J0 @. j# Ivoid InterruptInit(void)
8 O9 ^. e7 `  D+ V. N/ O{, }" M% K0 b4 \$ D; `" [1 p
        // 初始化 ARM 中断控制器
: ^3 z/ A$ H( v: m5 {* `        IntAINTCInit();+ ]% N: z/ r# O/ d2 X. H1 g

2 ~2 u0 C1 A; e1 E2 _% u        // 使能 IRQ(CPSR)9 h, W7 J- H- D/ ^
        IntMasterIRQEnable();
3 c: P! B4 q2 J+ ?/ \8 b7 E# O8 S0 E! p4 h) G0 r: @& ?
        // 使能中断(AINTC GER)+ i+ m6 E; u# o# I- V$ q/ u5 ?
        IntGlobalEnable();
1 D; ~# H# R: n. X3 A9 B+ d
/ z/ z; O0 V& R- E        // 使能中断(AINTC HIER)$ B4 c4 M# _/ N# |( e% f- S
        IntIRQEnable();! |5 z- B3 U( J+ n% O4 U0 k9 u
}' w6 H4 }5 ?+ l

' Z/ S1 ?# w9 U# ^; X
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/2 ?) e7 g# c, d" i& [5 ]- W
/*                                                                          */4 M" ]$ l) h5 d2 {, H) M
/*              中断服务函数                                                */; b$ s0 U0 U* c; o0 x
/*                                                                          */9 j" m$ J- f5 c! E4 u: `7 e' a  B
/****************************************************************************/' t1 s# p0 {% ~- n: W
void PWMEventIsr(void)- n) f  l2 J) q1 H2 O/ B8 A
{* D5 w9 ]# |! D( i3 `
        IntSystemStatusClear(SYS_INT_EHRPWM1);; W3 R* K+ T9 m
) {, Z" M8 d, f1 t
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
/ O( v" E+ f: @: K}0 @1 Y6 D" S6 B* M5 f6 x4 }

# X7 A! ?+ u! \  v+ m5 Vvoid PWMTZIsr(void)) ~5 T: e0 S( ^
{4 I8 x# \* Y# w, s
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);0 h  a3 _# \7 M: m) V2 z
$ J8 L& {1 m1 y2 \0 W
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);1 W" t) Y8 q0 p$ ]
}0 D0 h! I% r( t! ]/ x$ @. M6 m

% h8 h2 \9 `5 t2 Q/****************************************************************************/. F2 R+ H! A! ~2 N0 \( J
/*                                                                          */
7 W) v$ D; G1 F7 a: J& Z" M/*              初始化捕获模块                                              */
: M- l$ J! R, Z7 a3 h) k: f/*                                                                          */8 C$ R. A1 n8 p  \; S& @' s6 ~0 q
/****************************************************************************/2 v9 _: s' e) T7 Z( c3 f
void ECAPInit(void); J3 i( ~4 x: u' C
{
6 |: S/ _, l( W0 s* T        /*-----设置 ECCTL1-----*/4 J* ?8 V  C( J% C% C
        // 使能CAP寄存器装载6 h* L4 X/ e) p& }' Y  i1 i7 ]
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);' g2 E. ]% Q8 ~" Q
        // 设置预分频值.
6 ^& I9 Q' L; N8 [9 }        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
/ V, Y# _# c$ m2 |! J        // 上升沿触发捕获事件
, N0 t+ H: k& n& t( r) K7 o        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
1 X% V  J) N' [% f1 n        // 输入捕获后重新装载计数器值.  P9 X7 x, }9 X( k  E9 b
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);  K' D3 L* V: E7 B6 ?6 H
4 r; s  @1 f2 j# N8 M5 t& j
        /*-----设置 ECCTL2-----*/
. g( Q9 F* W9 O' \$ e        // 连续模式( y/ ]- G1 j, A3 `2 G. e7 ^/ Q( Z3 w# Z
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);  [; {4 @; d, c+ c
        // ECAP计数器TSCTR持续计数) L, B2 w8 r$ t# `# M, e; C
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);8 d( C5 ~4 ^# M% \  r" I. Z
        // 禁用同步输出和同步输入' J: X: s9 S+ g0 j0 u: `5 S
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);0 Y; n5 B& U9 g. ^, D& h& W
        // 配置 ECAP 2 为 CAPTURE 模式: n: C  N, y9 r, p4 B; v& x9 n1 U5 j
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);" G. }. g+ b4 {7 @$ c, c

3 I# Y: h/ b# I        // 使能中断2 H5 Q1 Y, z) f9 Z- i2 D" [
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);! r! h2 H) b( f9 ]
}2 j$ E: k  r8 R( c* k3 b. |

' n* L1 r) ?  R6 }7 u, S# w# \/****************************************************************************/- a  m: Z- d: C3 F
/*                                                                          */! f* H9 O+ @& M/ a; N/ D) {
/*              取得捕获结果                                                *// u% J7 F9 z/ u0 ~$ k: F% {
/*                                                                          *// D2 B9 r# ^; [) R( N
/****************************************************************************/8 Q6 x& u+ C8 f4 @
unsigned int ECAPRead(void)
8 z: ~' E9 x% r% @( a  b" N{6 H! R" |4 o2 ]# e
        unsigned int capvalue;& G) i8 q$ y( {' `! P) Z* O# V- n' X
        unsigned long frequency;5 F4 v/ v9 K: Z1 u
" e% }' J3 Z; E5 V5 j
        // Event1 中断标志
$ ^- W8 B. q) q6 @        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))9 y7 K* r8 S! Y
        {
6 G) C0 i9 b1 x' l                // 取得捕获计数0 F0 n! K+ F. g5 \5 W5 \+ A
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
( _; ?! o, _4 x$ a% p# |                capvalue = ECAPResult.cap1;
8 Q6 c& N) k5 v* w! W
5 {/ r. k  i9 q7 r/ C                // CAPTRUE 模块 228M 时钟主频7 V- W/ J: A  g5 I! P
                frequency  =  228000000/capvalue;% J; E- O! I" ~2 \( e
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
  o4 B6 a# A: r$ ~+ q! ]
2 K9 C% I4 Y# E. @' q0 m                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);7 @) U- S+ X$ K" {, R  \% H
//                IntEventClear(SYS_INT_ECAP2);
- m$ h+ m2 L# S7 D        }6 g0 N' E! U( u1 Q5 Q
        return frequency;
$ _9 t; u) L$ N; N) A" c) S. O}
6 ]) g: _& O2 M6 ^  z5 X0 ]
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
# d1 M$ _" s  y3 I) v

本帖子中包含更多资源

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

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-3 13:31 , Processed in 0.048170 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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