请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家3 I9 f9 {0 S$ a0 u: N, F  V
分享到:  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波。我们有相关例程,请参考。. M" o: m# l' S% V; }# F7 r

本帖子中包含更多资源

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

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 | 只看该作者
/****************************************************************************/. G: r7 d9 |7 T4 P/ J7 F
/*                                                                          */
8 n' c, p8 ]% ^% ~/*              中断服务函数                                                */
. r. ^+ H. B2 n4 t# ]  [/*                                                                          *// z. I+ \  e2 @* m# L3 ~! A
/****************************************************************************/
: X$ t3 D5 b0 N% g- A* Gvoid PWMEventIsr(void)' Q9 Y* W+ ]8 J+ n' y7 \
{5 F/ C7 s& ]3 r8 Q% m% f/ R. n4 N
        IntSystemStatusClear(SYS_INT_EHRPWM1);& y; M8 I$ r( X. h% y* p

, v( h- q* _( s! I" L* w    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);+ s) h& i% {# s5 e$ a
}
  ~/ D, w( \; q  ^3 P9 B, ^6 [4 C( \0 L5 V9 N; A
void PWMTZIsr(void)
7 V# D# h6 P! [{
& Z$ c, O  T4 v, }) q        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);, Q% ?! y' r6 L8 A+ ~! d

0 C7 ~  @! y; Z: W    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
" H4 y9 g  r/ D) g% B}; q2 R3 W3 m4 Y, M+ Y# Z6 s- N% {% y
+ }  M# ]' ^+ J0 V2 }
/****************************************************************************/
- N- z# o' T. O& Z6 Q9 ~$ O, S/*                                                                          */1 D  v; r. r7 k$ f% m- n
/*              初始化捕获模块                                              */1 f5 A2 F% h' ?, v" F3 p% P* F) C
/*                                                                          */2 l1 Y8 ~4 K( x( V  U$ m
/****************************************************************************/
: y& m  {# I0 E/ W. v+ E  {- @3 Svoid ECAPInit(void)( P( o% `, B0 V7 x  b
{0 b3 F: p9 c8 [6 p$ t0 J, t& D7 G# _
        /*-----设置 ECCTL1-----*/
" P7 |* K7 d3 w% p: ^        // 使能CAP寄存器装载' l6 m6 e9 @& m/ I* d* S% R. R
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
" s4 q. \! q/ z' x, w        // 设置预分频值.
9 x. A/ T( r4 x5 v        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
: G) P5 |" j3 _" z        // 上升沿触发捕获事件
% z! o. }0 R5 p( f' J4 w6 A        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
2 m+ i: B" l! Y- m1 o% m% v# I        // 输入捕获后重新装载计数器值." O; c$ X3 t; W3 Z4 n
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);# }1 E+ C4 B. Z) u- n$ Y$ k
# n; x  @$ n9 P+ H; J4 e% V
        /*-----设置 ECCTL2-----*/
4 J8 X1 h' M6 U! z/ N        // 连续模式6 |7 H$ O( r' z# ~& F# J# ^
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
( A: `; o4 X" x6 X4 r0 e6 @" C% D        // ECAP计数器TSCTR持续计数( @, N) {6 f/ r# n
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
1 w' ]  _3 z) ]' z' ^        // 禁用同步输出和同步输入5 e. J/ a+ [2 A/ X& m# M8 q
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);7 M8 H7 |6 w/ D/ Q( J" ^0 I
        // 配置 ECAP 2 为 CAPTURE 模式) ^& L, P8 _# w- p
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
0 h6 k5 w1 d3 y. ?+ x( G5 ]
" ^5 V0 F" w6 _" g  ?4 k        // 使能中断
4 B8 u: e( @- J; \( P* Q& K//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
% V/ d9 `! d. ?5 q8 V}
9 P2 L; H1 t, A1 G2 D5 s" z: K/ z; \$ l. _
/****************************************************************************/
$ o7 l3 P% b2 `" P) a/*                                                                          */! l4 z! Y3 q, E+ g" X/ B% a0 B5 j" \
/*              取得捕获结果                                                */
' Z) r8 V7 L9 J. j+ S+ }* t/*                                                                          */$ ?2 ~: O) p; `, y
/****************************************************************************/4 q+ g8 G3 G: S2 l$ Q" U. l/ }- s
unsigned int ECAPRead(void)
0 G% V! X  p# |$ f{2 B" }) [9 W: j) U( U
        unsigned int capvalue;
# x$ X9 h" l$ v, j! `        unsigned long frequency;
% s$ g7 o2 f6 i! @0 i8 ^/ T8 R
6 A, K( }" N) a6 f0 a        // Event1 中断标志$ Z# q" f6 X. f- x, _
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
9 o/ {0 a" s0 T. }5 g        {
) S! m- g$ T, E1 A                // 取得捕获计数
- n4 y7 _' R9 X; r" C9 x4 ]                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
% c. u1 h0 Z+ S9 H# k& C; u  o* W0 t                capvalue = ECAPResult.cap1;
' X" y5 p& @; R4 h/ K9 T8 \& [# f: a: E6 u
                // CAPTRUE 模块 228M 时钟主频
; m- j8 U! I$ p1 Y; K) |                frequency  =  228000000/capvalue;
% L6 [: o9 j) T) a' H' M' `                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
2 m5 \9 u0 Y7 ]7 r1 E
/ c* R/ y( N+ g' V' `2 S7 q                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);3 ~7 X  ]5 \5 Q' w! i% v
//                IntEventClear(SYS_INT_ECAP2);' ]! t9 Y  l+ P/ e' O7 B
        }
5 Z1 r9 j8 m, m        return frequency;
5 H# e+ H( @5 B+ X& o. z0 r" W}8 Q7 u2 c& ^5 P+ \3 @
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
* }/ A0 j! O) Y, h/*                                                                          */( v1 O  m2 `9 f) n7 _# T
/*              宏定义                                                      */
4 W; m' B6 k! ]1 R. i1 e/ V* x8 [/*                                                                          */7 j* A. t2 }1 z+ U% o% j' w
/****************************************************************************/) |: ~7 e9 ?& R! s# k+ q, g
// 软件断点
4 J0 M. d- k! p( s& S$ X' p, w#define SW_BREAKPOINT     asm(" SWBP 0 ");
5 d, n* C/ o5 L$ j
& U4 u$ b6 u9 L3 C// 时钟分频
& g1 I8 Y1 {3 R" s( c#define CLOCK_DIV_VAL     228
3 A7 z+ z- `' Q
# V3 b, g+ U1 M. l' A/****************************************************************************/! q2 g2 v8 g5 s6 F8 w- q5 b
/*                                                                          */
2 x5 \% S4 c( D1 Y/*              全局变量                                                    */
5 v, \0 x- u* A) J8 k/*                                                                          */9 ]7 e+ e) y5 F' c  s! y9 C0 k
/****************************************************************************/
" m7 u6 E, ^8 xECAPCONTEXT ECAPResult;, a  r1 N: B( w( ~" g: R- x) T6 O

( r4 E4 r* l0 A( E2 e/****************************************************************************/
% v  k7 G1 `% s  Z/ e/*                                                                          */
1 T# K! ?: U) ^8 c7 c' T/*              函数声明                                                    */, j5 v2 n7 |: Y% S# ?! c* |9 v
/*                                                                          */- f" R7 w$ m7 t) W& \; v6 c
/****************************************************************************/* N/ i) s8 ?4 H6 d
// 外设使能配置
2 M1 Z/ P3 B2 H  l( X# f/ Q! [void PSCInit(void);
& z: A5 L5 i2 _. ]
0 m8 ^8 v2 v  f8 K// GPIO 管脚复用配置1 e. R- |' b9 V, Y) S: G" _; j) d
void GPIOBankPinMuxSet();
- d' }- h3 D# _# I* n' H
, r+ t) V. m7 L/ j: _/ \. O3 N' p// 产生波形
0 {! S3 ^. e: N# C7 F! X! o+ \- avoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
4 i$ b8 Y6 x* X% i, R$ Avoid ChopperWaveform(void);5 G9 r- ^8 }2 `! _1 }6 Z- I* u! r: m

- h3 J+ [/ i1 @1 O// ECAP初始化和读函数! X' s9 X( W3 d$ H
void ECAPInit(void);
8 j  K  ?* l$ }7 bunsigned int ECAPRead(void);
+ h4 s5 P+ g4 m9 t6 S! Q/ W5 J" H
) [) ]& |2 i5 B# D+ }//ARM 中断初始化, [  F8 Y. ^- o2 {
void InterruptInit(void);" S$ J% F8 M' c1 q  @+ ]6 X, R' I4 p! A

" V+ Y. ?$ X" }( Q2 ], H/ M// PWM 中断初始化
* ?+ U6 {- c) Fvoid PWMInterruptInit(void);4 C" j! y. S, ~: V6 T* m
// 中断服务函数2 b4 X% Y# s) ~# I; @: H
// PWM 事件
( A. a6 q7 d4 m% g' `void PWMEventIsr(void);
$ {4 V. z6 v- N/ K& _, A' n( J2 r7 H3 N// PWM 错误控制事件
1 W. ~1 C3 b) e6 mvoid PWMTZIsr(void);# e3 _% R6 A3 s6 p( g
% f4 G1 V1 ?# E1 ]7 k6 p
/****************************************************************************/
) l8 ^3 t6 y- t# t9 [+ N/*                                                                          */
; d/ `1 I( g3 _$ {1 X/*              主函数                                                      */
% H7 G4 Q; Q* ?: U/*                                                                          */
5 F' |. V& ]; o/ ?) A6 q; f% H/****************************************************************************/
. }: W3 i: w) ~) a! h3 ?8 sint main(void)
% Q  W/ h$ W# o{
. p3 X  @- [( }% @        // 外设使能配置5 i! f; A3 j! ]0 F1 f) ]- m
        PSCInit();
, @6 Y8 X& a4 M0 a5 P1 W: @4 F4 L' y' _+ @6 s1 b$ e# Q, n
        // 初始化串口终端 使用串口2/ e- a9 `" K5 D6 U; m' }
        UARTStdioInit();- e0 t. ?" ]' H1 X& g* r2 j
        , J4 a, I5 F* R) K  `* H( l
        // GPIO 管脚复用配置
) f2 U, Z3 G' W        GPIOBankPinMuxSet();& u8 l( A* x: O/ x# x
+ n5 k8 h7 K( `& e
        // ARM 中断初始化9 b: f8 }0 R8 x, Y! j4 g
        InterruptInit();& ~) l0 m3 y/ ]  T

) C; s' T: ~# I! P1 l        // PWM 中断初始化4 U' l/ ^2 Z3 F. t2 C6 A5 E  O2 |
        PWMInterruptInit();1 \1 C# v) a& J5 K6 u

# S! P3 U3 Q3 z2 M        unsigned char i;! F* b4 n* c* i* B; B
        unsigned int j;
; j4 h% R7 Q4 U" [
# k' p" S$ U: O, C1 V/ W6 e0 H% P; Y        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
9 c. Z3 U9 T* t  ^/ i( {* Y        UARTPuts("------------------------------------------------------------\r\n", -1);+ \% b! y! n- p, ~$ J5 j. j
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);8 f+ f3 H2 B6 A5 s( x7 @; a, ]; `
        // 产生波形( [4 A. u6 C4 ^. \/ R
        PWM1ABasic(25000,50);
1 b5 w# F6 \) M5 D3 }8 L
' ]3 s6 e  O# ^: ~+ ?1 }6 ?        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);# u* p! |' W( p! P. @8 x+ d3 l. a- ?
        UARTPuts("------------------------------------------------------------\r\n", -1);7 |5 X3 {& V: d8 Z7 D; T8 V6 U
$ U- W- N8 r% T4 c
, Y( h- J8 w4 L* E
* b! }8 e1 z2 b
        UARTPuts("------------------------------------------------------------\r\n", -1);
* I, T( b8 c' i5 ~8 [" d        UARTPuts("                    C6748 ECAP Test\r\n", -1);
' R, o, |9 ~7 V* q: f        // ECAP 捕获初始化7 K( V: \' E% e4 n: X
        ECAPInit();
/ ]& ]& `7 J2 B/ `) V2 |# ?4 ?        UARTPuts("Initialize ECAP.......\r\n",-1);7 _: H3 Q9 r8 @
        for(i=0;i<5;i++)
- w( t8 ^, R6 e        {9 B' p' |+ Q3 K
                    for(j=0x00FFFFFF;j>0;j--);            // 延时0 V4 U) w  b: w
                    ECAPRead();
1 S, B  U) ?* e$ H5 M) Y        }
; h8 w7 ~8 J8 p3 l& K7 k8 g        UARTPuts("\r\n",-1);
0 I8 z" j/ r$ u$ x7 v        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);2 k, {* d% P3 J* z; W
        UARTPuts("------------------------------------------------------------\r\n", -1);5 I" k/ R: e/ }" g
, }/ E8 O7 n5 Z$ x# ~
        // 主循环
, b# W: D  d6 k$ @0 c9 K        for(;;)! V4 Z% |, x, c: w, f! U9 _; j
        {2 X# c) |; {1 `# a( J
% G* c- p) ]5 R5 r5 \( |( }
        }
. q1 [! |1 i+ T0 H* }  X}
) C2 |/ [! E: W6 R( F
! `9 W! f0 Z0 g. s: ?8 m0 ?) @/****************************************************************************/
' ^8 H1 k+ X" m& A$ V/*                                                                          */
' d7 G9 O3 `4 ]; O/*              PSC 初始化                                                  */7 S2 w2 C5 R. j( r* E5 g
/*                                                                          */
) m6 V. _0 v% y" [9 S' G, I/****************************************************************************/
9 J7 `& c2 S1 r7 B* y8 n  W$ H. fvoid PSCInit(void)
: z- X1 l0 C# ^# K9 ?9 R{
+ \" ]8 W% T3 ^        // 使能  EHRPWM 和 ECAP 模块
: H8 h- ]0 }, p; t$ Z& h        // 对相应外设模块的使能也可以在 BootLoader 中完成
# W; K; p' j- c    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);5 b, c/ `$ Z" _/ @& ?  o3 x% k8 f
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);) F1 t4 {) i3 x4 O$ y- B8 d" ~* U. x( A
}
0 B$ @4 u; V4 F7 }, U7 W* G, @9 a) y: `, ~/ x
/****************************************************************************/0 _% |6 A( z$ W
/*                                                                          */
* w9 @0 I7 T6 _/ \. w8 f, \0 _/*              GPIO 管脚复用配置                                           */$ h( Y4 \8 e) F* H' s
/*                                                                          */
0 z6 x( `  }: v/ e6 ~- b, f/****************************************************************************/
, u- g1 O& `. J/ Vvoid GPIOBankPinMuxSet(void)
( d) c' ?( r5 A. k, ^* b{! [0 Z6 n6 S( f& k
        EHRPWM1PinMuxSetup();
5 I5 k  M( \  |2 M& l1 K3 v3 m5 X; E1 Y- `
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)0 j: a. t9 n* c. ?# f, T$ [$ W
        // 作为捕获功能时管脚方向为输入
: b! g+ _+ q% ^$ S' ^) O        // 作为辅助脉宽调制时管脚方向为输出
2 U" D$ I' W5 j. R; f( b, [    // ECAP2 / APWM2
3 o0 y( x( B' f4 Y( K4 b( D        ECAPPinMuxSetup(2);- m- K, Z0 B- C( h* x, W7 z
" _! V. z# ^) q+ Y( y
        // ECAP2 / APWM2方向设置为输入
4 y9 {, z' g! y* Z+ h( X5 s8 N        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]; [2 m2 e& D6 j- c% d
}
4 k' w; P1 D( A5 w+ u# Y1 e' {
$ j' F2 }; D3 C! \3 e/****************************************************************************/
$ A/ I3 p$ j6 T, {. f# z/*                                                                          */
7 M  |4 ?* |! P: h1 q9 L! g2 {/*              PWM 输出波形                                                */) o7 Q* v7 G4 S* F3 [$ \# \
/*                                                                          */
) D5 `7 F- y# q/****************************************************************************/
9 c$ D! q5 Z, V( ~8 mvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)! g# O1 q6 o- H+ i6 u/ H
{
/ {# |, T5 ?3 r    // 时间基准配置
$ T- }  z9 ?  o! l  {    // 时钟配置. x& T  H3 g$ {9 M& |
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);, G3 E, m4 \% E0 |9 B

2 T- B5 N9 h6 T8 t6 ]; R  Q    // 配置周期
8 B7 ~* t. x5 c2 J    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
" R; `- H/ l$ T: t( `0 l6 W                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);$ d& |1 U  q% b2 U$ T9 Q" \

: g- }* k0 X. [) V  {3 t( W    // 禁用输入同步信号
& m- J2 L' V5 ^) P6 j' i    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
4 U( H1 A$ D4 G1 p. F* L- `3 q0 Z( W: b( ^( u9 V. L. P
    // 禁用输出同步信号
& _$ z# t' K1 Y4 [" x) F    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
  g4 T' u$ L- O; d" k5 u# ~7 e2 ~" ?6 {( E, @" U, w. m: M; @
    // 仿真(DEBUG)模式行为配置. y5 i% t! n# W4 N
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);2 \- n5 T0 ]# M+ c/ A2 }1 r5 f
+ q9 ?7 G* V+ [- c7 @: X
    // 配置计数比较器子模块
3 Z/ c! [! ^5 o    // 加载比较器 A 值& s9 q' F7 z  E# q3 D8 U. ~
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
1 U9 f7 P: _$ O5 d/ ~- y& D2 e                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) P: i' M  \2 n" Z8 o- I3 T# l
' p. a1 H, b: s7 p# K. |/ u
    // 加载比较器 B 值
& Y0 A, Z* }( a. }2 I9 K    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,2 i! @. n/ ]. M( \" y6 |2 c! O% o
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) F- u+ w9 z; x4 O

* S$ h  b+ o3 Y  J/ k    // 功能限定配置(输出引脚触发方式设定)7 F" F$ Z+ r- y' ^
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出3 S8 x, x& Q- M8 y
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,( O% ?8 @- h) I8 m% a7 ~" K# X
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,4 t4 A; C2 ~, `1 X. g1 X: |
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
) X& w3 N8 x, n: Y! l% x- y1 q7 J, [( E4 `0 l. y
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块0 g, G& Y* P9 y$ A4 j: c. O1 d
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
) _6 p" J7 ~1 p! e
' p" @+ y, `* h    // 禁用斩波子模块+ C9 Y6 z0 G' c' \+ o
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);5 u( v- A% g8 q6 N+ u
+ s: U" b  C, L! {
    // 禁用错误控制事件0 B( d0 S, P" R# {
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
8 Z2 Z' ?7 Z) ^( I) p    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
6 S1 J* Q/ o+ ?- f- O* I: e% G
9 H3 R  H; {6 B, x  ~& w    // 事件触发配置1 |0 j2 u3 |$ F6 r
    // 每三次事件发生产生中断4 n8 Z9 Z, e; \
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
4 U; H. W0 U2 X3 |) g# b    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件& M# a1 W! @5 W4 N; A
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);6 \; z) @+ l* y# c# h
    // 使能中断
. ]' W9 @# s0 G1 Z7 o) W  U3 ?    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
. A% q+ y( Q' @$ {# j, B5 s9 [4 I* p% o6 p7 P
    // 禁用高精度子模块( |; H7 F( _+ V3 t2 j' a+ ~' j
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
7 P8 G. \' W. d
$ z. U- m4 [$ U4 [2 B& `( O  q2 n- J    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);& O% H: D0 W$ Q9 U: n
}
" B0 P- j: `4 ~( Q+ E
7 O: o! m2 d4 s1 i4 i( v( Bvoid ChopperWaveform(void)1 ?0 L( L! z* i1 l& |+ I
{
' R5 [: r7 z1 k' `4 ]" q; t! S    // 50% 占空比8 h+ d- {2 H2 o1 @, |3 @8 P
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
! X5 D6 f( e1 `' [, Z    // 4 分频
9 H3 E* M  ^9 A+ l; g+ w7 ~    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
4 k9 j% N3 b$ X& O    // 单个脉冲宽度
) k7 U* W* P8 E$ J1 U, v- J9 b$ D    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);# P( l$ ^! I; z* m
    // 使能斩波子模块
6 H6 D& N$ x$ @6 n0 W+ F    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 D% e! u; @, _0 Z9 U}# Z5 R$ T: M7 k8 O+ r* {( x% J

# q* T, k5 W1 |2 j5 Y/****************************************************************************/
; N7 d; E+ e; b: D! D2 |: y- F8 a/*                                                                          */* a: a0 a5 \8 v' o: g8 Z
/*              PWM 中断初始化                                              */
8 y- E0 R7 q1 e9 B. t9 j/*                                                                          */
  E/ W- v: p3 q3 B/****************************************************************************/3 |0 S/ \) x  N# E
void PWMInterruptInit(void), s' g0 q- m. W2 D
{
) l5 m4 b" F1 b2 }8 I/ b        // 注册中断服务函数
- X1 ~! ^" \1 W: r        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
! {" @% Y# Q, ^( `2 C7 i. }# I        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
2 V8 \! t6 L! v+ a  \0 Y4 w+ W8 X4 F5 {. M/ s# m  g
        // 映射中断
, J+ a$ ~: v* k6 D1 [+ ?5 t" j6 Q7 f        IntChannelSet(SYS_INT_EHRPWM1, 2);7 q" {! P! _+ m+ j
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);/ S. B/ P& `; C$ J) U
- R' N' R/ n# K6 |# e; [
        // 使能中断
' F/ D7 W9 q, E0 \        IntSystemEnable(SYS_INT_EHRPWM1);
! q( I/ {! o/ y/ H, ?5 I) v) ]        IntSystemEnable(SYS_INT_EHRPWM1TZ);& q4 T' J; g" A$ [+ a5 p2 U2 ^+ X
}( v# K5 m5 }2 a' F
- h3 x( C# o$ R9 L
/****************************************************************************/. E/ {0 s# [' ?% }3 }7 S
/*                                                                          */
) ]1 h6 g- u2 k" u5 Q/*              ARM 中断初始化                                              */
/ m) f) Q6 W1 D9 T! a/*                                                                          */
+ g: Q' c' {! b' s/****************************************************************************/. D) n' M' k7 T
void InterruptInit(void)
  g' Y0 t1 u0 z) Z5 V* O{$ P: ^! ~7 D5 T" x
        // 初始化 ARM 中断控制器* a. p+ |8 _3 E
        IntAINTCInit();7 ]- d1 {& e( ?' s# ]4 i) }
& X6 Q4 U9 K2 E( I
        // 使能 IRQ(CPSR)) l7 U, @( g* c5 \9 A
        IntMasterIRQEnable();! n. I1 o" z& T7 P

7 r: s9 C/ A! i2 `! Z! c        // 使能中断(AINTC GER)1 M0 ^/ @( b  {5 T
        IntGlobalEnable();
- h# O' U! U! }/ y7 W* x) o: @6 h4 P. P' J2 L! r' v0 z& p7 m
        // 使能中断(AINTC HIER)
0 h2 s4 i9 b# K* ~" G3 J        IntIRQEnable();9 H7 r" f2 f: Q. r
}3 F' T" z/ \* e8 L- }
4 ?9 }* w2 Q  J* ~
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-21 21:28 , Processed in 0.058410 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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