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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
7 D1 ?' y& l% y+ M9 ]' B. _
分享到:  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波。我们有相关例程,请参考。6 M: k) `* P4 g; l! y

本帖子中包含更多资源

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

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 | 只看该作者
/****************************************************************************/( d! S) W7 X8 U& j
/*                                                                          */
8 A2 D6 c1 p; f2 `/*              中断服务函数                                                */: T, V' v. _' i" X* T! |3 w9 m
/*                                                                          */; o8 w$ r0 \" ^2 @& a6 o3 y; [( p
/****************************************************************************/
  n  Y. n4 }1 l; u, ^8 _void PWMEventIsr(void)$ y6 M! N; w# L/ D3 B& K$ A& w; W$ p
{- A1 D# w* q6 t* q! X. X9 K
        IntSystemStatusClear(SYS_INT_EHRPWM1);
; o3 B% N( i/ T/ Q' c; W  G3 K
  f0 ?5 l" M" r5 N    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
5 z3 Q! Q2 ~) w: u" \$ \( s}
$ |! F1 `/ f7 Q4 \8 @
' N* c0 j3 z9 `6 w% b5 A) zvoid PWMTZIsr(void), G& }5 [! _+ Y3 X6 [
{! B0 i4 m9 U5 K! {7 X: f: T: z
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);/ Z) B/ o3 r# L# x
, |0 \& N, g3 d! E& p2 K
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
' N% s6 l+ y- F8 ]. D! w}
' o' O5 ?2 y' S- L: y
( D) I9 B2 i/ s1 a1 ~$ p/ p/****************************************************************************/
. E" N7 j1 V5 B. ^# v# q/*                                                                          */7 T0 J. Z5 i$ T$ `% p: v
/*              初始化捕获模块                                              */
) b6 P% V  s+ S6 K5 H- a6 N/*                                                                          */6 N" Z/ l0 \, K+ O
/****************************************************************************/
' e! T4 e5 F/ F( w* avoid ECAPInit(void). R2 Y' F5 i9 b7 y4 \
{) y4 b- o5 E" q8 Y- ]% c
        /*-----设置 ECCTL1-----*/" [5 i) |7 \' Y9 b
        // 使能CAP寄存器装载
; x* `: R' o% T& ]2 p, C9 T        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
) g, a6 A: \% @  o' B) W        // 设置预分频值.) C5 {# P, k: U# l/ c, P+ x# o
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
7 a. l( T) Z6 ~, a* G- W) e        // 上升沿触发捕获事件
: t7 B. [0 \7 l        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
; k& a0 K! C$ X0 _        // 输入捕获后重新装载计数器值.& H8 h7 U- L# I2 Q1 h
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
  ~" N7 O8 E0 P* f+ I
2 s" u) O/ y2 P8 ]$ R% h        /*-----设置 ECCTL2-----*/
  K! I8 _5 |, N4 u  q        // 连续模式
5 _( m9 }1 t. F0 g& Q# p2 D        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
& V- Z# s& [6 R. `, Z2 q$ f  q        // ECAP计数器TSCTR持续计数
  `5 c/ D1 P% p% U1 `# Q3 D7 |& _        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
* A  S2 L) G5 a! S* p        // 禁用同步输出和同步输入2 ]1 H( H+ ~; C# e5 S! d: F1 b
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
- J  t: L* J0 t3 j( T, p6 _; r7 l        // 配置 ECAP 2 为 CAPTURE 模式) N8 a" U* a& {6 o9 U4 M- p
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);3 x3 K3 I( I$ V/ \8 m
1 y6 y5 @6 c) Z0 p3 S. I( E0 `
        // 使能中断
/ o& z+ R! e- i0 h+ I* x5 Q( f//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);+ i5 u9 J7 S, D5 R
}- g0 C8 B/ E+ a+ b  t% T
. v; x, d$ ^0 W% K+ U3 _+ x
/****************************************************************************/5 q8 N8 r+ g! y7 z/ q
/*                                                                          */4 X: P7 i" P# ~7 N, L" Z
/*              取得捕获结果                                                */8 a; e. a: Q3 }& F8 g( q
/*                                                                          */0 N7 }4 ^6 t6 {1 a$ D- E8 `. g
/****************************************************************************/
& I2 }+ H; `1 N3 l# iunsigned int ECAPRead(void)
- G  t' h$ k; R( g! P+ d9 H{9 v( @+ f9 @' [6 s! {8 [) p, w7 t: A
        unsigned int capvalue;
  G* e5 @& `+ V2 T9 d' |        unsigned long frequency;& N* a1 n. p- l) B- b) j
% ~/ G% z7 G* i
        // Event1 中断标志0 Q) M: h* N- L; i" ]! z
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
& n  z/ j, T5 I" @' }8 K        {5 p' z9 M3 y2 K: o
                // 取得捕获计数; ^4 P" z. f( Y3 {
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
5 ], \' G2 M, g1 c; Q" w, r6 B; |                capvalue = ECAPResult.cap1;- h6 O/ s7 n- M

$ k# f; {, }( N& `5 T' e                // CAPTRUE 模块 228M 时钟主频2 Y/ [9 d  ~2 B( P
                frequency  =  228000000/capvalue;6 I$ \* C! @2 z
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
0 @  ^3 H  S. _( I' \4 R, W- W$ |4 s! M. v% |4 t
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
; h4 w. e: X* Y) E: C2 N& R! F$ C9 C, G//                IntEventClear(SYS_INT_ECAP2);+ Y) U+ M0 ?  h2 `, y4 R
        }, o3 \0 ^, V" \/ ^) |
        return frequency;5 n/ E! I+ j( x# m0 j4 [% d
}9 o) c1 `5 E( P1 `1 y, J& L
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
/ `% v& U& k& n; k4 u( y0 j/*                                                                          */7 }# D$ y* j: ]( z. D& i2 i+ S
/*              宏定义                                                      */
6 U' S0 t( j4 F1 A/*                                                                          */
0 H3 O6 [9 u, O6 Q6 |* q, {' h, ?- K/****************************************************************************/4 U$ z! V" @% W+ R2 Z- c1 w
// 软件断点& D, ?% W) j( C' A8 Y4 R
#define SW_BREAKPOINT     asm(" SWBP 0 ");  K$ J, n0 l' M4 d3 O. x
& x$ V% y6 |; v. o! H
// 时钟分频' ^! |: |0 C0 y# `' v9 F
#define CLOCK_DIV_VAL     228- h, H# a5 o9 q

+ |9 l3 R" A3 d2 s7 f, g/****************************************************************************/" i# X4 p5 I; C$ J' X( v  y
/*                                                                          */
7 x- @- K) M% E, {* [  ]5 L2 V" y3 O/*              全局变量                                                    */5 A+ t9 K/ x0 M, O/ f
/*                                                                          */
! @8 O+ T* C* H0 _/****************************************************************************/: P/ l4 i( `  G% w  j5 _# m- H
ECAPCONTEXT ECAPResult;: a8 }1 e8 Y* ?9 ?1 g2 w; h
! h# @0 j  x- x; ?5 b  @; w
/****************************************************************************// I3 {5 {2 U$ I, p
/*                                                                          */
  E, y& M1 y) p. }& J: {/*              函数声明                                                    */
( o- I0 i9 I0 a5 A/*                                                                          */* ~  W# `4 f- c% F
/****************************************************************************/5 |2 R: V9 q; `! W& l6 _
// 外设使能配置% V( z- ^  r: s: ]2 s
void PSCInit(void);
! G3 N1 C/ y! _- q/ M  a$ t8 l9 |' F* a# P) N  P/ Z  Y6 G
// GPIO 管脚复用配置
7 ^* y- v8 |2 W; [: k1 _; w1 pvoid GPIOBankPinMuxSet();, t" |% D9 p/ \8 L2 i3 x
. U- ]' F0 Y# X7 r& e! }
// 产生波形" E, z/ s* y! k9 V( {* u# s
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
+ j. G5 ]0 S1 Ivoid ChopperWaveform(void);
% w- k( h" u: L( Y
& v" y0 ~! w1 X+ C% B// ECAP初始化和读函数
% N  D( u+ K8 E' f7 M8 N7 I" b! N4 zvoid ECAPInit(void);
& I# J4 e6 X* g5 v7 ]5 Y% F3 Punsigned int ECAPRead(void);
* |0 f/ [3 ]$ P7 c$ C( j% j) h0 _; \+ F9 i. q6 G
//ARM 中断初始化6 }9 f7 M; d% S; _
void InterruptInit(void);
: t- D. A/ J: c; w( y
, X1 s: I2 s; m/ G9 z// PWM 中断初始化
* ]3 N2 e) J3 U) Hvoid PWMInterruptInit(void);
0 G% ^. a" W- l// 中断服务函数
: @# W$ n( k( T// PWM 事件
; Z* K) A" j7 Z$ u# Bvoid PWMEventIsr(void);4 v  m/ L6 E; e- Q4 z
// PWM 错误控制事件, V; O2 v/ _* C6 O- v* j
void PWMTZIsr(void);
" X2 R0 D. \# B1 {/ R6 Q
( O$ p) X; S6 k2 R/****************************************************************************/, u/ P6 i  }! d" X; u3 e& V8 S
/*                                                                          */
: M3 a  B2 a- ]/*              主函数                                                      */1 A  `* Q' @8 j; s9 A- F
/*                                                                          */- ~8 P# m6 O' \" G
/****************************************************************************/. p) O* u  ?% |5 Q
int main(void)
+ b0 [3 A$ C: Q* Y! o{# C  k% ^% q8 `; B
        // 外设使能配置& ~1 U" t* y$ ^9 ]
        PSCInit();
; F' ^8 G5 z$ X, s% R- \2 t2 w
; D: I. t* D3 V        // 初始化串口终端 使用串口2' a) i7 o2 r  ]9 f4 ?, ]4 p
        UARTStdioInit();5 o( L$ a( }: Q/ i
        2 h6 e1 X  u0 h6 h$ A9 q' \4 B) {! w
        // GPIO 管脚复用配置: J6 n4 B4 r$ p) \  D0 T3 _
        GPIOBankPinMuxSet();
+ T8 s$ y/ |' q1 N
( g8 O) ^% s4 g0 b: y1 f4 t8 o$ K  C( t        // ARM 中断初始化# M$ b4 ?7 ^; U4 f  N( g# c& v# E
        InterruptInit();
9 d/ u0 z- q1 @/ W* i2 `) i* K% F
$ B( {2 E6 {1 W; O* t/ O        // PWM 中断初始化( ?" h4 }' V  J; X; c' Q( N
        PWMInterruptInit();9 e, @3 t% g# M8 o2 s  e1 h( h
1 }' h7 W3 ^" @. r* f
        unsigned char i;
3 ?; U0 A* `0 r7 r' e& Q        unsigned int j;9 r9 ]0 G. w5 A6 F) R% f, s

7 F5 |5 z$ A4 X* t; P        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
4 y% O# v4 ]$ U0 L        UARTPuts("------------------------------------------------------------\r\n", -1);" q9 N7 G3 \$ g5 o! S9 [. N
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
1 y! }5 j# ~( q4 G        // 产生波形0 h& _! V9 g4 @2 I2 f
        PWM1ABasic(25000,50);
( r$ @4 C$ m" D; n) ^; n% Q: }3 W, e& v3 x: q
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);4 k( l4 i0 G  i" w- n. V
        UARTPuts("------------------------------------------------------------\r\n", -1);
- [6 Z. X5 l  b8 m0 L8 {
: c% k. n, F6 J, F+ g9 N" X4 ~8 W, |6 q- r

* n5 t7 R# w% ]3 O' N        UARTPuts("------------------------------------------------------------\r\n", -1);
: m. h" F) i# H& X) R        UARTPuts("                    C6748 ECAP Test\r\n", -1);
$ w1 M- G4 ]4 Y; l- O        // ECAP 捕获初始化8 _# `! [0 j4 q
        ECAPInit();
8 _! b$ k& g7 [        UARTPuts("Initialize ECAP.......\r\n",-1);
! Z$ n3 a3 M! W! q        for(i=0;i<5;i++)
( ?$ Q) J' P% Z  R7 l; _3 L        {& G! W, v! d6 y! g
                    for(j=0x00FFFFFF;j>0;j--);            // 延时, C% _4 l4 N- o: _  X" g" n" U
                    ECAPRead();
' U; Z7 F  `( _! {, n7 X# I9 e        }2 G3 Z$ V. f, f5 Y* r
        UARTPuts("\r\n",-1);
" |2 n1 ]4 [  h0 _        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);2 r4 k) U! U& z9 X" E. B* S
        UARTPuts("------------------------------------------------------------\r\n", -1);, w% H# b7 k2 t; v$ C% p$ q
5 c* U4 N3 L- n- @
        // 主循环- U1 z9 g0 g& a) {
        for(;;)
1 `+ b: F! ~. q9 J4 D        {/ Y# V( h: F1 X0 b" o- ~4 M7 m
+ }0 X# A3 X2 f& _
        }
' |+ z- r, i# X( r2 v3 ?}' p' K8 y1 F2 m

8 a% c5 i5 H0 q- V% L" V8 E" I/****************************************************************************/% V' {- S: p7 S. |
/*                                                                          */
" W+ D5 X6 u/ c& Z/ ~& D/*              PSC 初始化                                                  */
2 n3 }/ y/ J$ W' n$ u/*                                                                          */" Y% g4 F7 W: s& p& |; x3 a
/****************************************************************************/6 M* z9 u0 `0 l1 \6 s$ \0 [
void PSCInit(void): ?3 E/ m, n& P+ y0 ^
{6 q# J; A) [9 n1 K3 C' L' |
        // 使能  EHRPWM 和 ECAP 模块
' J0 T6 r4 ~7 U        // 对相应外设模块的使能也可以在 BootLoader 中完成" o' P3 ]4 y2 D- k8 x& ]
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
3 u4 _3 q; ~8 a$ H- l  X" q  y    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
! \1 u# L" y% Y# A2 r}
  |6 ]' S& o4 c* @* ?4 |3 n; J
3 y* ~5 t5 a7 u/ X: l$ {! H/****************************************************************************/
% j; T' @' k; u' u' F/*                                                                          */4 k: Q# i9 u9 \7 x$ r- [* v) f
/*              GPIO 管脚复用配置                                           */1 |+ Q7 F( V; v1 \/ N+ F
/*                                                                          */: s/ I3 Y/ S2 k! h! O6 q4 ~! W
/****************************************************************************/# m5 @; D  U2 [% R' F
void GPIOBankPinMuxSet(void)8 `2 E& O( c0 @( B8 V
{
* h' c, I) \; ~1 X! B        EHRPWM1PinMuxSetup();. F/ }7 Y! z3 I% R' H# s
, H$ Q/ ]" q) h
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP); u- q% T, n- R. K3 y4 D
        // 作为捕获功能时管脚方向为输入
8 j3 \6 s/ z, [6 k% S- X6 {; y$ x9 H* K        // 作为辅助脉宽调制时管脚方向为输出; r; t  X- y7 ]' F( Z: C
    // ECAP2 / APWM2! P2 U% N/ }* x( ]' i0 C
        ECAPPinMuxSetup(2);
' i7 l& }: X0 f# E+ y9 G' e$ J2 \; K- A  E$ S
        // ECAP2 / APWM2方向设置为输入' C. V5 V& A+ L  l* y, k* m" S
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]+ e& b0 f- f% B. T
}" ^6 h* L; p/ j
. K) N8 e7 A' ?# X
/****************************************************************************/3 Z" ~( j/ b& F+ k
/*                                                                          */
, p, x0 |+ S- z) V+ S/*              PWM 输出波形                                                */
- v7 n2 V- J5 R0 v4 j/*                                                                          */1 w; X$ Q1 K2 V/ e8 y6 W
/****************************************************************************/. L- }4 O9 ^( T+ Z1 ^( D
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)! Z5 U- h1 m$ Y" d3 _) n
{
6 S8 I3 h: q" X    // 时间基准配置# F- z& X! Y" G( T4 k% n
    // 时钟配置6 l# H! D" |* v* p7 I
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
: ~7 F$ e4 F5 j1 i  Q! U* j0 \. }6 ^: B
    // 配置周期
# N: l& I2 p0 z  j# G    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,: N3 f+ G4 M9 |
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);0 n7 ~3 O) N; c7 ?6 u1 y+ u# K6 y
8 F% ]+ O* A2 Q8 L
    // 禁用输入同步信号
! L* K3 i( I) O3 k+ m: H: p' u    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);5 M; r5 I# |. ~
3 m6 B1 {0 h% z' \8 w# O
    // 禁用输出同步信号
' }' c; h3 X+ U3 H. `    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);# Q+ I3 K" `8 f4 |* j

& V% F8 i, p8 ?3 |    // 仿真(DEBUG)模式行为配置
( X5 z/ ^  I5 j  @) H    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
& Q; O/ V" O( H6 v8 `! ?$ `( C* F4 }6 }2 O  d
    // 配置计数比较器子模块6 b! L0 P) H' A% G! K0 d) t
    // 加载比较器 A 值
# [. }, v( u, b3 D( P2 F% M    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
: ?8 L# x# F( t1 y9 w                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
+ t$ g& R& E- u& `6 ]0 |
; ?& c) f3 t" B- h  z) T# I7 `+ e    // 加载比较器 B 值4 l$ U$ O$ M4 d* u# Z6 ]  |& |
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,0 ~, ^! l5 }8 y0 G8 _
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* }! l$ K1 V6 i

% S& A) p0 [* g7 m4 H5 D0 w    // 功能限定配置(输出引脚触发方式设定)$ d4 ~8 O. j6 z* l' N( v
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出; ^8 K) E" T# i) c" W/ T: A9 P
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,: f7 }# T4 Z7 S* b6 M* i% y
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
# l  R& `9 U! C, r! t+ H" f                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);% U9 Y* h- I8 f& F, {8 B2 Z
. o' u# O1 z) c; Y: W- v6 g
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
- O9 m7 R- {3 Q7 a* B! y    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);3 {; h  w( S  ~2 Z6 j2 T- s
' g9 e2 y7 v' O: V
    // 禁用斩波子模块
* X1 {  t7 T% c. J% O& J8 I+ U    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
- a" M3 a" P+ D& i9 W) s
4 l+ P5 e, }( ?: w2 z+ q" ]    // 禁用错误控制事件
# q% D8 ]- W8 D0 ]* \    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
0 l0 m" x, N# G; \    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
8 H, K& v4 G" D6 c4 i) @- }' f% R
, P4 B9 B+ i2 z! F! H    // 事件触发配置
3 o# S3 \$ w* S, b0 Q    // 每三次事件发生产生中断5 C. D( T9 W& k3 A/ S
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
4 V) }3 s' s# r" J  \5 f9 ]/ k    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
5 A! g' x7 |  E0 |: m+ A    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);/ Y6 V" m7 E. l: I/ X; C
    // 使能中断
* O  z6 K  ~' V. t    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);1 H# {2 R$ B, L# f8 O
8 m2 s0 r$ {" Y+ h
    // 禁用高精度子模块: x. W' g- W8 |' C' [
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);/ o( I2 O& b* y  t9 m7 p

0 l% S) R7 L( O) L    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 m6 f+ X: m; X0 [1 D}
/ o6 p# I' R3 W7 f3 z
1 g# ], g& ^$ @- b4 @% k0 d" f4 R% Kvoid ChopperWaveform(void)
$ `: `1 D6 n! O, @{: ~! Y3 c/ W) s& Z8 e( E7 i
    // 50% 占空比
+ X5 G" C" V* j/ g* |    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);6 f7 X& z/ {: R1 V
    // 4 分频
6 p+ Q2 M- h8 U7 g, H0 T    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
; F. E0 Z' C/ l: t4 g" `2 h    // 单个脉冲宽度2 |; h1 L) \  S
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
- R# ?; |! X) I; f/ ~    // 使能斩波子模块
- U8 C" [7 ~  q" h* H' t    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);2 B: ]. l, G0 g" @) B; D# r
}+ H# @8 t4 a& {* V

. W6 R9 y& C( I3 ^" j/****************************************************************************/
! z/ z0 e" \: E2 O5 \) L/*                                                                          */
. g/ l/ l, O' z9 b: ]0 J# F/*              PWM 中断初始化                                              */
% M* N& s/ t: J( W/*                                                                          */
( t( S  X0 U4 M/****************************************************************************/
$ ^5 r) O8 b0 L( g3 cvoid PWMInterruptInit(void)
+ v9 s, o' `. ?; Z$ m% n{% |* Y7 r" r- M* s
        // 注册中断服务函数
3 x/ H$ V. a9 o  g        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
4 z" M* G* ^2 Y0 W' @2 Y1 ~7 \+ T, B        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);8 ]$ X, X9 ^3 A1 H+ J' D0 _0 [

0 G9 k8 e0 r. h4 V2 t# Q        // 映射中断
, z0 I$ L3 S, i( ]' t        IntChannelSet(SYS_INT_EHRPWM1, 2);
/ p- a( J+ C& Q5 V" }        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
- e9 _. y4 I* w' j
$ o, h. Y: _; s: Z6 r$ f) f        // 使能中断; u) ?$ ~- `( O) d. R+ l, h
        IntSystemEnable(SYS_INT_EHRPWM1);; m2 M5 h( k; h- Q- q) Z5 B2 s
        IntSystemEnable(SYS_INT_EHRPWM1TZ);: ?7 {& O9 {7 j8 x/ u- x/ f
}4 c6 O& h+ i$ N/ X; ~- ?

) |% Y+ n3 H% O9 I/****************************************************************************/# B' Y: a4 k7 V" Z
/*                                                                          */! H% n. b6 H5 N8 p9 p8 a0 U: s
/*              ARM 中断初始化                                              */
; [% F, F: H7 P* y/*                                                                          */# ~7 [! D: r# _; c( \
/****************************************************************************/7 W1 `/ x' D" R' i2 ]) I6 p
void InterruptInit(void)% r* q8 l7 L1 g' n& K
{
0 b; a6 S3 R+ ^% }: e+ k, a        // 初始化 ARM 中断控制器
$ B# F) W8 b% f5 b) j1 C: Y4 O        IntAINTCInit();
3 d  I; \& u+ F7 M+ S0 d+ ?# z/ G  c. ]) N9 h- ?2 j7 I% h
        // 使能 IRQ(CPSR)
$ r' G) v9 a4 T' Q7 Y8 v        IntMasterIRQEnable();
; j% b: {7 B& C9 A9 o! B( U7 F; V/ K# A' z- ], G: Q
        // 使能中断(AINTC GER)
9 q0 ?1 P; s  Q  Y: P  \        IntGlobalEnable();
' Y3 X1 [8 A; m; I% x, w& T" Q1 F" }8 m, z% ]8 S) C
        // 使能中断(AINTC HIER)
4 B3 t( G' R- s        IntIRQEnable();1 g9 E* I. `, a5 @# L  p- U% A
}
% ?3 i2 i8 N( C1 u
7 p" y, v7 n2 U' L
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 04:02 , Processed in 0.052244 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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