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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
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

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。+ D, y7 g) p5 ^' U9 h

本帖子中包含更多资源

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

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 | 只看该作者
/****************************************************************************/, N( M, \" n7 B% C7 z- ~7 O
/*                                                                          */
6 z4 v' S3 j) [' l7 N/ x/*              中断服务函数                                                */
1 B, r9 n( L9 D( v8 d/*                                                                          */
5 B! n* ?2 a5 C% I8 ]/****************************************************************************/
/ T. a& X0 x$ C: F1 @void PWMEventIsr(void)
/ R' M- G5 ?9 ^7 T) ?, w' _) j$ k{0 {5 Q9 B- p" ]2 o/ D( e
        IntSystemStatusClear(SYS_INT_EHRPWM1);
7 ^4 ~2 H" `3 U: N5 J3 i
' e" ?( q& Y, o, q% B+ H, G. G/ ^    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);) T2 I9 l( h: G# [1 Q- t0 `, m
}8 r+ Z0 M8 }2 S6 G" c
$ V. T/ I* k# M4 U: s
void PWMTZIsr(void)) Q3 v* A( p" [2 }
{
7 N/ s# C' i. L8 p0 x# a+ \        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
" n- D  Z, V# @
* k. z) n, [+ s2 c) g4 S& Y& p    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);7 d- M# ^( ^: {* z
}; f" F! j9 d3 D) @- F

5 r" \; D* _# W8 q2 _5 b: s/****************************************************************************/
2 b; Q4 E& N  a8 G5 W/*                                                                          */  _+ q+ \( C- c; P) W
/*              初始化捕获模块                                              */: z3 u/ Z8 O4 @- R* I
/*                                                                          */
8 J4 t( X" d& j$ K/****************************************************************************/) f/ }  Y: T7 x, P8 |$ G9 [+ c
void ECAPInit(void)
# r- x# r" G' c6 Z5 V( i{4 C& X9 k" ]) Q2 f; q& B
        /*-----设置 ECCTL1-----*/2 }) @( ]9 e$ h. l
        // 使能CAP寄存器装载
7 K# N% I2 f# d+ s/ L        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);' l' ^" J9 n  B" O' O9 k
        // 设置预分频值.# e. q5 Q. X( D) Q! t* _  D
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
: ]% z( Z  b; }  p0 x% x. j3 t        // 上升沿触发捕获事件
* V' i) y% h( p6 l$ s0 {        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
) k2 r1 b% x- D) s+ V' H        // 输入捕获后重新装载计数器值.4 l$ U- l0 m9 c" k5 Q
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
7 a+ `7 d$ x4 [* V# \9 q. s/ |0 v6 o3 F9 y" S! I
        /*-----设置 ECCTL2-----*/
8 s4 N9 X! v& S0 P  s9 ^* b6 K3 W5 w        // 连续模式
0 A* s' t9 U' a: P+ i        ECAPContinousModeConfig(SOC_ECAP_2_REGS);; d0 A! p, _/ |* \' u
        // ECAP计数器TSCTR持续计数
2 P' B5 _6 I0 G7 t) O, B        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
3 M- I2 e5 P6 _) U% G        // 禁用同步输出和同步输入
& U. y; a$ @, H* @# |        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);! |/ K1 H8 ~; q! z' Q
        // 配置 ECAP 2 为 CAPTURE 模式# j# S8 P4 Z$ d6 W$ Q) Z* W% b7 p
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);& n" S4 U8 M+ S: w: H

3 g1 S7 q) c& q; D) E9 p        // 使能中断% T, f, v# Z$ w/ |' d/ g
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
' \$ ^  F: G) e/ _7 y}+ G+ @% Y, i. I/ ]/ c3 H5 q! p
" B, I# E5 r; {8 K4 \/ a7 `1 u
/****************************************************************************/
% R. q: X, K& }( U& R/*                                                                          */
* y9 z& D6 H  |- A' a/*              取得捕获结果                                                */8 L: t8 E9 n5 Q
/*                                                                          */
6 g2 @; m: c7 P1 }: K/****************************************************************************/% H" g+ T/ G$ r% N: W1 f3 W
unsigned int ECAPRead(void)/ B3 s" O! N# D5 F
{; E6 }$ p4 w0 w& ^) `
        unsigned int capvalue;0 B) B; L! d& d5 t% T) H4 h5 ^
        unsigned long frequency;
% c: x9 T3 M2 ^* p+ ~" l2 P/ b
% k& a; w) G1 G+ s        // Event1 中断标志( d/ E8 I6 e- g. s# N, e! @
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
3 Q- g2 Q% [5 g9 t4 z        {
# q# ^! z; F2 }3 z                // 取得捕获计数1 ~! ^" f3 a5 ~1 w* \- g+ k! C% F
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);3 E) p: C4 u0 w7 w8 j, X
                capvalue = ECAPResult.cap1;- e& K) s8 ]6 _' j+ \9 n/ X8 a6 p0 W

$ i- Y* L. v( @2 o; ~                // CAPTRUE 模块 228M 时钟主频
8 ]8 r$ M% }+ V                frequency  =  228000000/capvalue;4 v  F5 T" x6 A# K5 O( w
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
0 Z4 D5 z& x2 O, H9 p% `1 J+ ]/ P0 n, d. q  y. Q. T# B
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);3 Y0 I) w9 i" J# i( P/ `/ ~
//                IntEventClear(SYS_INT_ECAP2);. n- [7 O5 c; g4 P& g2 q& n
        }0 N. W! H1 E2 i2 q+ P4 u
        return frequency;
: r% x# L! j$ n$ [}6 @" `  z- o9 s) ~, F1 U2 e
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/+ B/ g' n8 ~8 y% Z
/*                                                                          */  l( k  {, |! j; x) I# c* s1 C2 ]: k
/*              宏定义                                                      */4 M. ?2 g5 }) h3 H0 B6 I
/*                                                                          */- `( d5 I2 p! ]/ \' h4 c
/****************************************************************************/# v! n- K# l9 ]3 Q$ J) T" z$ O
// 软件断点
& D6 N& V4 K* \: o7 b* d  h7 V% T#define SW_BREAKPOINT     asm(" SWBP 0 ");: f3 c/ d  i; o" T! o
/ b. v# n5 Q3 J+ [- ^* X
// 时钟分频
) A5 c5 T$ R' M1 K#define CLOCK_DIV_VAL     228: A, @, y9 D. a% [* R) |$ F

# @1 |5 V6 E* p1 c( n/****************************************************************************/2 g) m0 L# N+ t9 V' U: \
/*                                                                          */
( g* b8 Q2 g. G& z9 l' U, g/*              全局变量                                                    */) K7 Q' n6 O, G4 A
/*                                                                          */+ D8 z& y/ f8 f+ |, L' G& p
/****************************************************************************/8 b7 R7 K$ m. t
ECAPCONTEXT ECAPResult;2 \2 m# Z6 ]5 g" n: H
! Z+ I4 }  M" g
/****************************************************************************/
) Y- s9 d2 u7 ^. ]9 Z/*                                                                          */
2 z& c' J0 U# ^5 f/*              函数声明                                                    */
, Y5 n; u# S& R2 W/*                                                                          */( X! u! {+ U# Z; r
/****************************************************************************/! ~* }5 G8 d! K. G
// 外设使能配置9 U! v6 x7 z0 Z# B+ w) p
void PSCInit(void);
3 V: N7 r6 `/ [% q" E, k0 R1 i
9 o0 b, r+ w, _; s% d. u* N// GPIO 管脚复用配置
1 T9 L7 a) R/ _6 U' k9 @, m: bvoid GPIOBankPinMuxSet();
0 q4 A" \6 y" @# O1 r  ]
+ {- E& U2 e3 C3 L// 产生波形
% [* b* H! `9 y4 j3 \) @6 A8 fvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
9 K  |, R% X9 }9 r- s" {& {; yvoid ChopperWaveform(void);
/ Z- E4 i3 A1 ~" W5 t" D1 b7 S  k9 K' }: E, x; H9 @
// ECAP初始化和读函数9 a1 z0 W2 P+ v. [" T( j1 I
void ECAPInit(void);
; v. w4 T, [# v& s' R& @- H. w! Zunsigned int ECAPRead(void);
9 |: P  ~1 L! z! E/ L$ H6 X( b
1 V' a' M+ t, O2 {1 H2 b//ARM 中断初始化7 t  Y- e9 t0 A, P7 ]/ }
void InterruptInit(void);! j4 s: H" S& ]7 V" v1 `
& u5 h4 s  ]. g; }
// PWM 中断初始化( f6 O0 b$ i3 C: p5 q+ w  ]# v
void PWMInterruptInit(void);0 u" T% `! I" p* o
// 中断服务函数
" l2 k* |: {( u// PWM 事件( B2 {- Y* ~9 }
void PWMEventIsr(void);6 k2 ]5 b+ g- o+ C3 B8 o7 a
// PWM 错误控制事件0 w, Z; [& F0 `* d* b
void PWMTZIsr(void);( O( @7 ], W7 ]

) U) m$ t6 [( d( r/ U; r/****************************************************************************/
8 R- N* @6 T. s* p1 Y# K/*                                                                          */  L$ N& q  ]# s0 q4 W9 O  g. A
/*              主函数                                                      */0 d: g8 g3 Z, c$ B- x1 a
/*                                                                          */
) K! R: T# U6 `& A; C8 _& q/****************************************************************************/
1 u6 H* A3 d' }" j8 Yint main(void)& c2 P, d1 B& x* S4 A0 u2 q
{
9 `( C4 v4 b2 k7 B9 y. E( Y        // 外设使能配置9 [, t2 A; |% F  X, E
        PSCInit();
" T9 M6 W  W9 h7 k" x/ e, k7 |" y/ F
        // 初始化串口终端 使用串口2) n8 e7 H- A  [% I# g" _7 D
        UARTStdioInit();' ^0 z8 C. R/ {. ~1 y% [
          p6 u8 Q- e& \
        // GPIO 管脚复用配置3 g4 [6 ]' ]  [4 B. Q" }" m
        GPIOBankPinMuxSet();3 C4 g% \+ t- _4 ?. Q/ K8 a

0 y/ S3 `7 Y" b4 y; u% v        // ARM 中断初始化
! P. M7 {2 A; b% X4 @4 d        InterruptInit();
" ~3 L* ?4 o% T9 k9 b+ I: B; i, I1 E" d2 q7 `  q. {/ e8 _
        // PWM 中断初始化
; j) H# q6 e9 q( f# U        PWMInterruptInit();2 g; f! v' d2 t

3 z) {2 N1 D; Z4 k! s        unsigned char i;/ ~& N) w0 @2 b: a: w8 \; {2 a
        unsigned int j;2 {# Z$ B" {/ r& \, w8 l
3 k8 y- ]& O, z6 p5 E
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
; K5 n* m6 q: E: D7 F* J        UARTPuts("------------------------------------------------------------\r\n", -1);
1 d5 ^* l; j. v: r0 U. j- J        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
0 e; ~; Y0 `! E; g        // 产生波形
% q" @& [' j8 D7 J1 Q# M) ]3 V        PWM1ABasic(25000,50);
; J$ E& U8 O, ?% U8 \, D0 _8 f% G, ^. T/ S
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);! N* n  L% r+ H$ g1 D/ z4 u
        UARTPuts("------------------------------------------------------------\r\n", -1);8 a1 z5 ]( T7 J& c* K$ l

) l# L9 Q5 b* l& p. ~; n0 B. J6 e' @& t/ Z  l$ b! w7 W$ ?
8 x" p2 f  x4 B
        UARTPuts("------------------------------------------------------------\r\n", -1);% `4 S5 G) D  ?& g1 I# o* V- [% ^
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
" g9 ^( m8 [1 y        // ECAP 捕获初始化" M( D! S2 h. Z& g: F
        ECAPInit();
+ e: M' ^8 i6 b/ J* j        UARTPuts("Initialize ECAP.......\r\n",-1);
6 q! D: o- S8 J7 `. f& X% h9 x& z        for(i=0;i<5;i++)2 O! h, u3 _7 T& B( B4 W
        {6 C/ g- `0 J. A* a  C8 z( \" u
                    for(j=0x00FFFFFF;j>0;j--);            // 延时$ R) d2 Y  p; _( g
                    ECAPRead();9 a: h: S7 S7 b0 V
        }/ ]0 n3 y! \2 X& I$ S2 A8 _6 j
        UARTPuts("\r\n",-1);
, O& A( R: K% j) D        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
# A* Q3 Z" |; r% R: m        UARTPuts("------------------------------------------------------------\r\n", -1);
: y' }% n9 C5 V' u) U6 n; H, L, u1 a2 A. y
        // 主循环/ ?  t+ o4 M- ~2 @# C2 @
        for(;;)6 L& g, b  {$ H, U, [
        {
* M; ~* B; p: ~, {1 y6 ^: o) K) a# b" \8 H! Q
        }( L, n) c6 {/ }  q/ b
}
1 w0 ]( X3 `/ Q; Z* M
0 @7 W- W; [5 e& C% `" o! G/****************************************************************************/
. ~( n/ f; P2 M7 _( S0 q+ k0 Q/*                                                                          */+ e  s# j# L! y: j5 I
/*              PSC 初始化                                                  */! I+ F' p0 R: \/ C8 t' J
/*                                                                          */
( P: f( \1 T5 F1 T; q. J6 p5 y/****************************************************************************/
3 {* Y! J; ?% [# s* E1 xvoid PSCInit(void)1 r) a; [4 s4 v
{" Y# P+ {0 G' k7 ^
        // 使能  EHRPWM 和 ECAP 模块
! b, L4 \1 ~! _5 f  e8 j        // 对相应外设模块的使能也可以在 BootLoader 中完成
) L* _) p9 e6 A# N3 P( Y    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);9 t: B, J3 J3 h) V2 D
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
* [/ \8 _3 B: O}
6 p+ V/ g" u2 p
5 k9 G& O( i3 Y! R/****************************************************************************/
/ z7 S$ X: Z7 _$ e  S/*                                                                          */. X% g9 H8 a' T
/*              GPIO 管脚复用配置                                           */# t2 z) @, @8 i  I* P- k3 P
/*                                                                          */' _6 Q% F0 q3 ~" j: B
/****************************************************************************/
! n! S8 d4 A/ J  hvoid GPIOBankPinMuxSet(void)
/ A/ ^- g. \  ~9 I6 F{
5 p) \9 n$ n' H! m* z8 J        EHRPWM1PinMuxSetup();' @5 x# m% y/ x, U7 `

8 y# b' W) |3 s  o  g        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP): M/ C" |' K& Y2 _0 l
        // 作为捕获功能时管脚方向为输入
) E1 z" w* t; D2 E        // 作为辅助脉宽调制时管脚方向为输出
9 t# c, d% ~. ^/ v    // ECAP2 / APWM2
% J) w* j8 d" _3 |        ECAPPinMuxSetup(2);
7 V& `) _$ w6 `; U! b4 h
2 g( L* k% ^, U0 e0 [0 Q* d6 s        // ECAP2 / APWM2方向设置为输入
4 Q+ I! e% d; T4 p0 @        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]1 M' U6 u- F8 ^: `  E$ Y5 K* c, ]
}& }: H5 ~9 `) g

: s. a2 W9 H! s- v6 A/ @( g% [0 r4 o/****************************************************************************/
  A, D$ O. [# ~8 o/*                                                                          */5 i, k2 h; R% e) O; i$ [% Y$ X
/*              PWM 输出波形                                                */9 ?! U6 Y4 J  |4 x; S
/*                                                                          */
) O; i5 i- |/ ^5 F/****************************************************************************/. ~+ o9 Z8 q7 V: X2 f6 e
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)- a3 a& ]6 p- R& {
{% \' y: P/ E. R1 O( f$ a' S
    // 时间基准配置
5 Y/ T" c& I2 c) [6 r( F    // 时钟配置+ z, Z" U. H& |# @. ~5 l
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
1 R- f3 ~/ x% p; L6 }. e$ }9 w1 V/ O6 c0 Z
    // 配置周期
5 N7 o5 b5 i+ J: E2 a3 }1 y! e- N    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
. ]5 p2 j7 P) f4 g0 ~' f                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
8 k& T0 i5 O5 t  N
7 t5 J3 q1 E' \+ I5 \2 P& Z    // 禁用输入同步信号
. Q) ^( T( o& V. g$ ~1 S- c    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);( o) l9 P" b+ z

" N( O" n- u) q1 k% j    // 禁用输出同步信号
; N2 K0 C% B# t! o) \2 e& Z    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);6 `# Z0 U* i- c

. j6 V* U) G; Q/ U  E6 B1 _; ~) U$ z    // 仿真(DEBUG)模式行为配置# `0 A/ z1 w2 v/ N: n
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
9 V1 b9 l/ h5 C
- x9 h$ ~4 _! }5 t1 u" I" d    // 配置计数比较器子模块
" n/ S2 p3 [5 Y    // 加载比较器 A 值
0 j- ^( E7 b- h; Q2 i) R    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
: p3 y; N* j8 U+ U                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
& C+ ^$ I" y! o# P9 w$ u: P% ^
# V/ n0 X) ?/ U) ]( t    // 加载比较器 B 值
; k* X' Y6 a: S2 H3 H8 b$ H) T- c    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,4 V$ {3 }$ |& Y4 `; I
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' j' A4 T+ a( G2 f1 f
0 S' j( Y- Z" q# c' a0 f    // 功能限定配置(输出引脚触发方式设定)  ]  \. y% K: R) t0 e
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出% b2 {) e8 A8 u' p' G
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,. R5 p2 R1 y. N8 F/ \1 g
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
9 V+ B& b+ e$ Y7 m# c) T                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
$ e5 I; C2 }! }$ [" i* f
. j) u; ^, b* d5 H  S    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
1 f1 q8 ^  }" t, N4 w7 z    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);6 E) H0 X7 ]5 f5 [; U0 O9 ?  S
: i" {! ^5 x' N
    // 禁用斩波子模块
3 n* g8 B2 |1 A    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);- V9 ?/ Z: M5 I2 E
# a6 X! J4 s# S* c+ j  F
    // 禁用错误控制事件
3 g1 Y. M: Z: {- S: u; S1 w' A' c7 c    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
# t! d6 Z! l6 a, Y! a0 b7 M    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
! Q0 ]- f- @9 q6 a
/ @& N3 N$ [. }! g* \; P8 W3 _    // 事件触发配置2 z0 b0 _0 K* f" h9 Z; y5 d
    // 每三次事件发生产生中断
3 ?( H9 L0 U/ g. u6 n4 d    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- F9 k7 |$ d. {* u6 N5 M    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件! {2 h, N! Y. h# {7 g! B
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
2 ?1 s' c+ a8 V' x: y& |    // 使能中断
4 v: }% f9 U- e# d5 m  `1 |    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
- i% F% I1 u+ \6 I  y2 ?+ ?8 |. D: C( V( f0 _! g4 N: u9 L" j
    // 禁用高精度子模块" ?( g9 E3 J* }+ a9 X0 w
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
5 E3 D& @6 P8 W  I* @. ^
  p/ i5 i+ g6 j) p& m    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
! p( S* c8 a- M+ O7 q}
: [6 W& z1 _. |5 {5 H6 X! h% S1 K- S- @- m
void ChopperWaveform(void)
* U. {# S4 V' [. O, j{  X% ^) Z0 W6 G3 X* `; W+ {
    // 50% 占空比8 b4 l( Y  o. W) \$ O5 X4 g5 Y9 r
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
, z# ?" ~" b% k" S/ Q; ?! n    // 4 分频/ e- F* [- k  L0 u9 X
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
+ ^( u, C7 G) `& T3 y! [- D3 \    // 单个脉冲宽度
+ {8 k! g, h1 q3 {( Z    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);; B! w' ~$ Z& ^: Z
    // 使能斩波子模块
3 G7 m9 z- ?1 X5 A8 [+ |& C    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
1 f7 L# R+ J. U3 |1 E( f% ~0 w}9 a4 [/ w* r/ N. c; `0 u& N
0 k  P9 ?  V- y7 l
/****************************************************************************/0 ]+ V* h1 d! {$ u$ `9 m
/*                                                                          */
0 F8 M) `4 V# W8 _' S6 J5 _/*              PWM 中断初始化                                              */
; l+ F' `: x  L9 j2 H4 i) V/*                                                                          */. Q" U) B5 U0 A4 d& P
/****************************************************************************/
7 I" ^* u; S- cvoid PWMInterruptInit(void)9 q8 T" O8 b( X9 b% o9 V6 M
{
. x. p, L4 }- w) b7 m" y        // 注册中断服务函数
7 b8 I- f  W/ {        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
; g9 @  _; c+ M, O        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
% n% }: s3 C' ]/ W/ L# ?4 c! H6 U; h& D- |, I/ A
        // 映射中断
; A4 p% z: P* _        IntChannelSet(SYS_INT_EHRPWM1, 2);
, a' g0 W! l3 J/ ~( H! g        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);9 T2 J! U) Z/ w; R

4 M: H$ G2 G/ J2 J8 e0 |% h4 C) @        // 使能中断
3 \7 B2 M, a8 ^) h        IntSystemEnable(SYS_INT_EHRPWM1);
& D; t9 d2 b8 ~- Z4 Z3 y        IntSystemEnable(SYS_INT_EHRPWM1TZ);4 M3 {1 j" z6 A
}5 Y4 T" r" Q4 S- C6 R5 F8 S" E' m
/ w  @% m6 s, y
/****************************************************************************/8 `) G: I( d; @1 {1 m* o- F. W
/*                                                                          */. k0 u* |& o4 _* Y3 j4 V' [  e! Y
/*              ARM 中断初始化                                              */; g- N# L: h' J4 z& y- o# Y5 B
/*                                                                          */
+ d% g% b- n! S0 W+ S9 ]; M/****************************************************************************/) T$ D* m  u6 z( V& p5 E
void InterruptInit(void)# A# B( i1 ]+ Y( d
{
6 [9 ?, Q* c  S4 j5 ^1 f        // 初始化 ARM 中断控制器
' q; S1 L8 k1 P3 |& m2 ?        IntAINTCInit();
' a# p9 N- W7 o+ |  A4 ?0 }* p0 H) T4 {- h1 L* W; m: e0 K2 Q
        // 使能 IRQ(CPSR)+ R& J( c  c: D$ p6 W6 a
        IntMasterIRQEnable();
+ H% c+ {9 h+ x. O8 j9 _% L* f
5 O" C: U9 }, ]5 m, z7 p        // 使能中断(AINTC GER)
' E0 \, q! V) R0 o3 t( ]        IntGlobalEnable();% J: j% }* z- G; I8 g/ L! ?3 G

7 C4 a$ |: Z1 T7 [        // 使能中断(AINTC HIER)
0 t# \/ j: H0 \# I0 w' L        IntIRQEnable();! y$ B. k, [; T8 q; v  V
}: s1 F4 b1 j! K2 e5 x! P. l& q
. B% e8 o  |. H# T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 03:53 , Processed in 0.046804 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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