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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
( S5 u1 c! r2 B& v) m
分享到:  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波。我们有相关例程,请参考。
% \. B' a! ~3 k' 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 | 只看该作者
/****************************************************************************/
& M% {( ?# G) r9 U- I" m$ P/*                                                                          */
8 `# ]; I6 d& u* s# p/*              中断服务函数                                                */
4 L: r' Z/ N5 F/ G/*                                                                          */
8 [1 e( Q2 H1 J2 ]' C" w4 H) _/****************************************************************************/
+ c4 y! S1 e+ Avoid PWMEventIsr(void)# o  z3 S# G5 p) c3 z* B5 C
{7 Q$ M7 L/ I3 z8 _9 _
        IntSystemStatusClear(SYS_INT_EHRPWM1);' A+ x  j; |$ p5 Z

5 J3 s) ]+ G/ b    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);2 x. g8 o4 ^# O
}6 \% s, X3 ?6 d4 o8 T8 P$ Q. S
8 |0 v( [/ ^  v2 x
void PWMTZIsr(void)
( n: P- T) |2 R& t, f{
8 P& T  _. m$ |/ S        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
2 D) N: j) n4 ^+ T4 a
' `7 N5 E7 i) N# c1 N" K    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);/ b2 T" O& Q9 j5 [# {$ @% F
}
4 s/ c6 F8 ?0 ]2 u+ Q
4 w/ d" r/ t+ W9 w/****************************************************************************/
( U- W" W5 N9 p1 S; F/ j: b- L* m/*                                                                          */8 B# A& E! v; w+ y
/*              初始化捕获模块                                              */: M& ^. a2 C! K8 K
/*                                                                          */
5 J2 C' o: P( _/****************************************************************************/7 @4 J' M/ M7 P# B& b: Y& z
void ECAPInit(void)
. L& e* b  c1 P! E7 e& ~{; o3 g0 S' \: ^
        /*-----设置 ECCTL1-----*/
4 y9 G" o; i& ~  n  y9 {: W1 ^! C" C        // 使能CAP寄存器装载
0 o. y: F# W  l        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
8 Y. U5 a9 W0 {- m# A        // 设置预分频值.
( `8 a/ L/ t& h5 Q3 `- U7 K* n# u' H, i        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);' {( i1 T3 U1 I- e
        // 上升沿触发捕获事件
( b( v# g( J2 b) u8 P        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
4 r4 O# `4 x6 {( _+ B- t) ~        // 输入捕获后重新装载计数器值./ k' u* T- S; `  I! r
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
- D' [6 S4 Y. k2 s7 M, g9 [- k. b& p# y
        /*-----设置 ECCTL2-----*/
7 Q) ~" D2 A& p: {+ u* t        // 连续模式
" f4 a- _0 Z5 u' E' w5 J        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
' P) l$ b- i/ N, K        // ECAP计数器TSCTR持续计数& v5 }0 t8 t4 N, C$ k
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
+ K* k' a1 h. j8 G6 }        // 禁用同步输出和同步输入
9 b7 X# T) c6 w        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);$ Q. A% q- Z* o1 q, q) k. I
        // 配置 ECAP 2 为 CAPTURE 模式
5 W" b( x- l- w/ i" ?, m        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);6 P7 _7 {) J4 d3 C
# L$ G" w% q. j( _0 t5 c
        // 使能中断
* B9 }4 T( U& \//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& v$ a% A- R9 ]" G! S6 W) i/ G6 Z}6 k8 [* t' z' j. {7 a* R# F
! O+ }1 G$ o2 c5 W5 A
/****************************************************************************/
, \2 `2 ]2 P; O% d/*                                                                          */# Z' j; z; a3 s, H: w' O
/*              取得捕获结果                                                */
& N3 r* q: }$ R. E. m; K: u/*                                                                          */
" ^4 y3 t. ?! M2 z/****************************************************************************/. ~  U  M' a  V  J$ L
unsigned int ECAPRead(void)
' Z7 c- ~+ x5 g8 ?  u+ z4 E) P# ]- v{& F. T/ E4 m3 P1 g
        unsigned int capvalue;
9 w3 g2 _& t, z* J        unsigned long frequency;2 ~; Q6 Q6 X, B$ ?
5 j" L& h  s' o
        // Event1 中断标志
, N' ?0 |9 A' X5 G( t- @: i        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))' J8 m7 [  \7 k% _% n9 {4 N6 O. b' }
        {
2 F# y6 A. [4 K7 i                // 取得捕获计数
: d/ a0 N9 v. B1 B% k$ j6 N7 ?; A                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
7 P# p6 f3 x" ?                capvalue = ECAPResult.cap1;/ s/ I: g4 S; K+ Q1 s' T  k/ M
+ a( c' u5 ~' F
                // CAPTRUE 模块 228M 时钟主频
: X2 |$ q* Q( m: |' G! x$ X, p                frequency  =  228000000/capvalue;
, g3 W& @) l; {5 H' `, d$ Z                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
8 U# n5 @8 w- M/ y" J! _; x6 u, h7 h
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);5 {$ t4 M# @$ ~
//                IntEventClear(SYS_INT_ECAP2);7 i- W% e7 G8 j" z1 v0 M
        }* Y3 s- Y  t' W9 L4 \+ T( j/ c
        return frequency;
9 N" y, D: g0 b0 a0 R  O& m}, j6 a) Q8 ^6 k1 M# n- M3 X2 l& B
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
% Z# }: j: X5 I; M' C( j/*                                                                          */
& f* D! b0 w  M6 r2 f/ Q6 z) n/*              宏定义                                                      */
* i# B  A- T8 [/*                                                                          */
9 F- S( j" H! O/****************************************************************************/) W6 ?2 Q+ P, U# c
// 软件断点  J. u. i7 R; U
#define SW_BREAKPOINT     asm(" SWBP 0 ");
( u& F4 v/ A4 K+ [& `' o  `
! }8 J' h  G$ ^// 时钟分频/ |. ]3 @2 l& R" A
#define CLOCK_DIV_VAL     228
0 Z* v2 k& X7 E1 d4 v
" N7 U# J5 m. A/****************************************************************************/
0 Y1 i, e! I  X* T( y( t/*                                                                          */6 T0 d1 o9 h# k$ n
/*              全局变量                                                    */: P( U. }- i  N+ W9 N
/*                                                                          */2 y; }* h1 y) a# o$ V" B
/****************************************************************************/. I+ q, X1 r$ Y$ s
ECAPCONTEXT ECAPResult;5 J- j# t  g- U% A2 f/ `8 t* ^' ^: M

3 Z: U; G& I. ~: l* l- w/****************************************************************************/
0 S* o. |4 {. a1 g9 ^5 @5 k3 o3 f+ c/*                                                                          */
* @; w  H- F' [# s  R$ k/*              函数声明                                                    */
$ P7 i5 [9 a; e2 }$ _) Y! \" q/*                                                                          */
" V& u( M; Q! q7 D2 @) U' J* C/****************************************************************************/
# i& n) k0 E* F! Z: {// 外设使能配置6 O: Y( J9 J- h# d* K9 }
void PSCInit(void);
1 K6 ?: T, A9 P2 i% i+ J- m3 ?2 y* c% p
// GPIO 管脚复用配置
  @5 v9 n, ^; X$ W5 Cvoid GPIOBankPinMuxSet();5 m0 x! E0 }; Z) E0 E$ y& N

1 `( {; O, T" f# e- U9 e$ D9 U// 产生波形
9 m( ?* W$ S4 cvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
. U. i# U' N+ j5 \/ f1 Jvoid ChopperWaveform(void);
7 N# w+ ]# h# N( ~
: N, d0 a, i7 o6 s* n% q// ECAP初始化和读函数8 F, e# n2 E  j! ?/ s
void ECAPInit(void);
5 F: C% b. u  q- m$ X6 B8 X7 Munsigned int ECAPRead(void);
" {1 m: K6 u) Q. i7 U
" G- ?0 _( ]$ B6 A4 ?//ARM 中断初始化  Q3 x2 r7 ?- r8 I
void InterruptInit(void);
, C8 Y$ y) c; `, W8 ^7 a7 E
  l6 B1 [  v% C0 K// PWM 中断初始化* g5 |% C0 `1 E" F- o% T* y
void PWMInterruptInit(void);
) Z( h; P) d$ n9 t  G. V0 L8 @5 J  v7 A// 中断服务函数2 |* b9 {% r+ ~6 ^
// PWM 事件
2 n/ r0 A0 f6 S' t6 g; e/ dvoid PWMEventIsr(void);6 a1 |( w2 ~- j4 r4 I
// PWM 错误控制事件
  F# c$ R% x- ~void PWMTZIsr(void);' Y: S! i8 k3 t- Q0 K

+ M  e; F4 v: |& B/****************************************************************************/, q/ R' @0 |, x6 _" l  W5 P1 Q
/*                                                                          */* @. Q$ u: p5 n! y
/*              主函数                                                      */( {. W9 G/ q. k5 S% J. N
/*                                                                          */
( v# Z1 U- q3 w; B/****************************************************************************/( E6 _- Z9 e; n
int main(void), q2 `( _  U* b! p3 W2 D
{+ {# G! n* |' E
        // 外设使能配置& A; j" N* S! \# C6 b8 m7 q% k/ {
        PSCInit();
9 _% H$ ^/ S6 w5 h7 R9 }# G* L& t7 B, C0 a
        // 初始化串口终端 使用串口2' N- H. q+ E9 P: K- s
        UARTStdioInit();: o) K2 v- B( W! C7 u) `
       
/ j2 ~$ ~$ }% C1 g' i! [8 |5 r        // GPIO 管脚复用配置( W0 Y" i, L4 B# ~% z2 `4 u* k
        GPIOBankPinMuxSet();
+ U6 d4 i; {& ^2 o5 x/ v8 D& c9 f' h9 D; F
        // ARM 中断初始化3 _+ n1 h+ w' d; F$ o, P
        InterruptInit();
& Q7 T! r' o7 m% e2 J0 n: ~3 b( y, i
9 A: m& |  B: Z" X$ W4 n# c        // PWM 中断初始化2 V9 }8 R6 |4 E. Q9 s8 S) R
        PWMInterruptInit();2 U$ s' O6 P7 b" }/ N2 Y: v

6 k6 s2 q  s, X3 F8 l/ R- O7 M        unsigned char i;' R3 W/ Z7 C" s3 i% [; f" i1 K% t
        unsigned int j;
6 j3 C7 u! A7 l% @8 Z; N! U# O) @/ @  C6 c3 m
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
9 Q3 r; w7 `* x( ~+ B        UARTPuts("------------------------------------------------------------\r\n", -1);
. ?- ~8 `& ~5 i3 o        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
$ Z3 f$ M3 ^7 r6 h3 v0 @& w) B        // 产生波形
2 f& u" b! g* }& _) ^) V- k        PWM1ABasic(25000,50);
+ A5 s* z( [8 A7 `
. {! g  M  q- P4 J& U( ]5 g  W        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);7 x+ X" Q  @4 z3 }2 U: m
        UARTPuts("------------------------------------------------------------\r\n", -1);" Q. T8 \. I  V  J

0 L) ?% y; i2 t- J5 Q5 _1 m, p& T7 ~0 ]" I: N
# q4 q% Y$ V7 ~4 @0 f4 u$ g
        UARTPuts("------------------------------------------------------------\r\n", -1);+ b# h' P+ \1 l6 i5 E6 t
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
6 o3 t5 D/ ^  f* x2 ^3 q) e3 g& P        // ECAP 捕获初始化( F( |, l# c6 q- i  f
        ECAPInit();
. y) [! m8 @3 y        UARTPuts("Initialize ECAP.......\r\n",-1);, Y# q& B" j1 p5 a; ~
        for(i=0;i<5;i++)3 r) s4 F! Z: W7 R+ I9 ?! A, e  }
        {
1 ]6 S: `$ A; R' I                    for(j=0x00FFFFFF;j>0;j--);            // 延时$ Y- ^3 ~, r! q% Y; V7 A
                    ECAPRead();
$ q3 P. R, ^2 x; P        }
9 r1 ?$ u. J( o$ D        UARTPuts("\r\n",-1);+ h+ c* C9 o, f& F" Q7 D; Y9 T
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
: R" }2 ^" n# b  y- c1 L' A        UARTPuts("------------------------------------------------------------\r\n", -1);* P$ b0 ^3 `8 C5 G6 k- H! }
2 O  m) i- R! i9 J0 @; b
        // 主循环
3 x) v- Q4 x9 y8 J; u, V6 g        for(;;), U# P# b+ S: H4 Y
        {
) y. j& @& j( k) ~& K9 ~- v. D* j, j% G; J; X6 a. ^2 O7 S
        }0 a, t0 D( j: L( n0 U4 L
}; F/ T# ~$ w5 d7 O4 n
5 E2 I/ |; O, Z& J6 u7 z3 A/ L
/****************************************************************************/
0 G* x- B0 a4 A" @- c! X8 N/*                                                                          */# M5 |6 E; E, p* Y  G
/*              PSC 初始化                                                  */5 h" P! r9 k7 M4 F) r6 y
/*                                                                          */
9 |( L) W* l' r7 G) \4 n3 @/****************************************************************************/' c2 M7 ?2 k6 K$ C7 A
void PSCInit(void)
5 s( ?* _2 P, [2 L, A# z{  z. \, x4 l: u0 n
        // 使能  EHRPWM 和 ECAP 模块3 a- Z, k) X% W% ?2 j$ I% r
        // 对相应外设模块的使能也可以在 BootLoader 中完成. S" m' [9 z- |
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
! ]% d. k: e  z! F; l+ G, w# j) t    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
1 ?# N) U+ F; Z  {}
2 o( i$ L/ ^# ^7 S% g4 d  ]* a- T) r. ^
/****************************************************************************/
) I. z- O2 }* |/*                                                                          */0 ?0 V& T5 I6 Z! @
/*              GPIO 管脚复用配置                                           */
- a+ S5 Q: h, O6 c" U/*                                                                          */
8 g4 I$ @# O8 \2 a4 \3 e2 L/****************************************************************************/+ x# X3 x, D: b0 s
void GPIOBankPinMuxSet(void)
6 k) b0 `; c/ M' G# Z3 M{
! a7 C+ |# a  h; p! O        EHRPWM1PinMuxSetup();) {) R4 u* B" E/ \1 `2 [0 ?

0 R8 y, B4 d0 M( W! o( w        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)6 c' M2 f) b; z# \  y1 ~. Q; E4 Q
        // 作为捕获功能时管脚方向为输入
) ~* u* w" t& i; |5 [: C2 H        // 作为辅助脉宽调制时管脚方向为输出: G4 y. v, [1 A: W  r
    // ECAP2 / APWM2
0 n* h! O7 r2 R        ECAPPinMuxSetup(2);
8 }4 R% H' x; {' {& v0 D+ S4 A& ?* S' O& I
        // ECAP2 / APWM2方向设置为输入! O# f' K) w7 _
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
2 n: b; [% h( G# F) g# I9 `2 u}
6 `2 M0 l  x! N, P, y
2 `) A# d% D" d; H  R. o1 _/****************************************************************************/
7 i: ]/ m* T4 B4 a' S/*                                                                          */3 I* u, P. y, Z# t: i2 [0 p  k8 d
/*              PWM 输出波形                                                */
: E5 W, L2 j& _& w& ^/*                                                                          */! Z  A  q6 I) V1 ~& ~5 i
/****************************************************************************/
: j4 I4 {( o7 hvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
* h6 r" C+ g& X! }5 \{- y  q6 h, [  l  A  m
    // 时间基准配置
( Z4 x( r/ ~+ R* h6 C    // 时钟配置
6 p* t; {  }' B; ~& K% g& B    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
: N$ H: q& e9 D) `( [
% c% X+ s" z  l7 P+ b    // 配置周期
/ ]$ W% E: {. I- u    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
1 m! w! y9 d# S8 }& [: x8 _$ Z( w4 R                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
6 E) w, z- @" e5 o8 m" O/ K
0 c2 L% D# t: T  K$ @    // 禁用输入同步信号
2 F/ D4 R5 ^; W5 Y7 Z    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);( r! {: Y0 R! K8 D
( P0 V+ f, N; t6 C! u& h2 w
    // 禁用输出同步信号! r. U# v! p  {  \
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);; T- j: g0 O3 V" o

9 N' D! h' n# W9 L1 R% i: I    // 仿真(DEBUG)模式行为配置: r, o# l5 s0 r! w
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);. Q! ~% `& f6 I3 m2 K3 r

3 ^" |# ?- k: W# ^5 z" \2 f    // 配置计数比较器子模块* j2 W& o& w0 G6 {3 K  v
    // 加载比较器 A 值: A1 T# L3 n3 h
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
' R8 ~# R* E' Q2 L; S                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);$ J6 D) V( [) e) i

7 L6 f- d+ k. _$ O' C$ U    // 加载比较器 B 值. O; t- m% C3 M$ W
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
3 w9 j; D7 A3 z: N. X2 ?0 W  ^0 o                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) r* m9 j: @( I; S) ~8 a

, q! M- P  }  c( t, n    // 功能限定配置(输出引脚触发方式设定)1 @2 n% |1 ^5 S! L) G- K1 H0 h, O
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
: t* h5 x) i# ?) U1 L6 t: M    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,; Z. Y+ F/ W) G. k1 B
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
! i1 A5 c6 N2 P) h2 G                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);; b1 b0 n2 Y/ V+ L* x" b/ C6 `; t1 B
' F5 p6 H2 z5 N$ v" I6 u# ~
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
+ y  k: r8 O) s9 n    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
6 r5 K4 _# {5 _
' q' |6 _- d# ]8 X9 Z9 m% N- Y    // 禁用斩波子模块6 ?4 p$ h6 P$ Y: s
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
7 E. e$ t& V& I- q3 b. @" h: T( N. j
    // 禁用错误控制事件
& P3 C% k! ~- g; S$ }3 `    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);% C( m! B6 |$ P2 @
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);8 r# o1 l# u1 W- U( {6 V. k1 y

$ `' q0 E2 f' v& o) R    // 事件触发配置: p0 y+ E' p' L" j+ A# V0 S7 F/ T
    // 每三次事件发生产生中断
0 _- _$ z% q* A+ y+ D. B% ~! @' u    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);  v5 M8 K+ P/ ]
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
% K7 y, V' o; ]2 }, B    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);( u! E0 ]4 D0 \! k! Y
    // 使能中断
  T( D" a/ t6 N    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);; w, P! Q  ^4 F
4 s6 p. l5 l/ ~% }
    // 禁用高精度子模块* h/ D6 ~9 D+ U8 u, E5 |
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);0 d6 K4 B- F! W8 S

% c- O6 F. w4 j# ^* V1 z" G    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);" _4 f4 |0 E0 K, G) X% B
}
' z. a2 P+ r) R2 u5 f1 m3 g; F& q" F* W
void ChopperWaveform(void)
/ c/ Y  q/ X: R5 Z) x% n{
/ `1 }/ M% _+ {7 H    // 50% 占空比5 u- H: @2 v0 G9 L5 i
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);$ m% w7 G' |. W( f6 x+ v
    // 4 分频
. u9 p1 q8 R3 q    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);  k' G* P  g- l
    // 单个脉冲宽度3 S6 L2 `7 X6 y" K
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
1 e8 n( h5 f( x9 @' g/ H    // 使能斩波子模块0 n* [+ `0 \4 @$ H4 m2 O; ?
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
* \+ W3 ~$ C- p. v2 K- a) e}! g' d- h7 R/ X. J* j* i- w; z

4 d( B% h. J- b) y+ b4 z/****************************************************************************/
0 Z: P/ u. X  \) B& ?4 i9 l/*                                                                          */( |2 V3 P- p; a% ?6 I9 g
/*              PWM 中断初始化                                              */2 \" J, N# L' P6 q9 u4 g! m
/*                                                                          */
, G+ m1 J. a* X6 f/****************************************************************************/
% i1 ]5 a: A  Q5 c# kvoid PWMInterruptInit(void)
) P3 P$ A6 s2 ]& ]- G{
9 v3 M. x/ @' I        // 注册中断服务函数$ z; m0 `* l. e6 r4 k
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
3 w3 @/ n+ F  Q4 P4 y" F8 J: L7 Z        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);7 I; R4 [5 W( E# _4 c) b2 t2 P. ?, s

& j( L# ~" n8 w1 c' I4 c        // 映射中断9 i: ^; d. S) v$ r0 I8 q" C
        IntChannelSet(SYS_INT_EHRPWM1, 2);: U9 S. j1 _! f
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 [! {) N: ~7 C) d( k6 l$ W/ }, f
( ?: ]' U1 M1 f+ F1 Y- H, _        // 使能中断* Y8 y4 g7 `. r4 h# J4 V1 Q
        IntSystemEnable(SYS_INT_EHRPWM1);
% q; |  v) O, W2 N        IntSystemEnable(SYS_INT_EHRPWM1TZ);" D! j( A- B& U+ B
}
$ g1 X1 M4 j5 P) {9 N8 _. \0 @" A
7 E) t) n, R" D% ?! P3 b! l5 ^/****************************************************************************/3 b# u: S' \8 X1 l2 X; {2 I& `- i5 [& N
/*                                                                          */* x" j! ~0 @. g& y7 A- k9 k0 a- s- W1 u
/*              ARM 中断初始化                                              */
' E$ ]( p( D5 t4 e: [/*                                                                          */
* w- [: j' f" ?0 {/****************************************************************************/
" N2 e( a  V$ t  I, ?- h6 _void InterruptInit(void), G2 p3 G8 L. t6 R
{6 p3 ?. a# q" s! B1 Z! I% W
        // 初始化 ARM 中断控制器
) H" a6 }6 t" e7 B) v3 t" s. r7 e        IntAINTCInit();
$ w1 Z* K  n. b7 O8 W+ F* p) {
3 k. [0 ~: |4 p* c        // 使能 IRQ(CPSR)9 {- }( K* {2 j0 J$ J& R
        IntMasterIRQEnable();
, B2 T4 B! L  E% ]+ {
) k$ d" {, y! f1 w( [        // 使能中断(AINTC GER)! `8 ?  }, V( e/ I7 p$ m" k8 B
        IntGlobalEnable();8 k1 k6 v0 c" M1 A- b

4 ?( g/ T' \6 ^        // 使能中断(AINTC HIER)
) I3 U4 p8 ?6 n( d3 W6 e0 p* p        IntIRQEnable();
: D: ?, X% o2 Y1 r% _5 s, I, J}) n' _! m* H" k8 g# L- B3 K' S
+ G! h; n6 N4 M% ~) b' \
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 09:08 , Processed in 0.045046 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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