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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
7#
发表于 2018-11-2 08:51:16 | 只看该作者
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
6#
 楼主| 发表于 2018-11-1 21:27:34 | 只看该作者
可以给我发一份吗
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。3 l5 h' P+ w+ W! Y6 Z- M, M% d

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
地板
 楼主| 发表于 2018-10-30 17:58:06 | 只看该作者
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
# P& H9 ]' B2 Z3 }" d/*                                                                          */& n" |2 p+ ^$ S# @4 A- f1 K: z) w
/*              中断服务函数                                                */
8 [; ?, \- e- @3 M) L7 C9 G9 g1 a/*                                                                          */7 u. _2 h" \% m- h) g; x: n
/****************************************************************************/: P/ g4 B" q1 Y. b; ?! R
void PWMEventIsr(void)$ _2 v3 Y- P0 k1 i( ]9 d
{
" d: n/ Z. h! u9 N/ P        IntSystemStatusClear(SYS_INT_EHRPWM1);
$ D  I! h3 v/ }
  I: Z9 G! F" H, s+ R6 _3 F- o( t0 [    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
; j. m8 o" }/ a* R8 J}4 T. ]' Y/ X6 [6 b; T6 ^

. n7 h  M0 w2 `; |4 pvoid PWMTZIsr(void)
+ p1 T; W7 \$ C: {2 C, a7 ^+ {" A{" N% S! k) C5 a0 I8 n5 |
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
) T- e1 O2 n5 @* ?) i% p' Q
% T' t) {4 b* m) _7 M    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
$ H! K; K6 U; p# Z: {}
6 Z9 S  i9 C8 ~7 |- E% `* V( Q9 p4 y. n5 K. `( j
/****************************************************************************/
7 y9 x0 u' J( C5 f, O/*                                                                          */
  A7 E8 M. k  Z" _' w6 L  o/*              初始化捕获模块                                              */, C$ E7 E- ^( d+ H+ t1 ~$ G
/*                                                                          */
. |& H+ V6 M( `/****************************************************************************/- b9 m4 h5 A$ G* k( M5 ^1 Y# x# G
void ECAPInit(void)" c6 m; {- M/ n2 G& o. L
{; F7 ^' ~$ R8 z7 l9 \
        /*-----设置 ECCTL1-----*/
0 |9 N8 Y" Z" Y# q- k4 q% ?        // 使能CAP寄存器装载
! w( Z2 c1 G4 |        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);% I; E  x# s$ a& Z
        // 设置预分频值.1 L+ x. t  A! L4 `9 q1 [6 J
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);5 R( O% t  n, X3 U% k
        // 上升沿触发捕获事件9 o+ @' @; p  U2 @
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
8 X3 ~+ d& U) S        // 输入捕获后重新装载计数器值.& }! X' _' x, h
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
! z: Y! C" h- Z
/ @# u! ^% q, ^1 j4 ?        /*-----设置 ECCTL2-----*/  E6 P- v( e1 g" c/ X
        // 连续模式
- f+ A$ O9 L1 A; M3 T6 o        ECAPContinousModeConfig(SOC_ECAP_2_REGS);  v/ a* n( \7 A+ `9 X  {: n! l
        // ECAP计数器TSCTR持续计数
: n  R3 w9 v  @, u8 |0 h) }        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
! I( M$ w! Y7 Y        // 禁用同步输出和同步输入9 ?+ H$ i4 w; e7 f. c0 \+ E; f
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);2 U& N) R  m/ ?* J& u: _, S+ D
        // 配置 ECAP 2 为 CAPTURE 模式
+ |! h1 H# b% w  x  r; V+ G        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
$ s. @9 x8 y# C+ e& D
  }. ?! Z. L0 Q" n5 U' f& w        // 使能中断
. \- l: i% ]+ z( v# X//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
! f. w% H4 C: G/ W. ~}) `) }8 M" n# q7 a, c0 v: y7 M0 c
* b( A2 E5 F" F3 f1 C9 [  x
/****************************************************************************/- F+ K" z; W1 F5 K
/*                                                                          */
" E, i/ n! h, v) U# j: |/*              取得捕获结果                                                */% I4 o2 Y4 `. U9 Y9 @: f
/*                                                                          */( h8 B4 s9 E5 J( n- T! W: x
/****************************************************************************/! ]. |+ S* S# d2 q# z; Y2 s( u& v
unsigned int ECAPRead(void)+ `  o) n7 q( N( e1 U5 y
{
, [* F- Y& M+ U6 e* m        unsigned int capvalue;
3 E) s7 C) t9 h        unsigned long frequency;9 |0 `. w* I5 |/ f8 A
/ V5 O5 R1 q0 \" i$ ^% A: x6 `8 p
        // Event1 中断标志
1 M/ ~# }, s  k& @. g7 ?' w        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT)). q6 ^$ k0 u- d- Z4 y4 m
        {! i4 ?6 }2 G& _' R. v# J' U
                // 取得捕获计数/ ~+ ^: b8 H" c
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
2 Z5 S5 p* `# `$ G" U7 B0 \0 T4 m                capvalue = ECAPResult.cap1;5 b( k; `  D/ L9 W" i7 v
# q" R+ U/ |- N9 h
                // CAPTRUE 模块 228M 时钟主频
0 D. B) ]# V; `: i. e. D. H. A, ~                frequency  =  228000000/capvalue;
0 Q% {4 }! T& j4 m( l" b/ o3 }/ W# _                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);; [+ v4 W8 c5 w7 N) Z& K" `! z6 W" i

4 ]( l2 r6 W5 b                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
2 X9 Z  E) P, R- i. d. F6 M# l3 j//                IntEventClear(SYS_INT_ECAP2);
- m8 n, |" v$ k        }8 u, y# }) H8 C; t- S
        return frequency;
! `+ ^8 @# w! W7 B2 n! w}
9 }2 T% k" D9 B9 P0 o) |
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/$ I- r* Q4 _4 j
/*                                                                          */& F( h: g1 H1 F4 F# j+ r* a
/*              宏定义                                                      */, c& U# Q$ S& j
/*                                                                          */
- ~6 V' r+ ?* \) \, j/****************************************************************************/, }7 Z: Q) N2 x- {1 T6 P7 [0 l
// 软件断点
: e! [- G! \+ I2 Z) v#define SW_BREAKPOINT     asm(" SWBP 0 ");
; [' r+ x1 ^! ]$ N" f4 v6 s( p( X0 i* m
// 时钟分频+ j: Q% t+ P7 \
#define CLOCK_DIV_VAL     2285 c/ [: q) c  W2 n% P9 `

2 [8 L% c6 ^- l9 Q1 M/****************************************************************************/1 ]" x* P: x' K# x0 K2 l
/*                                                                          */3 H0 P( h# s! ]' n
/*              全局变量                                                    */
* `! s. I+ U+ s; [( X) p# ?' v) @/*                                                                          */
4 F% s6 z6 U; b) h6 s/****************************************************************************/3 Z* y8 P  a8 @9 F) S3 i
ECAPCONTEXT ECAPResult;
4 E, `! K1 _1 ^$ {9 O+ W" V* Q& g5 Q
/****************************************************************************/9 A8 h( Z) f( a* F2 g
/*                                                                          */
  v5 J+ C) J3 d  |/*              函数声明                                                    */
9 i8 }* l/ E# o2 `* G5 v) x/*                                                                          */
, R3 B- }) f+ Z/****************************************************************************/
: n4 K. S/ I! X. J. X// 外设使能配置
0 A1 |& I" {7 l+ u7 x$ M) ?: \void PSCInit(void);+ M( q& t5 F/ }$ J& d9 i
- A, p6 l$ P: D- I& x6 k  _/ k
// GPIO 管脚复用配置
6 |. y, d8 L2 O: C' |- D+ }void GPIOBankPinMuxSet();" P! O2 `$ _; ?, d( u$ D3 l1 N4 \% k7 A
0 H9 L+ k( K7 L* t9 ~  w
// 产生波形& g1 v0 c5 {9 {) @3 i! s4 k
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
5 W5 U" B6 M# l+ _8 lvoid ChopperWaveform(void);0 O9 D) K) ~/ C4 z* X5 G) r+ L) A4 z

$ \; ?, J+ Q" X3 x  P& [) s/ X// ECAP初始化和读函数
9 K! m1 c  e  u" {void ECAPInit(void);: ~9 b1 Y- _- a, F' f$ g/ H! @& w
unsigned int ECAPRead(void);
! e8 z- H9 \( O( f8 F2 k
: ]- Q2 y0 ?, I. M. H# P/ N8 I//ARM 中断初始化: O0 V+ J8 w/ \' R1 u, T
void InterruptInit(void);/ @; `* u: L' l

7 w4 s6 f  F8 I9 J// PWM 中断初始化2 a9 K- v8 Y0 ~& ~5 d/ u
void PWMInterruptInit(void);+ q2 _, I; {6 h6 `2 @1 Q; [
// 中断服务函数6 j6 V5 E; _" \; j. z
// PWM 事件
: i$ F# [! r& }( a2 G# v8 {void PWMEventIsr(void);
- G. o/ x. J4 A5 h# i* ~// PWM 错误控制事件5 L, {% I: @" i+ U1 B+ u9 [* c1 a$ C
void PWMTZIsr(void);) Y# ~& ~0 S' Q) u+ O! v6 c

  ]0 q8 U7 e2 M1 ?- k; x$ o/****************************************************************************/1 t( M# W3 i0 N! s
/*                                                                          */
5 l$ f6 M" L! x/*              主函数                                                      */
# I) Q2 N/ ?4 }! @0 x. y7 R/*                                                                          */5 A% c6 O1 v  T; ~# Z+ c. h0 ?
/****************************************************************************/4 S0 w6 y' X) e* E
int main(void)
1 A+ Q! a- g/ I) S{: f6 b: ^: r; a
        // 外设使能配置
( _! K* b( W% G* Y0 S' v        PSCInit();
4 f9 w: e1 s: b# I. ?8 t
& ?5 c% v5 B0 l+ U8 X        // 初始化串口终端 使用串口22 d! J) b8 @+ ~; _4 G; p
        UARTStdioInit();# X. z( {6 k1 u+ }2 _# s& n8 a
        : u& o0 o4 @7 x$ c1 d4 c, ?* S) q: P
        // GPIO 管脚复用配置
" E$ D0 a- y! L; r1 u5 n- n+ `        GPIOBankPinMuxSet();  e7 ?' n8 h. E

+ ?2 s' z  d) D. J0 U6 |3 ~        // ARM 中断初始化2 S7 L. A' {' U& ~
        InterruptInit();& j7 b2 n' n6 k: A; q. q
/ b, X  l6 J, A* R1 `, s
        // PWM 中断初始化7 }7 {% k3 G/ B8 T- L1 z: Q
        PWMInterruptInit();
# }$ _& q* r) _: N1 l( g# x2 {7 z' Y6 {
        unsigned char i;
" \& h+ E, l1 C$ f7 @( f  R  e        unsigned int j;
3 E, d/ d% K  d% Q7 U) k# U) v* {8 u/ M7 S1 R* q
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
# R6 C# w3 g3 X. E, v3 i) ]        UARTPuts("------------------------------------------------------------\r\n", -1);6 j( G7 G7 U! q; V) q; v: N/ T- c
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);7 g: t5 z0 ~& d( W: \* A6 c
        // 产生波形
; J% Q9 G, p0 z3 p        PWM1ABasic(25000,50);4 F& e/ I9 e3 g! n4 U. V. |
9 B6 U2 l1 a  j7 |: ]
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);) b3 [8 N) J! Y9 V0 O* T
        UARTPuts("------------------------------------------------------------\r\n", -1);
# x, u# B9 R6 U
+ o6 X! M7 K. s. }; _6 I8 _+ t+ O  b: Z0 k' _  S6 b9 W
" v: D3 \' z. P6 h
        UARTPuts("------------------------------------------------------------\r\n", -1);
# N8 @2 s3 w% L% M, k. s        UARTPuts("                    C6748 ECAP Test\r\n", -1);
) h! c0 z# t" r9 k) f# Z9 K4 U! @        // ECAP 捕获初始化
) q$ }( z/ ?7 R0 {+ R, m. ]( ~        ECAPInit();# n# }2 z! l3 h) `& M6 s
        UARTPuts("Initialize ECAP.......\r\n",-1);- C+ x0 C! `# {' c
        for(i=0;i<5;i++)8 ^0 W1 U& j: v( v/ w5 d/ f; t
        {9 Y. c% b2 _  y! Q5 T
                    for(j=0x00FFFFFF;j>0;j--);            // 延时; m$ v: f' h6 V7 ?, @6 M# a
                    ECAPRead();, M+ Q6 E4 \+ S9 i* G! H( J
        }$ `5 S3 b1 j; \/ c
        UARTPuts("\r\n",-1);
: D# i- i6 C- ]        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);- y. t! J8 G) t  j
        UARTPuts("------------------------------------------------------------\r\n", -1);9 X* n; N# y$ {+ c0 g

" r) K: Z1 B; r, _9 a        // 主循环+ A; Y; t9 q/ Q
        for(;;)
3 I  l8 p, u2 X* J$ e9 o' [        {2 Y. ]# Y! T! v/ T& M) \- s3 f8 l( A

  m' V3 @& P7 K  {+ X0 v3 i4 g/ E        }
$ K3 I4 i. E/ N# k}
" k. N" \# y, w6 G& \3 u* O) T7 G: G+ U; s, V0 w4 V
/****************************************************************************/# G' R0 I0 Z5 H" z/ m& P6 X9 O
/*                                                                          */0 i2 C/ w. E5 y( S
/*              PSC 初始化                                                  */
5 B  T# R- j" M4 ]& R4 v. v9 s0 x/*                                                                          */9 y2 M& ]+ m( Y' `# p. ^( m/ u
/****************************************************************************/
' D/ A5 M, n6 |6 {void PSCInit(void)
3 U# C: e7 d+ D{9 f* @9 Z' H3 Y
        // 使能  EHRPWM 和 ECAP 模块
) [$ M9 }8 G2 z6 z: |9 l0 t        // 对相应外设模块的使能也可以在 BootLoader 中完成3 l/ a( W. p7 u' }# i
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
, ]6 G) k6 V5 P. v: R0 C    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);  K  \5 G4 B0 t) \7 u4 h, M( R  t' d
}
# d+ S% a9 Q! |) ]/ O3 ?; {. \# h) Q. N  t- A2 Z+ t
/****************************************************************************/
8 w4 n8 z0 @5 ]9 D8 A% P. S1 L% |/*                                                                          */9 k7 U2 t6 X) \, [
/*              GPIO 管脚复用配置                                           */
( V' B- l6 b5 o: ?* u: E' o3 ?& b/*                                                                          */
/ Z7 q6 ~7 Z: b4 v/****************************************************************************/
& ~: u4 r* b+ F# a. B. V, k! c& G% D' vvoid GPIOBankPinMuxSet(void)
# i5 o8 n4 B3 m6 B$ _7 i{
8 L3 J* [# g5 m' Q6 L        EHRPWM1PinMuxSetup();
9 v5 [* Z2 Z" E2 {  T) Y  @7 y& C% F
$ |, H; i$ i. _- `        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP): p( ^" N( j( [/ B+ v  n
        // 作为捕获功能时管脚方向为输入* t0 U, h8 d: i2 K
        // 作为辅助脉宽调制时管脚方向为输出
" N6 E! |" o& _+ c2 M5 e& m7 M4 f    // ECAP2 / APWM2
7 h1 m$ U* E8 k/ ]8 Z5 `/ \! _        ECAPPinMuxSetup(2);
$ o/ Q/ J+ S; V" Z# C+ [7 b! R0 `7 v; V& z" o, g8 y! f# f; O; `
        // ECAP2 / APWM2方向设置为输入
8 N  l  l. d9 A2 y% b0 u" J        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
/ m; U; p" |6 B, W7 B}
' N9 B' |0 A: `0 k  v* U
) p  V) V& t! L4 ]+ o0 S: L/****************************************************************************/
& V" k. _- ~  c$ p6 i* V/*                                                                          */% t1 E: z! m& Y" y$ t$ _; W
/*              PWM 输出波形                                                */9 I% d) f* N1 t! G2 k0 Y$ G
/*                                                                          */
+ J! }+ E- E8 X# `; m6 D5 j* |7 x/****************************************************************************/
/ s9 x' V% P3 q: q- g, d, x# M0 vvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)7 A, b  o4 `; p3 c
{- K+ z! G0 @- {* Y: W6 }
    // 时间基准配置; G: i0 d  p& {& @; ^
    // 时钟配置
* C9 o! I" R0 E  @8 _1 P    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);  {, i; V5 w* a

8 o/ o4 S0 M& H2 _  G* W3 W5 a* s6 B1 m    // 配置周期9 j$ b! {6 ^+ I: T; }! m
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,7 {  W( u$ S: V8 V5 e
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
- @! m% X6 W, T: O5 T# ], X7 G- q) _8 Q4 D' K# Q
    // 禁用输入同步信号
/ P; G) Y3 \5 g$ n0 x( q1 K+ N6 |9 n% g    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
# `7 D( T  r+ o; _+ k8 h& e5 K0 F9 Y3 I
- Y$ v: h$ v: p    // 禁用输出同步信号, x$ H- \$ R) m6 p' ]
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);/ o: Z$ y4 c0 l) o
; R" K" \0 Y  d9 t& M% _+ _/ `0 P2 y
    // 仿真(DEBUG)模式行为配置
# n# m" j" f* M1 n. I; Z0 J    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
0 a" E' l( `( q) g: o/ Q# @% [( y: V5 X
    // 配置计数比较器子模块
8 ^" P0 P! ~$ v! m3 A, _+ R6 N( B( L    // 加载比较器 A 值
* \5 ~, e0 A4 F2 o# M; G    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,6 H6 e9 T% q% x# r$ \$ T
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
: K+ J1 ]! @9 ?3 n5 I, Y$ y7 C; s
7 h: ~0 ]0 t* @! h; i3 x    // 加载比较器 B 值
2 \6 Z2 _$ w( }    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
/ v0 t& `4 Q; B                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
0 ]$ v  z# e$ r$ ~1 d1 G9 L0 I& y
- U8 n1 i' c2 _    // 功能限定配置(输出引脚触发方式设定)
6 H! Q0 Y; u5 V    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
1 _5 @7 g! D" j6 {    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,& f1 N+ _# k0 y3 ?
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,: s1 y- j4 v- z0 l  |8 `& |: Z# L
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);+ U2 b6 o  K) H4 M

3 f: q. O- U# R3 v! Y: p! H3 M    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
3 k# @4 f9 ^1 f' \: r4 h8 O; f    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
  Q: e! {& ^* j8 x9 ^9 f3 z2 ]: b1 J* Q& h$ }. a# _) @, g5 y
    // 禁用斩波子模块
( L! l, }+ o4 z* Q+ s0 S- s" ?    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
( z/ j) V3 `/ c; ?. C1 E6 M# k$ K4 H' E" R+ O
    // 禁用错误控制事件- g  V/ T% s& f+ N  Z" J2 @* j9 W# q9 b
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
+ \' b- I' N2 H( T  w; N    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);' b( H& Q3 w% u- L

. e& T7 E- ?0 S) F' ?7 L    // 事件触发配置3 _% R3 F: B$ r5 j
    // 每三次事件发生产生中断
! k- P* W! M1 J- K  b; U+ W    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
0 n3 L0 {# }1 A$ b) f) w; h    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
; k! ~/ s* J" g    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);/ _: G, g4 ]4 m4 J3 K
    // 使能中断, |, J& n1 Z5 }/ A6 `$ v
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
2 X, h/ `  j; L# x  G$ |* f1 R9 u0 E+ z6 }" s
    // 禁用高精度子模块
3 Q& |8 M7 t5 ~  @* G    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);4 |- y5 z8 P  Q+ ^
8 i) `) C) l% t# i$ [
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);- N) J5 Y, H8 d+ H. U0 p2 p- p' @
}- Q& E9 B; l, B8 Q& @

0 a4 h$ S% y% ]' vvoid ChopperWaveform(void)
) v. k  |. q2 E% W{, }" ^& h2 h5 `8 a1 S$ G8 J
    // 50% 占空比) k7 l3 a' k6 m- B( k$ L' v
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);( e3 W5 u( u+ W: j+ j
    // 4 分频, c+ \+ O, G* j# `9 a" m+ A7 o
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);2 q5 }; E4 E4 J: q( z
    // 单个脉冲宽度* D/ ]# H4 S8 q5 Z6 o6 r3 O
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);8 j. ~( r1 ?% l4 `
    // 使能斩波子模块
1 t  u+ w( T, s. @: }. C2 k    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
: ^7 E3 Z) Q9 u4 y% G; m}( Q' _8 [" E5 f9 ]9 B7 Y) B  {. b2 A

% N0 A1 T9 v% \/****************************************************************************/
6 F. t) @3 }6 m, [8 {9 T( U' }/*                                                                          */
( L4 B9 ~* m7 y  X' Y1 y/*              PWM 中断初始化                                              */0 M3 s' q+ G& i" {6 q
/*                                                                          */+ j. x8 P) `1 z$ t+ f
/****************************************************************************/
  B; I$ g7 b. @* L  Avoid PWMInterruptInit(void), B$ x! D1 z2 w( O/ H9 A& m
{9 |7 w2 l' {2 b
        // 注册中断服务函数
8 I/ x) n, }8 H$ w! X        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
% e$ c3 ~  q- O; @8 _6 }: \0 o        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
- B% `# _' `, D8 K' X7 T
' C/ `3 m. V' G& A  J+ W        // 映射中断
! \: h# n) S9 C, Y3 \        IntChannelSet(SYS_INT_EHRPWM1, 2);
( C  ~! D+ g7 S        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
4 F2 d  n- I& H" Q
7 C' E2 @: s2 Z  F# x# g        // 使能中断
- R0 u& i3 s8 N+ Q9 G) ^        IntSystemEnable(SYS_INT_EHRPWM1);) K9 I0 R4 o' |, H* e+ F  m
        IntSystemEnable(SYS_INT_EHRPWM1TZ);, u+ q. J) ?' n, h# R
}# @! Q5 y" ]" d0 V
" A1 C3 w& p/ P" \
/****************************************************************************/; O$ ~# d/ n" G7 v- q5 H9 l
/*                                                                          */
9 ]4 z5 _' _5 d) s7 y% \4 ]4 ^/*              ARM 中断初始化                                              */
" ^' _( x' W: w7 ~, _, f5 a: C) p# [/*                                                                          */
* u4 B1 ?. k! y4 x* d7 l& k/****************************************************************************/
( M/ {: {! l0 x6 G0 G' q" e+ }void InterruptInit(void). p1 D8 x, J0 I# d! s
{
6 J& J: Z1 _5 c4 s        // 初始化 ARM 中断控制器1 o9 c8 J7 C3 i2 n4 t0 \- Q8 B. K' ~  [
        IntAINTCInit();
3 v4 u6 `, `" y( t' v* |: L3 c) Q! J3 _: [5 ~, h* ^% h: V* q
        // 使能 IRQ(CPSR)
; K4 S/ A+ a* m5 E7 B        IntMasterIRQEnable();
" A$ ^& b, Y) n  j6 z- d4 a2 b0 e0 Q/ F- k# b
        // 使能中断(AINTC GER)0 l! z% ^3 U% M# [! a/ j" ]7 V
        IntGlobalEnable();
0 E$ K, k6 d% p& I  g
/ N+ ]5 u' U, F- u' }  l        // 使能中断(AINTC HIER)
* L: k# P" i6 h) X6 S$ ^        IntIRQEnable();
$ F) w$ Y5 X0 h}
3 |" |$ \" A( |. E9 Q! `" X, }3 r) z, J4 ?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-5 06:51 , Processed in 0.045508 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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