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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
  C( P4 V( I# z( E
分享到:  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波。我们有相关例程,请参考。) S- q4 t* G6 R1 Q6 {# U: F  C! \

本帖子中包含更多资源

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

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 | 只看该作者
/****************************************************************************/% \/ C% H  z, i% o) O. b
/*                                                                          */7 d4 T; W" d. o) g! ^. _
/*              中断服务函数                                                */2 Y, i! V3 F" p* C/ l
/*                                                                          */
6 v; r% ]+ h0 ?# t/****************************************************************************/
- f+ W4 ^; ~. L7 e% ~- [- L# O# v, Lvoid PWMEventIsr(void)7 O3 ^: K. d7 n
{" ]) J6 O: u: Y9 u* j( i
        IntSystemStatusClear(SYS_INT_EHRPWM1);
/ Q' s  A2 W. e4 u
& {4 B& O, T. M+ Q    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
3 H0 v8 ^, f. R- z) u8 h}. _( |9 [) O, S: X5 d, Q) p& |
& m4 ?0 j& s5 t* I$ y4 Y
void PWMTZIsr(void): Y. D9 @+ J7 }. B6 Z5 r3 b4 ~0 |
{! M/ d4 ?% k, m( F. [$ p. A! O0 N8 {6 \0 S
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
9 r  F; o& @. u3 t- s) H* e0 y- m8 F. j6 b1 P# T2 x4 u
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);% T: ]+ i; p% q# S
}% K& A) t( Q9 m6 W- U" L' F
# K9 o: |4 Z9 h& h
/****************************************************************************/7 _, G1 N% w7 O$ }* {+ n, x2 z
/*                                                                          */7 ?8 G' A2 C6 r) x  ]
/*              初始化捕获模块                                              */* W. r. c: L: V0 ?
/*                                                                          */
5 T0 Q/ o/ H5 X/****************************************************************************/
9 A, Q+ s: Z9 c  O6 \8 c9 {void ECAPInit(void)
- w: }4 @6 B3 X' |) a$ j{
0 F5 q: f2 z& ~" j$ I- Y' n! l" T8 o        /*-----设置 ECCTL1-----*/
. \: o# J- E& g/ Q7 |' h        // 使能CAP寄存器装载
% d8 }/ Q; f# b7 w; k8 x) P( T/ h        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
$ ?$ t4 L; E3 S% a5 N5 M        // 设置预分频值.5 \3 F3 ]: Z' h) c
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
+ l5 |. @7 _- d1 W# k3 U" A        // 上升沿触发捕获事件" u# W( A- M% W8 B+ Y2 C4 F! u1 F5 }
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
* m" h, m) P6 ~' M        // 输入捕获后重新装载计数器值.
4 z7 U4 j8 e/ w+ o        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
/ r. ~: ^4 w1 z; t( J, G! c0 I! p  c6 I- r* @$ Z
        /*-----设置 ECCTL2-----*/& J- J% ^4 C1 u/ z
        // 连续模式
5 `- D6 C9 S* H: k+ g2 G        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
2 ~: r6 D' ?/ }' u        // ECAP计数器TSCTR持续计数
0 _/ C/ f7 k7 Y, V* n; O7 E$ ^0 a        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
& q) {, `9 ?6 g! Q1 C  Z        // 禁用同步输出和同步输入6 G1 W& E. F! z; Z+ Z
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);, B. T2 e/ i+ ?9 D
        // 配置 ECAP 2 为 CAPTURE 模式& ^" u* `8 Y4 I0 Z9 Z' S
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
$ B* i; W- O5 m0 B+ L& n- m2 A. [0 A1 D; n6 {7 X, }- A1 C
        // 使能中断8 f) @: b* R' L% z' W$ D6 n1 q6 {
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);, w0 w+ ~. i: U" H; O7 z- P0 i
}2 v+ y) s) b/ M+ k  z2 o

, t2 o6 ?6 A& b! ^  K/****************************************************************************/8 ~" Y  e/ y8 h& I* l3 s
/*                                                                          *// V+ H. }1 ]/ |# b
/*              取得捕获结果                                                */% f1 \/ C; l2 I8 c
/*                                                                          */
7 R' Q4 n6 F$ g7 H) L. U$ I- `" ]/****************************************************************************/
* [# |: A9 u8 M$ `8 hunsigned int ECAPRead(void)+ e* i5 E- ~$ d8 ?" _. ~, s
{
3 [7 Q2 k0 o5 P" y8 E. r, m        unsigned int capvalue;: W6 o7 n# G1 a( v# @; h( u, U0 m- }
        unsigned long frequency;
* ?' H9 u" P; ]7 h6 Z
1 U. w0 A- B4 M. c& X! `        // Event1 中断标志
. k: f# w- D6 q( B        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))- R( ~" R8 M; L" r0 h1 l2 ]
        {, Q/ E: s8 c- ^- G& k2 p: j
                // 取得捕获计数- [* l& U0 i4 H; \8 g
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
6 `* y# D8 j, {4 z  Y" v                capvalue = ECAPResult.cap1;# c1 {3 h% \$ ]: A

: i7 R+ C4 z9 U; d( x; P                // CAPTRUE 模块 228M 时钟主频
  M% B3 k( e0 z0 W. K3 Y                frequency  =  228000000/capvalue;
8 w& V5 M6 G8 X. @) \# ^                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
/ f# f( Z* V3 V# w% W" L3 q! s" b4 Z$ K9 `6 O4 |: R  b
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
; r4 [# ^$ e! A' `5 B//                IntEventClear(SYS_INT_ECAP2);
& \: j7 R$ ^& y7 A. m        }. `2 h5 t- `8 C3 W$ U; [! h
        return frequency;# f  S. M2 v4 z4 n4 c" t0 \3 ^
}6 _5 Y  K/ ~7 @& v1 S
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/4 F" |$ |( U+ e! g' h  H$ l. `
/*                                                                          */
  x' R6 F7 }. i" k( P$ @" x" O/*              宏定义                                                      */
: S0 Z% z/ H# k; c/ I( v# D; h/*                                                                          */
/ ?7 p- h% |5 k5 X9 B+ ], q/****************************************************************************/
$ R' w5 Y$ Q/ i// 软件断点
% I6 l; h. a1 r9 b# x2 D/ L. I1 ]#define SW_BREAKPOINT     asm(" SWBP 0 ");. H: v" }0 |- u/ @* d( t+ H- \+ U  P, s

, L2 l( `7 s; k# i( q// 时钟分频! H2 T8 o! _! z1 _+ s" M
#define CLOCK_DIV_VAL     228$ u- ^# I1 y& n( x

9 c* P8 s) M+ x8 F% r6 |3 b/****************************************************************************/
/ |/ p0 _( H8 ?& y/*                                                                          */0 A  o3 U/ X/ ]  S1 [
/*              全局变量                                                    */
, l; M& a  f; |# p( h/*                                                                          */
+ y" m- m8 U  v8 j. u/****************************************************************************/6 r5 g+ h; }1 z
ECAPCONTEXT ECAPResult;
# ?# u. c& B* d# x7 y4 x+ d9 G
3 D! p9 e$ K! X. f- c8 l$ I" E/****************************************************************************/
) ]/ B( y7 N& f2 K; D2 r" L& _/*                                                                          */9 R5 v3 B: W* L* v
/*              函数声明                                                    */
% O! ?! M! _5 _2 X0 `/*                                                                          */0 H* W6 @% {" Q) w# Q. p( V
/****************************************************************************/7 ?( l' ^- I4 n! z" B9 B7 j: ^! b
// 外设使能配置
" m8 N9 ~. v2 ?. Fvoid PSCInit(void);
/ Z* S/ q, E; ^. g! k' h- H8 i% M
- `( S$ X4 \1 z4 s1 J9 \# P5 Q// GPIO 管脚复用配置- k# X; u) {- D
void GPIOBankPinMuxSet();
# ^. G2 T3 V( z4 q0 j: m5 t( c
: e4 J/ j4 h; g3 m/ e$ r' _' j/ f// 产生波形5 z9 r8 h9 F0 Z0 j* F
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);, h, ?8 ~- c! C# T  D; ^4 q
void ChopperWaveform(void);
. v- E# {7 L& A' d& E; f
6 N1 ^* q' k( X8 B// ECAP初始化和读函数$ V- E9 F, F. Z: `
void ECAPInit(void);
/ B! g0 x$ m/ ]) ^: k% l  {, ~8 Punsigned int ECAPRead(void);
0 p% X. u5 j. g
  I2 l' ?, Q+ y3 Q//ARM 中断初始化$ u9 N, v- Y% ?! C2 n
void InterruptInit(void);
- N7 v. w0 x$ D1 R. w# Z0 F7 n+ V6 W4 ?$ W/ Z8 P  _2 |6 u
// PWM 中断初始化" H0 [* D/ ^, S' e6 S. d0 ~" @
void PWMInterruptInit(void);
6 T+ c0 V/ W) L6 [: Z5 q  m// 中断服务函数
8 T) k' r$ j7 }2 O7 ^// PWM 事件; c/ b) k+ l! n9 f
void PWMEventIsr(void);
9 x# D/ d4 B7 z! d/ \* ], E5 P// PWM 错误控制事件
! [4 ]( u( a& `void PWMTZIsr(void);
; l. m, ?+ [7 N( E) _2 |# A; Q! j( _
/****************************************************************************/
- I7 E( s0 @3 P) n' U/ N( g/*                                                                          */  N- K6 C( h* ~' ^' z, D
/*              主函数                                                      */0 L" v; S* e5 N1 |& X4 j
/*                                                                          */
/ |7 J! L6 z# R/****************************************************************************/
- x# `, L* W5 ~3 E, nint main(void)
* x% [& S  k) E' c- k{4 V. S, L# q2 d/ E
        // 外设使能配置
. x7 g1 c2 b5 p( P' ]        PSCInit();/ ?$ y7 k- @+ l7 R  s7 z' d
5 k5 `6 b  _, A
        // 初始化串口终端 使用串口2- A7 I9 S8 D1 b! Y
        UARTStdioInit();- B( M2 Q' ]! B
        , I) V2 H% j# S; s
        // GPIO 管脚复用配置
' A& _8 @" v" j        GPIOBankPinMuxSet();
& q! G' a% q5 _! ]7 x1 i+ _' z  F# J, U& y
        // ARM 中断初始化) W/ p) ^6 _0 j* b3 x# f
        InterruptInit();
3 `5 m' k) m6 u  x. K4 Z
( `9 M) ]6 x. S9 S6 c+ [        // PWM 中断初始化9 p7 E0 s9 J9 g* v' L8 N
        PWMInterruptInit();! c& ~2 d5 @% {8 z

3 T' x; D' x9 `. G0 ~3 \" m$ F        unsigned char i;6 e% U, n7 K3 n* ]$ c9 F7 X
        unsigned int j;- o! F- {. _1 x* J0 M' A2 q

0 O! s# ^; f6 M. B" Q$ u        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
7 ~$ {* G9 W7 n; {4 b, X, U9 J, H" i) P3 c' N        UARTPuts("------------------------------------------------------------\r\n", -1);
9 q- ?. O& t- P& M& H: F3 d: A- s) w        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
- C5 l+ b& \) p: y        // 产生波形- S! ~& g3 W4 @5 T2 K6 [* s2 h
        PWM1ABasic(25000,50);. y; ]% \/ Z8 A) B! L9 o' s# t

7 d+ T$ _( p. U4 K  R        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);0 D) u# T+ Q" \+ x' R& L4 J* y+ G
        UARTPuts("------------------------------------------------------------\r\n", -1);& H: o# B1 o. x5 q9 W' J

1 t" j! V( n% a0 I( j3 g& K( j+ q# q5 h. S$ x+ n% i% A

+ G8 X# a2 a- S! J        UARTPuts("------------------------------------------------------------\r\n", -1);# ^/ K8 S* S4 h+ I3 Q) u
        UARTPuts("                    C6748 ECAP Test\r\n", -1);) M: e& G$ |- M  O2 f
        // ECAP 捕获初始化) t  F0 h" S& h+ Z! Y$ Z* M. b
        ECAPInit();# u$ w( E- i- ^( x) C7 A6 E& ^" T5 u
        UARTPuts("Initialize ECAP.......\r\n",-1);; B+ t! h* y2 o' I* ?- ~4 v5 |& ]
        for(i=0;i<5;i++)0 \" _1 T( Q* R0 v/ v  E
        {
' \) m( c! V! ]% G" o                    for(j=0x00FFFFFF;j>0;j--);            // 延时
: @! c5 c4 X4 o; m& G' l0 B                    ECAPRead();
& m, q+ F2 j2 h8 u* v. C        }$ U! E. m6 n- g9 q* c* B2 _' o
        UARTPuts("\r\n",-1);
  C$ `* u" v! @2 W        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
, b8 J0 u  t9 `  ?& E/ @        UARTPuts("------------------------------------------------------------\r\n", -1);
) i' o1 s+ q- d9 f8 V$ D2 R3 U
        // 主循环
% L/ \+ i3 j, s3 r/ f% U        for(;;)3 ~% P0 a& R5 k# ~$ X+ r
        {
8 W2 N, A- |' D+ p$ j& H3 ]7 c5 J) l
        }% U1 {$ \: q3 h5 ?& O# Y! r
}. G& \% f. v% r* V2 f4 u: R

6 w2 S9 K4 U' @* G$ i% q/****************************************************************************// q7 U3 b3 Q8 {: I5 t7 F9 Y
/*                                                                          */
2 M2 v& q5 B5 d4 `. Z. n/*              PSC 初始化                                                  */
+ Q7 L4 M; s; Q: T$ Y$ p2 Z* F  J" I/*                                                                          */( A# V' i& y* J  h5 u
/****************************************************************************/: s. T0 ~1 k2 d% I8 N0 z
void PSCInit(void)
! K, y4 ^' a0 z2 e{8 ]$ u7 c5 V. N1 a3 F0 Z
        // 使能  EHRPWM 和 ECAP 模块
( f% X1 i9 M3 b        // 对相应外设模块的使能也可以在 BootLoader 中完成
$ N" I) W) A7 R    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
6 R% i- k% t  ^) t    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);& B9 O2 F. m& t/ p% X
}
2 X, ~8 v# `* C, g0 D% y# z/ G( Y- V  e! @$ o
/****************************************************************************/
" U9 Z. Y' ^. E/*                                                                          */
' L3 l' j3 r; k/ M/*              GPIO 管脚复用配置                                           */
, H/ W% p0 S; x1 y" o/*                                                                          */
( k/ j8 t, k7 H7 l& x8 w' a/ h4 Q/****************************************************************************/
: p  y4 }" B: K3 }7 P. evoid GPIOBankPinMuxSet(void)1 J9 b/ v" w: R- O. z8 E; f
{
1 g" @8 Q- E5 D& g        EHRPWM1PinMuxSetup();. d9 y( u8 y& U9 [
1 J2 n0 ^  B; ~+ _
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)/ o3 s& k* J. S. ~5 b/ V& Z+ o
        // 作为捕获功能时管脚方向为输入) O8 y% E5 B+ s4 a2 O! v, f, p
        // 作为辅助脉宽调制时管脚方向为输出
! I  R6 D/ d7 @% U1 o, I/ O    // ECAP2 / APWM2
9 N* l8 C: h" x9 \3 H+ ]8 }- m        ECAPPinMuxSetup(2);, ^2 J/ K. y1 O( `) `1 N! M

4 Y- i# V' z9 w: v3 |$ I+ a        // ECAP2 / APWM2方向设置为输入% d! {( S8 L0 S8 h2 r- `6 s* l+ Z% d2 W
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]# X, D! E: P" r' P- p# i8 @- {- _& h
}+ [/ J* u3 X; C  l! a+ \9 I
( }, r  I, K1 k3 q6 [
/****************************************************************************/: {( z7 l4 S2 ?- c# Y2 F
/*                                                                          */
7 e' S7 h6 h) w* ?4 u: Q: _& P/*              PWM 输出波形                                                */) S! b. J& T8 Z/ Z* q# }+ B: X/ Y
/*                                                                          */
  ?2 ]1 L# K$ F8 [/****************************************************************************/
* M' r7 i3 }8 a; tvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)) N- c; C  ~+ C. b
{
+ Y! W! W$ T( r$ s) ]    // 时间基准配置
3 w( w0 i' Q8 j" R8 i8 f: n    // 时钟配置. _2 G2 ^. S+ q1 F- b$ m
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
/ e! F! w% ]% f1 ]; b" m8 C" C# Y: b
    // 配置周期& Y9 y0 x5 O% B0 ~' |
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
/ X. S* s  Y+ S                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
: r) T. q' f+ s4 s6 ]' |1 I7 ^1 @$ i% K' C/ ?0 n
    // 禁用输入同步信号
# P# ?. I: V2 G7 p* {+ K    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);3 y' T" a4 v+ G; N( J8 J$ h$ g
9 c+ M1 ]% O4 w& R
    // 禁用输出同步信号
2 u# k% e! b! d+ j, j" z    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
* R& l1 a, [& @3 d7 e$ _1 }, D
  \0 m0 ]0 ^/ n    // 仿真(DEBUG)模式行为配置
* n1 c. k6 R- V' G% R# e! l    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);3 l# x. C  F! v2 p& V
9 c  _: }# g1 p
    // 配置计数比较器子模块
/ ^7 b( _! g$ @" R    // 加载比较器 A 值
/ ], u# G# T% m# e  ]    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
! v6 |4 [5 J4 q                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);6 G7 r% |$ Q. P% p9 o
# @- r! @* R  h' X- E
    // 加载比较器 B 值# z2 u4 C; N3 i. q& N
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,3 Z2 E! _) j8 w8 m
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);0 q+ R" E: s( T2 ?8 j. c9 P

) P8 D2 G. l/ B: q4 N* ]    // 功能限定配置(输出引脚触发方式设定)6 D+ F  Y" ^2 ^
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出) |4 {' A2 ~1 h$ G7 k8 Z1 }
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
3 _; u6 _; o. X7 n1 B                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
& \$ y  P: Q  b1 N                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
8 w+ L+ c. C( R" L. [) i" I) u8 i: C: R
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块( w9 \* c' k2 ^4 y9 d
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);& x  |* E: a2 X% G3 ~% i

/ T& p$ f$ t; s0 I    // 禁用斩波子模块! _5 l+ K; v, X- d% L
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);4 I/ R6 v+ X7 `, J$ ^

% }) g8 o7 n( j4 J, Z    // 禁用错误控制事件% N& s9 A: W, ]8 G4 ^& F& `
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);; M( @& n$ g" ]0 \: j
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);$ X' m- W& e8 u1 R' f) F

  i7 @; }( u/ Y: d/ q    // 事件触发配置  C! r( t8 n4 d7 K
    // 每三次事件发生产生中断
9 v; f$ _# u; K5 e) i. _+ B    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);) j# A$ v# J. C: ^
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
& V: k. k1 G$ p) W- K    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
1 }, N9 f" t/ G2 H3 b4 a    // 使能中断
" y/ v) v* o& k+ D# g* q    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
4 g5 s6 j3 U1 |# ?  [+ A: ]( g6 b5 e
    // 禁用高精度子模块
* e7 X- H3 }- i2 K    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);6 A3 A" A3 z; D, m4 S5 J8 A" o9 R

& P0 z5 o0 G3 T' |- K, I8 h7 x5 U    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
0 l2 i9 _# Z! N8 A0 W}* m) |' a+ v7 G: {' d3 n8 K3 K
7 N8 t" ?6 o  n, ^% b5 z1 z
void ChopperWaveform(void)
) }3 _8 |8 ?: h' B" M{+ n, h( Q2 i) n( z
    // 50% 占空比% F" G( z! h9 F
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
$ r$ M5 ^- I/ c5 V# t& y! {    // 4 分频. E' h' [" e1 m' M/ ?
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);* w9 n2 F4 W4 H+ G% G" b
    // 单个脉冲宽度; i$ p) K3 `' [
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);. P& g, R1 F& o9 F8 I8 Q; y
    // 使能斩波子模块
4 ~, e) W8 u* C$ C    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);) e8 U/ b( O; }, M
}+ u1 \( D: Y2 x6 {
4 j: u! Y0 s& x! J  n! M
/****************************************************************************/
' ~3 Z% K# y* y3 M7 k0 }% g) n/*                                                                          */+ H( i: v3 ]+ w# }8 Z" e' D$ c( H
/*              PWM 中断初始化                                              */7 V/ h( }4 r( e% M) z
/*                                                                          */
1 K6 f. k- w% f: K5 n1 ]; O1 i/****************************************************************************/* ^7 `1 O% s& l6 W0 A$ W# y8 f$ [7 U0 E
void PWMInterruptInit(void)$ A: X- Y. {7 k3 o- A+ M
{! y& ~% \* m  K% T; O
        // 注册中断服务函数! c$ R/ m/ b* \3 l1 S
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);$ w# S* w2 u. `5 B# M; I4 J  p, B% ]
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
4 X9 S' Q4 X, a4 `7 n
# z# q% }6 k  O3 ~* F2 N- ?; U5 x) M        // 映射中断  |* ]: p0 F( x8 t
        IntChannelSet(SYS_INT_EHRPWM1, 2);) I1 j3 Z5 I# j' u- i* ?* p
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);- C5 \0 u% x# Q/ X8 i- _

3 k2 u$ g% {( W5 P1 w6 X7 N        // 使能中断
, ?8 D3 i5 \1 }& O' \2 \        IntSystemEnable(SYS_INT_EHRPWM1);
) E  W8 l, c- N& s" w# [        IntSystemEnable(SYS_INT_EHRPWM1TZ);( \* h( @- q6 ]! W) h) U% A
}' q. \# @4 Y% m2 O
; G- X; e- `  a9 m8 O
/****************************************************************************/4 R2 P% @9 ^- I( D' J- h6 C
/*                                                                          */3 A. z6 K  s/ j( j! ]
/*              ARM 中断初始化                                              */8 N' _# _- I& V9 p+ p% H; ^
/*                                                                          */
' R# F: r" ]2 e, A  f. K7 A/****************************************************************************// V3 e+ U' Z$ l( T$ j
void InterruptInit(void)& m8 x( w/ n1 k/ C2 n. a0 s, k6 ~" `
{4 l3 `  P0 f0 K7 Y" ~: X" J7 ]
        // 初始化 ARM 中断控制器
4 W3 I$ C# D+ P5 @% W        IntAINTCInit();
# r9 c" ?8 n( N3 S6 W9 P, I4 B9 _5 `7 R1 A: g3 v9 Q
        // 使能 IRQ(CPSR)
* d* y3 _" I/ `$ _        IntMasterIRQEnable();
7 C* Q3 H( R4 k  q- q8 `/ s
) ~" t, Y& e. n2 W1 {- p- [        // 使能中断(AINTC GER)* |: x/ ?; R* @
        IntGlobalEnable();% T5 q- O: |: l; ^" [
- b$ e8 S8 c" I' Z
        // 使能中断(AINTC HIER)  O8 S) w' q/ P7 Q
        IntIRQEnable();9 U  D0 B3 q- R. J6 a
}
# X( g! s) w: ]/ G+ f1 p, [" s
6 k2 D2 ~) ~/ x' L
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-17 20:01 , Processed in 0.048455 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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