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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家, H" @( b' R' j7 w7 ?( ^5 K) d7 o
分享到:  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波。我们有相关例程,请参考。
5 U& I0 K( ?; T9 m( `

本帖子中包含更多资源

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

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 | 只看该作者
/****************************************************************************/0 s! d  V9 ^8 }
/*                                                                          */8 ~. t& d3 y- B
/*              中断服务函数                                                */) m, C# i7 z6 K
/*                                                                          */
) b1 m6 i% i/ t. j! C1 s3 k; w0 Q, }/****************************************************************************/3 e$ Z, a5 R0 g5 F. Y" ]& _
void PWMEventIsr(void)
. ~2 K2 G8 C/ D* R{
8 x7 J: g& Y8 }        IntSystemStatusClear(SYS_INT_EHRPWM1);6 S9 x" M/ \# b$ t* m1 w

) R3 L' @! W0 s! b5 i+ A$ H( {/ O    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
" I0 Y# V! M+ y  @( W}  k/ h# H, s9 W5 q" t
" ?& F& y0 F9 k, M0 v! j9 O
void PWMTZIsr(void)
: ~% J+ }* w1 h3 q& {{
$ \( j) Z; b5 y: J6 T        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
3 t: E3 n$ G1 M# Y+ A. Z6 T7 |+ |$ z8 T! v* w
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);/ ~( Y7 m/ t- e* s5 _, q! X
}, D; I+ V1 [. R8 Y/ K' q
+ w& {- X( P- c! Y. `# I" p6 c0 e
/****************************************************************************/
4 A& I% @5 p, R( ~/*                                                                          */
: p6 [  O5 ~3 h$ H; {- {) a/*              初始化捕获模块                                              */
/ s6 q4 b! Z1 X9 l: \3 M/*                                                                          */) n6 V/ ^  j& Y& P
/****************************************************************************/
  L8 E- s: g5 Q* [( Rvoid ECAPInit(void)
  p/ g. G, r: C- R8 E, t. i{" x1 N, T- U4 ~% [8 V% l
        /*-----设置 ECCTL1-----*/
# x3 _# o' e+ x. C& z: K3 q. k+ d        // 使能CAP寄存器装载
" n) X9 m! `" Q3 E$ b+ \        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);; e% l( h3 k& U- |" z4 O1 }7 f
        // 设置预分频值.
. q+ L# x) J* _' D        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);2 }9 Y5 u6 R7 R5 N
        // 上升沿触发捕获事件+ X7 p4 n% Q4 f8 e  Y
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);0 [+ u, |6 f) y
        // 输入捕获后重新装载计数器值.2 t& C- s2 ~1 c8 y" D0 a
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
2 U8 L6 x; z- ~2 G7 d# W' A, q, z8 f! s5 f
        /*-----设置 ECCTL2-----*/
" V3 [$ c( V0 M* O        // 连续模式, ?  R0 v- O7 k6 _
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
* Q+ Z! }+ |* F0 O        // ECAP计数器TSCTR持续计数; C, Z7 l% I+ p1 X; _3 _
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
3 Q8 x! T/ K* ?, @6 g$ H        // 禁用同步输出和同步输入/ c% t, Q2 W8 Y% E- Z
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
. D% O( O+ ^* n1 N/ E& r' ~        // 配置 ECAP 2 为 CAPTURE 模式
/ t! f8 k5 A: s3 m2 P" |/ x& z- c# M        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
3 Z7 R$ a( j3 }5 k+ h  |) S: K5 n: X. Z0 _9 f) w
        // 使能中断) ?, S! H: X# }) y1 A& b/ g
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
2 Y" b4 l/ ?/ n}
7 O4 K* A# k, u6 D1 ?9 `, e& e, s9 k- L3 Y8 q
/****************************************************************************/  m  r2 z  u9 C4 x7 ~5 ~* }2 y, ]& R& ^
/*                                                                          */9 o  i6 j2 Z( p1 H
/*              取得捕获结果                                                */
2 b/ }! ?% M8 |6 `6 D, q( |: H/*                                                                          */
  |4 G5 I; ?, m& v/****************************************************************************/
0 m; t0 r7 Q+ J( U4 xunsigned int ECAPRead(void)$ u. n% p, T9 o  H+ i# v! n$ j
{8 A* M9 N' U+ A5 ~5 P) N& u
        unsigned int capvalue;
7 p/ S1 L1 x, r- v( w! }, k$ a        unsigned long frequency;. G/ C* ~0 k1 R: x, M
, U% n: s% K2 S2 b) J6 u5 z
        // Event1 中断标志
$ k* L  v3 w$ e& P        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
; ^: {8 C6 ]0 |$ ?5 @        {
! E3 M) w9 Y2 Y2 f7 s                // 取得捕获计数
0 e9 C+ j7 X5 _6 s                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
- x$ _$ l) O: B# b( e. Z/ _3 n  w                capvalue = ECAPResult.cap1;/ d2 g/ }6 U4 Q( |0 z" G( g

  K, O$ `& Q, S% l                // CAPTRUE 模块 228M 时钟主频  b3 l: m' B9 r5 d
                frequency  =  228000000/capvalue;, W' j* y7 W8 ^3 t, Y/ K( u! ~5 s
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
9 o3 x# y% [0 O( m* A4 f* d/ o8 G5 \" {
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
  I5 M  x* K3 P6 C2 u6 V. S//                IntEventClear(SYS_INT_ECAP2);3 R" b1 ?$ A  C: b
        }) t  n& ^0 }. H. k' e# Y
        return frequency;
9 L! d' P! G  n. ^% q6 i}
) Y, Z$ a- w. Z: ]( J# c, T
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
$ \/ A& c' @0 q/ e5 g# C& W/*                                                                          */
& A6 N+ z8 E) g* v. l4 y/*              宏定义                                                      */
/ S6 E6 U3 ^  V! f/ n( Z/*                                                                          */
6 r8 O: Q( h0 }- t/****************************************************************************/
/ ~" o3 Y% H2 B4 V2 N// 软件断点
2 W+ }) w2 |. Z5 b4 f#define SW_BREAKPOINT     asm(" SWBP 0 ");
+ ?/ g1 _2 o7 {; s
5 k4 o+ D3 ?  C3 l# M// 时钟分频
: s& z% {- ~8 j5 |4 k8 q+ e9 z#define CLOCK_DIV_VAL     228  A  I, O; T  s; I1 S% h3 z/ @1 a
4 B. R# r7 _+ u0 H) t2 Y
/****************************************************************************/  `2 a+ D) O- k3 L. x
/*                                                                          */
4 `; [3 k6 x/ V! \/ h  k/*              全局变量                                                    */8 ^; d. |3 I/ _; N
/*                                                                          */+ n3 n$ A# G9 d' ^# E8 V
/****************************************************************************/
& ?7 p( ]& Z* }" Y$ ], WECAPCONTEXT ECAPResult;
6 \; X+ y- V2 c8 b+ S+ s) @9 O2 L# m& F, g& I; b$ X0 C8 A
/****************************************************************************/  b& V; {1 z8 h$ \$ H
/*                                                                          */
  g$ v1 |  c4 X( |/*              函数声明                                                    */- H. f, q4 i- A7 T9 n$ }
/*                                                                          */, R% V" u6 j4 C+ Q( y5 n: w
/****************************************************************************/
1 d$ b! y* `& K. f$ I+ J# N// 外设使能配置
5 A1 c! j& D: @+ u/ tvoid PSCInit(void);1 }( h) ?& m, _/ R5 w
! z+ K2 m1 Y  u* j0 Q
// GPIO 管脚复用配置
$ N+ y. x" ?2 G  v' C, k. Zvoid GPIOBankPinMuxSet();
1 I/ i( b  @. V. s4 i" v+ I( m
// 产生波形
. x3 r- U/ O1 `2 G4 o. Cvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);. H  F' B& j+ U2 z7 n' c
void ChopperWaveform(void);
2 u6 D# U4 j- O  l! Q
$ R" }% @$ I, ]) T+ Y! A// ECAP初始化和读函数
  u8 n8 V  e$ b" k3 W, jvoid ECAPInit(void);
7 ^( G$ h( z5 R% junsigned int ECAPRead(void);* c* F. M5 |# o" }" B/ [+ B5 [# B
% P9 P4 K/ g6 h. M* X5 I
//ARM 中断初始化
# b; u7 V- g/ {# F! b3 fvoid InterruptInit(void);
$ ]. P0 o$ a& h7 `' s; ?3 I2 Q- s. d& y5 t( r$ P: R
// PWM 中断初始化
' Y: H6 V& T3 |void PWMInterruptInit(void);6 H& c( w7 ^5 [. D0 K. o! A
// 中断服务函数, S# n6 O3 c$ X8 A! S
// PWM 事件
# G! h( ]" c( L$ R# pvoid PWMEventIsr(void);
# |$ A3 n0 O- t$ }, _$ |( d// PWM 错误控制事件
" `: |6 q* s6 u" L) e3 e9 G+ gvoid PWMTZIsr(void);
9 [) ^$ q3 C7 K% P5 e
7 z" @1 N' A* u/ f/****************************************************************************/
2 R1 p2 H, d- P! y  x: q1 p/*                                                                          */
6 q! T$ l7 \* |1 U. i$ J/*              主函数                                                      */4 b- s. ]* r! g; J" i% Q
/*                                                                          */
- J9 T& h& V3 k$ a" Y6 D9 n5 e/****************************************************************************/
* i, g" a0 [7 T, V9 Qint main(void)
- Q2 V# G4 k- |- h7 H{
4 O: Z0 T8 v  B! e        // 外设使能配置
/ g; V+ N7 O  D/ C# y4 \        PSCInit();* w0 {; o: `0 K% X6 q
4 ~  U2 _9 b+ N) l/ w
        // 初始化串口终端 使用串口2
+ A9 b( E) U- F, G  f  f( V        UARTStdioInit();
$ s/ S$ ]( I/ R& H- y7 G/ h: V       
$ F; D% h8 x$ n        // GPIO 管脚复用配置3 j; Z* q9 |2 e( o/ G
        GPIOBankPinMuxSet();2 _7 }+ E* Z  r" w0 O

$ ^' C; X: t! g, |. Y( r' D" Y        // ARM 中断初始化) s5 Y. c/ V3 V! @8 C" Y, M) b
        InterruptInit();& b( l- Z  B: s# B3 t& r9 i
9 n  I1 E& _( L( V1 j
        // PWM 中断初始化) Z6 h/ x" I# C2 o4 W$ T3 ^. c
        PWMInterruptInit();0 T* Z( C, |# i; m

' y6 `8 v! n+ `' o$ I        unsigned char i;2 t8 J# S; P3 N2 I8 s/ i2 H( E) x, H
        unsigned int j;
5 W3 ?8 b3 j+ b0 C& Y4 l* n" ?
( S& v; S3 N* c6 G* c  O3 `/ ?        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);2 K/ ^; Q" j* ^: p
        UARTPuts("------------------------------------------------------------\r\n", -1);% L6 q* T7 p, x
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);' m- q. X( k" S0 h. f8 l1 T
        // 产生波形1 Y5 P# s5 U! P! {) j; @
        PWM1ABasic(25000,50);9 p! R7 A- k/ G+ G
6 ^7 F% Q: E- B0 y
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
+ S( ?3 H9 ]. n' }        UARTPuts("------------------------------------------------------------\r\n", -1);
0 _8 v: G  v- S5 S4 d
3 S5 x& m8 i2 Z! V! M& I" d! J) @9 F. Y8 X* a: r$ m
7 o( y. j. w) T' t: R# Z/ r
        UARTPuts("------------------------------------------------------------\r\n", -1);
! S/ ~9 {! {6 V# t' Y9 y- F        UARTPuts("                    C6748 ECAP Test\r\n", -1);
$ p* h! m) e1 l1 h8 t9 W        // ECAP 捕获初始化
6 U) `6 q% N+ u0 A        ECAPInit();
" ~/ v% ~* P5 G; ^" z        UARTPuts("Initialize ECAP.......\r\n",-1);
! u+ T8 D* J5 x5 X        for(i=0;i<5;i++)( E% R- y  N9 T1 d
        {$ r2 z4 r" [/ M* [, J7 Y/ k
                    for(j=0x00FFFFFF;j>0;j--);            // 延时( L& ~$ O1 ]- g
                    ECAPRead();
6 J1 M8 z: y% r' j, d9 ]' O* d        }9 {+ l3 \" `. B$ H
        UARTPuts("\r\n",-1);
* }8 J' c# c; {% {( F) q        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
8 D1 m0 v! V; A% H1 J( Z3 _        UARTPuts("------------------------------------------------------------\r\n", -1);
: Q, E! f6 |9 o; o' Z/ K) q4 o; O, ^% |4 t. [6 n" c5 G. q! X% Y
        // 主循环/ u. t9 V% Q6 I) J7 x# M0 a
        for(;;)
: @1 [, ~9 ~* T9 c# z( K, b6 d        {
4 G4 @/ _1 n9 Z& G$ S! w( M8 x( }
- q! {4 }& B2 p  a. b+ o        }% S& y" S1 a# j( m4 _4 h
}
: c' w8 x5 T) A! M" c% c$ u, m% k) T! Q" T# O: T/ C1 K4 q
/****************************************************************************/
4 w0 T& R6 a) k3 D. e7 J, G" q/*                                                                          */
1 Y: D5 J: o6 Y7 N$ u8 O/*              PSC 初始化                                                  */
% i( g0 @7 A% M1 Y  N% ?- `/*                                                                          */) b6 n3 Y  o& F% m0 Y; x
/****************************************************************************/
( L. H% R3 r' `& Evoid PSCInit(void)
5 Q2 e7 v; ?& s& P8 p{
8 Z+ r( w+ N0 x( V        // 使能  EHRPWM 和 ECAP 模块
% z- Y* m/ G& @- x" ^2 ^$ W        // 对相应外设模块的使能也可以在 BootLoader 中完成
1 f* Q/ G* U) v& ^    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
9 {" o2 D! N' f6 f: R7 q$ c# [    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);/ }, ]) K$ H, k1 O
}
+ o8 d" c3 J2 Y- E" [* b  }. z# j  Y" \5 P/ S
/****************************************************************************/
, I# t, E, {- I3 o$ M/*                                                                          */6 J* @  h( _: ~5 Z3 n
/*              GPIO 管脚复用配置                                           */
# |4 |4 O) P4 R: x" M/*                                                                          */
$ {5 C! `) N8 z1 S! n- V/****************************************************************************/  b# `  K) Z4 f% P
void GPIOBankPinMuxSet(void)
* Q' \( I* }# n1 X; `9 k  ]9 o- Q{, C% S/ G7 R) \
        EHRPWM1PinMuxSetup();5 Q4 x, v& b9 _8 D

$ e) f# x+ [* V+ f4 s        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
  c. |% P: k$ B, I. v  o: n        // 作为捕获功能时管脚方向为输入
3 s, ?3 f* D. j  p0 T0 f+ f/ p5 s        // 作为辅助脉宽调制时管脚方向为输出
( @, q" y+ }/ r+ @7 V    // ECAP2 / APWM2
2 u: [  e- ]7 R, F5 w        ECAPPinMuxSetup(2);# t! y; m  t) T) a
2 }" w4 r' C$ T1 S! f5 I
        // ECAP2 / APWM2方向设置为输入4 q6 @% m7 N* p
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]  ?: D) ^- d+ ]2 e. W0 Z, {) i5 p
}  k# [6 F0 w/ }  G: K
! F) U/ k+ l' |, Y$ S3 D
/****************************************************************************/$ K( X& Q! Q: b2 X8 w1 c1 ]
/*                                                                          */
- I$ p; D% _) ?- [/*              PWM 输出波形                                                */
! U- X+ z1 ^7 G$ O1 `3 \! @/*                                                                          */! _, ]# b) p' ^# [' C
/****************************************************************************/) I, f, W, n% ~. N2 V/ N
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
' B  k0 b* L- u! p2 D{# Y2 \' i' {, \6 ?& P
    // 时间基准配置$ y# X' Q  e2 L- ?5 g/ r# e% }
    // 时钟配置
' c4 d4 O2 @9 N' d' S4 I    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);0 \; F0 y" N2 C6 v& g. U3 y

! E, ]4 |2 Z, n* M' d( R# h    // 配置周期
! S* O" H$ D% Q" j    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
% f' {0 n! C" K8 ~7 R) R                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
  s0 P3 b& b- Z; k3 U: w
7 O$ S- {* f1 C( |    // 禁用输入同步信号. X+ l/ K0 v' @  R/ e$ T! }- F1 x
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);( F; A" g( Q9 D: m0 D; [

3 }* K( I; w) W6 w% d9 N9 i4 d    // 禁用输出同步信号3 `. H+ r: |1 P# t0 i7 D/ k0 T
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);% n4 y) a. s& l# O
' y& c' b0 y0 ?& m7 _
    // 仿真(DEBUG)模式行为配置
5 t7 |' L6 t- l$ T* m    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
3 F3 N$ c4 A6 S7 P7 ~2 U+ f5 g) m! m  [8 ]2 i' ]( ]+ i' A* y
    // 配置计数比较器子模块( x4 k8 X5 k, m8 L( `
    // 加载比较器 A 值# E, Y  q/ O) O$ `
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
: y8 r+ t+ N+ F. k$ t' \# e                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);2 [0 ^6 {4 U9 A8 S9 l: m9 t

7 ^. ^+ d5 j, v! z    // 加载比较器 B 值7 M% L; n7 ~- e4 S
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
1 b. c4 j9 Y. V' ^                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* v- g+ K' m* Z- \

( [' R+ {8 l3 z. y" i, Q2 s    // 功能限定配置(输出引脚触发方式设定)
0 {: ?- p3 G  p    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出0 d% u; g% j9 G# ]/ s, l
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
- b8 z$ K" e9 H& R( Q                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
# z. a( e: [- L$ ~' t                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
0 m! G  \& M3 K2 r
! I  b- o0 }+ I! K7 _( k, s    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
* J, U- A4 J( J  y0 }* x) i    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
  H# y* s, v1 P( K
2 k! [  V, h# f/ Q1 F; K    // 禁用斩波子模块$ ]" h" b9 ~* v7 V/ {$ L- K
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);: @" y- ~/ [% \* C- V$ t

: y1 o* `# x8 l! z( v    // 禁用错误控制事件- e4 ~$ P' _( r2 K& E2 f  E  v1 I
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);! O6 X5 ?# i. o8 s5 i" X
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);, y0 j) Z' q* ]8 a$ [
' r/ d, S5 C  W1 \% M) a
    // 事件触发配置- {4 O; B  D' ?
    // 每三次事件发生产生中断
. ^6 l# h7 r' G/ g    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
# j  E  C3 E' \0 ]; F0 N    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件/ F( l& J0 |% I* e: x, S
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
# I) N2 B6 D& U2 f  i    // 使能中断
( A/ w& [$ |9 r9 R9 q    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
7 U, M3 e* }1 e" _( n0 g" U2 J) {8 w1 e; d( p/ Y
    // 禁用高精度子模块. ?5 X) W9 [% Z: k! c" Q
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);* n" q( _2 l, L1 k' T

( C' A- ?( F. m6 v    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);0 J5 w" H8 v$ q/ b. @2 ~* j4 L
}- G$ O/ }7 c$ h

6 \9 [, ~2 {4 ?void ChopperWaveform(void)* _1 s( V1 ~4 }8 w# k
{1 ~* Q) d* e& G
    // 50% 占空比
7 h) f) s2 S, L    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);2 ?. S0 ~3 \" I2 Y- c
    // 4 分频) U8 n& P* `1 X2 R
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);1 z4 m: {' V5 R  C5 q
    // 单个脉冲宽度
9 ]8 i7 ^$ e- ^0 g- q3 Z- t    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);9 a  E6 O& v7 s1 ^' }# a0 u7 E
    // 使能斩波子模块2 d$ S! o3 e; S6 @
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
, [' L3 _9 z- J0 f}
. h- [4 E1 }$ H! T( X7 t4 D0 m& I/ L* G. j0 d& W- d
/****************************************************************************/
2 c+ \' C0 _; P/*                                                                          */
! [& }) H+ |- _1 r; R/*              PWM 中断初始化                                              */1 n' i4 Z) r0 ?- I5 j3 D& c6 D
/*                                                                          */7 R6 Z( Y% ~( v
/****************************************************************************/& Y6 M& M# z7 p/ y0 G$ q
void PWMInterruptInit(void)4 o) y  X8 r$ S& x+ A( `" ~; b
{+ d8 s; o& G  e1 s  Q. O
        // 注册中断服务函数' O. A" z2 W6 f! K; q5 X: ^% V
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);# l3 H; `% x; i- F: e) F
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
  T7 a7 f% q6 ^! g& @$ M6 e, y$ s$ M
) ^1 n0 u, i- Z6 e        // 映射中断
7 D1 w; [% _  p9 c# d2 H+ K        IntChannelSet(SYS_INT_EHRPWM1, 2);4 X% O* f2 t9 s8 H! f9 W
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
8 T- m2 U, N! ]: y& Q4 U) s2 _) z$ p
        // 使能中断
$ ?  p7 x" r4 c9 d        IntSystemEnable(SYS_INT_EHRPWM1);
* R8 M) h/ r: K3 P1 @3 g        IntSystemEnable(SYS_INT_EHRPWM1TZ);- A0 x! W8 Y1 m
}
: h" z% F1 @5 u
( X+ M4 @' Q. ?/ i6 G/****************************************************************************/* j7 S2 ?6 s$ |& Z, j; X8 E$ s; V
/*                                                                          */  j& `! I: y3 f/ f( H
/*              ARM 中断初始化                                              */# y2 k/ n; ^3 O
/*                                                                          */( M5 Z$ r; @4 r
/****************************************************************************/1 X( U4 |9 p) w3 G7 ]% d
void InterruptInit(void)1 ~- p! u; B& \& w3 h) {- x& v
{
$ q. v. h$ I, X0 J' O6 d: |        // 初始化 ARM 中断控制器
8 Y+ F5 x  ?8 v& d% @( ]( G        IntAINTCInit();
: l% a4 I. n+ p; `5 v9 p$ D3 v2 V
! }) w5 P1 u% ~3 g$ C4 {        // 使能 IRQ(CPSR)
3 r  a9 r& D* v# u        IntMasterIRQEnable();; Z. S4 D1 f9 ?0 b4 h
; F6 n7 v. `8 C9 F
        // 使能中断(AINTC GER)9 n' }- O1 P( R: Z! r6 W/ V$ ]6 r
        IntGlobalEnable();
% S. H4 P+ W7 {9 _8 t* ]1 A( S$ `3 a2 E
        // 使能中断(AINTC HIER). T6 _! H, M; i, L+ A9 U) X+ S! T( H
        IntIRQEnable();
" I! e8 o/ D0 B! h: W% u; F}
4 }, C# e7 R; l9 e% m- @: P9 k/ G+ v9 s8 r
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 01:34 , Processed in 0.047886 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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