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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家  X. }/ V- m* O: I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
+ c1 s9 j& D+ d+ u/*                                                                          */
* ~0 k; n9 O  [$ N/*              宏定义                                                      */
* a" f. w! n8 d7 i/*                                                                          */% s, v, H; A! a5 z- \- N
/****************************************************************************/
# D  g3 p1 N& v// 软件断点! z/ b- P7 }0 k& n8 g
#define SW_BREAKPOINT     asm(" SWBP 0 ");% S' j! n2 u& H1 [1 ^8 _! Y

1 p0 n" b8 y% e. ~$ h4 E// 时钟分频
( m  b) H* S: }! z#define CLOCK_DIV_VAL     228
, J$ ^) b8 B4 g% j2 Z, \  n: }. h3 H- J" a9 Q0 V" U
/****************************************************************************/- a* M9 U! k7 K. v& _/ o" q
/*                                                                          */
6 a3 W0 x; l( [7 V" K& e$ F/*              全局变量                                                    */
5 p7 e  ~5 k( Y! M/*                                                                          */
& H0 q% n7 x5 ~/****************************************************************************/  L) p/ L& {& v. W5 m/ ^
ECAPCONTEXT ECAPResult;, i! k# p, Q" \0 `$ |$ _

+ C7 L. ?; H7 `& e3 O" p3 z/****************************************************************************/# X+ z+ a" H: e# @$ V% w
/*                                                                          */. k- g3 c1 u3 m+ c
/*              函数声明                                                    */9 z# d5 @0 A+ u/ K& U4 @) {
/*                                                                          */9 [/ {6 X) `6 e- r7 |% U7 X$ b
/****************************************************************************/; f# ]- v8 j6 Y8 w/ A
// 外设使能配置
* f: S) A' G+ M! avoid PSCInit(void);
/ g% w' x, E9 b1 A
8 _- R4 ]& B# c& H1 ]// GPIO 管脚复用配置
& C  S  J) ~; ?1 e' ^8 a7 T& Avoid GPIOBankPinMuxSet();
9 `4 F! v1 a) w3 E, r
3 F. l. |. X+ w( V" x6 e; N// 产生波形
- K4 ?# ~9 @: L" T8 c$ Uvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);# d0 j2 Z4 V, o% e7 w! S0 w" h
void ChopperWaveform(void);
2 N) ?; v. X( x" n; s# A0 ], s4 W- |
% I3 O( P! Q' n  y1 n5 k$ c+ {% V// ECAP初始化和读函数
, u9 \8 T7 G! S, dvoid ECAPInit(void);6 Q6 Y8 Y. t) v) e1 Z4 B# g0 w0 ]" u
unsigned int ECAPRead(void);
: r3 m: a. `) A8 X. s1 l
- g0 T0 f2 p  A2 l2 z4 v+ q//ARM 中断初始化
9 R2 J0 b) D4 e, h2 c. Qvoid InterruptInit(void);
% L: m- R5 h8 l# x6 k% I$ w" C* j
// PWM 中断初始化3 g7 y3 @) }) K$ Z
void PWMInterruptInit(void);; R. h; X7 a1 ^* X" G
// 中断服务函数
* ]+ O1 U( n; [2 Q// PWM 事件+ a/ d5 Q9 K- B; G3 {" M: F
void PWMEventIsr(void);
8 V6 U( t" ?2 l' k6 }  s& X% `// PWM 错误控制事件
" c' a/ B7 r/ S: }* Mvoid PWMTZIsr(void);4 [' q& W8 _$ E: L/ Y
* P# L* s' T0 b; @
/****************************************************************************/
( a2 ^3 U1 b& N( r; O' t; z& s/*                                                                          */
/ t# \2 d2 ~, H/*              主函数                                                      */) k8 t* Y9 b/ O* D
/*                                                                          */: `" Q; x: |+ U. _
/****************************************************************************/
6 k! Y9 ?6 u5 _int main(void); D1 d0 Q0 S+ A; M$ {! K5 S1 I
{
9 l; l! ^7 r$ e# I: d" F3 r        // 外设使能配置+ U6 m- s( ~' I' b
        PSCInit();
3 ^. _/ `5 |9 A5 [
: I9 e$ g$ ^( s* E% z$ j+ n4 b6 a) j        // 初始化串口终端 使用串口2
0 j- Z1 c3 l, s& q' @& M) e        UARTStdioInit();  K6 U3 ~3 w) B% u
       
% y) y/ e$ r% C; ^        // GPIO 管脚复用配置
& }2 X" X/ Y/ K6 u% A8 V        GPIOBankPinMuxSet();' A" L* P% l, g6 ]# k/ d

7 U9 W2 ^1 G$ G4 O1 V9 T# q        // ARM 中断初始化1 e! p3 {' _+ _5 J7 i! {) B
        InterruptInit();
, n% G+ A- ^5 T+ ?
8 A3 g- M) O# n, `9 P+ h' Z        // PWM 中断初始化
8 `# W' ?1 w+ C        PWMInterruptInit();
2 K4 Z6 M/ d4 h* q' K& h8 E) I0 r7 j) S& u5 _
        unsigned char i;
# z' R( u7 h. z- R5 j        unsigned int j;  F* y1 R2 I9 J  t6 T

4 v) v: U( ], N0 Y1 j5 U! t( {* Z        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);& \4 r% Q9 B1 A- `) U
        UARTPuts("------------------------------------------------------------\r\n", -1);$ q$ q; |' X1 @8 L6 B; T- m
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);6 P6 i, _9 k$ e, @4 J9 I5 h+ T+ p. m
        // 产生波形) v; C# I" N) ?$ @  V
        PWM1ABasic(25000,50);
3 |% m3 K8 j' h9 x' \  X
+ _- c- Q1 \* \        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
. i/ _: T0 e) i$ @4 w0 M        UARTPuts("------------------------------------------------------------\r\n", -1);3 `; w1 U6 q, q- j* V4 v2 u

* E" e7 E* e+ O* R# @' Y! r
  N6 s3 B' X) P2 d: W
2 q3 ~+ V2 m6 G7 i: I        UARTPuts("------------------------------------------------------------\r\n", -1);9 y, G8 J& G1 M7 v' \
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
% [' A# V: g) d7 R+ N        // ECAP 捕获初始化2 ^) y' z# X, b, O2 c$ d+ }( I
        ECAPInit();. X8 U9 e% E& f! \# d
        UARTPuts("Initialize ECAP.......\r\n",-1);) t# t+ ?9 V; f' y6 p4 E
        for(i=0;i<5;i++)5 E3 o, ]( b& ^- U. U" I
        {% r. Y9 ?3 O5 v9 c  n* t
                    for(j=0x00FFFFFF;j>0;j--);            // 延时' t5 r! q, O$ o
                    ECAPRead();1 {9 S: y& s( W, e4 _
        }9 _* D! ^4 q+ O. Y9 ]2 x/ i* d
        UARTPuts("\r\n",-1);
3 C5 X1 h5 C+ ]9 l: y+ g7 X        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
+ t* m3 f+ L" h5 z( ~% h% C        UARTPuts("------------------------------------------------------------\r\n", -1);* j- T$ _; h" [% c3 H# i
. c6 s4 M0 I5 j5 i, A+ A- ?; u6 [
        // 主循环8 J  {4 }+ U2 V1 j( j$ f
        for(;;)# I6 V4 I: @0 u& V
        {& I3 W, B; K# B' \- D& m
/ L8 H- N. R$ D/ x
        }5 c# }- O  E/ T* d; B
}( m- ~, ~1 u; Q' ^, ^8 h6 h

& L' F7 h# z; y: u7 D$ c0 I. M7 K/****************************************************************************/
  N$ T8 s/ Y  T1 ?( Z/*                                                                          */; V+ M- o! I6 c/ P. h- h4 J7 ?
/*              PSC 初始化                                                  */
9 a2 u; U2 I3 P3 g" z9 k! r/*                                                                          */$ a: u/ @+ k4 F2 j0 H
/****************************************************************************/; y* }! }+ [( A; z  d2 O
void PSCInit(void)
0 v8 d$ k  o5 a% Z/ E, p5 ?{% r8 _  |2 `/ m
        // 使能  EHRPWM 和 ECAP 模块1 d. V  Y( F) {! p9 \$ G5 S
        // 对相应外设模块的使能也可以在 BootLoader 中完成
1 j" Z+ z2 K( l$ ^1 s    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
7 d4 U3 o3 j; `$ ]8 g* p% J    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
* g' {" a, l% N/ G% y}
; i3 y: W1 i, l: V0 q+ @$ I+ d; y8 Z4 C7 v" z  o
/****************************************************************************/1 t' H! n8 g+ b( U# m/ i
/*                                                                          */# Q0 S' m. E7 x% I4 t$ w+ S
/*              GPIO 管脚复用配置                                           */& n1 ?3 U  a! z6 J7 M
/*                                                                          */" s: P6 Q1 b" I, H$ W/ q3 i
/****************************************************************************/3 m& a0 U) C2 j* o' p0 L
void GPIOBankPinMuxSet(void)6 C  \" Y7 b9 p4 `3 e, `( U
{
" f7 E, _# k" H/ |, Y  a% a1 W        EHRPWM1PinMuxSetup();
% H5 ]7 A% s+ A
" D( _6 p; {. Q9 w* D' S7 ]        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)# [7 ?) d4 W1 I) d/ M
        // 作为捕获功能时管脚方向为输入# L! v9 y% F% y$ Y+ @- P
        // 作为辅助脉宽调制时管脚方向为输出- b" a/ _; k  u* ~8 M; [9 |& o3 ^0 H
    // ECAP2 / APWM2
% \0 C/ b' B( s9 r        ECAPPinMuxSetup(2);
/ k5 o; K9 t$ b+ v2 q1 r5 `: V) j. Z8 `$ U: Z9 T$ ^, d
        // ECAP2 / APWM2方向设置为输入3 r6 t( W' D/ q1 F" K
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]* I* U2 c% `/ v5 {% d( Y
}
# p" i9 M2 x5 y% ^
9 ?4 y, K# |0 ^( M6 `* L% E2 ]/ M/****************************************************************************/
' b& ?; n7 ?# F" m. Q3 x- X+ ]& o/*                                                                          */" j" K# g" g% I: p
/*              PWM 输出波形                                                */" S* d$ L( I4 ^( `
/*                                                                          */
+ E8 B' [2 a2 m/ j  O" T/****************************************************************************/# `+ g0 f7 z" T: ?% s9 S4 `
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)! p# l, O3 r( ~: y% Z3 B1 M& x, g
{: ?: M7 [/ }) g+ C
    // 时间基准配置/ j3 p: D* g: C
    // 时钟配置. v( R# y- S9 m4 N2 F& Y
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
# D! a' ]9 @6 }# A0 _! k: n9 c# M8 E1 s) Q8 u
    // 配置周期
3 M: O: X6 z3 C    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
+ K! C3 o0 c1 N8 c( C                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);4 ]! F) S2 r2 J- b8 j$ D
5 Z; E% f' W1 z, k6 t& R
    // 禁用输入同步信号% j" h5 Y5 s" S3 `8 Y
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);) H% j0 v( t' h( s1 ^

; F& n5 u0 c  i7 t  @3 z    // 禁用输出同步信号
) P. i: N( m) Z5 V) Y8 f: d. U    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);7 X' U8 s+ e0 s
) d9 H) r2 o) w& l' \# i
    // 仿真(DEBUG)模式行为配置
7 f) W4 Y- W# b/ c    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
# f( R2 ?4 K9 b
! M. _4 }& ~6 s# U/ g    // 配置计数比较器子模块
# T- M3 N. W$ J2 p/ L) Q$ e    // 加载比较器 A 值
, i- D& S6 M4 E) G# z$ r; u5 D    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
6 C+ {! R( ~. [& w- g                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);+ ^$ ^/ G# [; w3 b' v

  _8 R( b) i$ \( c: w! d- P3 \    // 加载比较器 B 值. n1 J6 a2 a$ P
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
9 J# G$ |1 W" X5 n                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);  h; Z  G( ?8 A

; k4 u3 q  \7 l+ a    // 功能限定配置(输出引脚触发方式设定)/ R+ B" H2 o) }
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出. ]0 S  b+ F# G  s& g6 X7 V4 V; v
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
9 Q3 u) f" d9 V; E+ W7 j( Y                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,  X# \" u, O; j$ N( w$ m5 @7 E
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);; I9 k9 B2 C& y

* L* T; y! x/ j8 y7 y    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
+ g+ }2 e: o. J9 e    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);; f, U  j7 q$ E
) x( q" j- P1 a  A  u
    // 禁用斩波子模块: _3 q2 [9 {) o& K. Z& d
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);+ P) C( |, _) C! v. e$ ?

# ^4 \$ t* e+ s4 U    // 禁用错误控制事件
* \* q, ^- M; \4 _( M    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);: c  S; D8 J' A! v# Y4 p* G
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);# ?( H4 ~( {6 P- v
3 ^. l0 d0 u: `+ I5 p7 [$ S
    // 事件触发配置
' `* R6 A5 H+ s5 ~8 i  W/ w" ?    // 每三次事件发生产生中断: G8 s& F, w: D: L+ h& P' `+ z# L
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);' i  o1 h4 h: ?! e  o
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
; C) P2 o0 j( K4 Y    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);4 d7 Y0 F6 G; j- B3 V
    // 使能中断
% i& }6 a. _# W$ p* t$ a    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
6 G" \! f) K: I' V& v: f1 q: @6 \. M0 k" n1 {' M+ {3 U
    // 禁用高精度子模块% I9 W9 {5 R; [- Y% }) K% z
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
1 K. V2 S2 y( X- G8 |, I' m4 Z' ~6 q8 b0 _5 p
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
7 ^4 p7 t/ V7 q5 O}' Y) i9 r, O7 q/ }
& {8 j/ L0 b- t
void ChopperWaveform(void)
) a4 u' S$ K- p* O+ ?# f{% v. T; v! w+ _* w  E
    // 50% 占空比0 g* n$ t1 V1 r9 `8 |  V2 t
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
" n% G' E7 h1 T; k  E3 r( Q    // 4 分频
# ]. P- {9 s0 @, R2 W+ H- P8 M    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);( Y( \7 G1 k9 v+ ]6 O- X1 c
    // 单个脉冲宽度. }( i& i; h! I5 }$ N, W
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);* Z6 G, {& i5 T% ]% p
    // 使能斩波子模块7 `7 J0 A# {! E7 I  b) E  `
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 u7 x' C( [! l* _3 @6 M% X}
$ Q  n2 M3 B4 z! L$ N6 R4 B; h+ S7 f
- `" p* j$ l6 i4 {: X& \/****************************************************************************/
% ?6 T$ S$ Y1 K+ B' G0 p# Q/*                                                                          */# k: j: O7 W. ?, W: \
/*              PWM 中断初始化                                              */
) i9 u, R: e/ U: B( [" O) I+ \/*                                                                          */
/ ]$ o" h) _+ U/****************************************************************************/1 N0 z# c7 Y  [" @
void PWMInterruptInit(void): M. ?  R. ^- n+ C
{+ I8 m3 f) T, @) N+ i
        // 注册中断服务函数
% _% ~% ]) ~0 j2 h: c. i, T        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
3 m+ w4 M+ d; F4 U2 g        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
# }) S- [) Z  \$ [( y0 }
! v& a7 q  N+ X6 [, x9 R; A" `        // 映射中断
/ M0 T# @" x3 V# Z; _5 d4 ]' v        IntChannelSet(SYS_INT_EHRPWM1, 2);
# o4 N* y9 }0 V        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
# \) N  D! V. @2 s/ ~+ d; K$ G! C+ [0 I3 [. L  J) x- \6 k; ]
        // 使能中断" a# U( s2 n8 f% n6 @7 Z' Y2 q
        IntSystemEnable(SYS_INT_EHRPWM1);9 p% Q0 m2 V1 c& v* t
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
/ [0 W9 Y1 z5 Y  J: U}
) D+ f. s4 }2 f1 l4 R
! S: h/ Z" X7 E) A# s% e/****************************************************************************/
* l9 t, b: D2 [% j: G! M, r& W/*                                                                          */
2 V2 M* o; C. [! S7 G/*              ARM 中断初始化                                              */& ~( \6 [" }* Z3 A
/*                                                                          */
/ n  U1 G) J0 Y5 [  I/****************************************************************************/
) \: `" i) }3 [6 G9 avoid InterruptInit(void)! Z6 Z# \/ b( ]: B" N; n
{0 ^  l1 w9 K# ?' f8 g# Z( \
        // 初始化 ARM 中断控制器
8 Q8 b5 i8 @. s- j" f. Q        IntAINTCInit();
! c$ n' M5 \1 K- k8 d6 }. n* z( R( E- U+ q" g
        // 使能 IRQ(CPSR)1 a* k8 j) h& {1 B
        IntMasterIRQEnable();
; o& v5 v! a/ o0 R2 H2 m, p4 e! e
0 s( z% ^3 D  n$ H9 C+ U/ u        // 使能中断(AINTC GER)
' a5 Y& g3 _3 p+ q. z  \/ U6 }        IntGlobalEnable();, o; v. U+ f. `+ ?
3 P# H  `( D  e7 {4 x' m
        // 使能中断(AINTC HIER)
& o: n* G& v/ |; h' J        IntIRQEnable();
5 _3 ]) w) g- N. G+ B. \- J}
( Y4 J: ^7 n. ?4 v" ~/ D4 H# i+ ~9 U0 i7 V4 H9 l, A9 l" Z# T
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
2 O+ u# M2 F2 W! S$ @& w/*                                                                          */8 ~2 D. g' _0 A: Y
/*              中断服务函数                                                */
  _4 h$ d/ D  n$ H# I/*                                                                          */
, G3 E0 \: ~3 i# A" ^1 C/****************************************************************************/2 n! o6 p' \9 E& C: R+ M
void PWMEventIsr(void)& c" U6 K& Q7 |+ E' F
{5 d6 e7 Q6 z1 ~/ f) _+ T+ e5 s3 r
        IntSystemStatusClear(SYS_INT_EHRPWM1);5 L2 _* g7 w$ M! l6 {0 s
0 S0 \* e' g1 T
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
2 t4 ^0 x( L5 W* s}2 V1 {% m% N% }6 ~' `
; i' ?8 ]3 s! {$ `$ p& e0 F
void PWMTZIsr(void)0 x9 V: s- T2 }; [: A" x$ y, q
{
, F/ [& t8 {- e; M) q/ i        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);2 U  E+ k5 c! c2 G& ?( G) h4 P+ L4 ?

, O4 y. R" l4 M; d2 b3 Q9 ]9 `5 p6 [    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
7 n3 |& I7 x" L! S1 J}+ m: }# u4 B! K# A7 Q, m! @5 R

& H( h1 ]( X/ V8 u; [/****************************************************************************/% `  H" e( o* R" B( y
/*                                                                          */% C8 E( `: S4 }+ ^# I
/*              初始化捕获模块                                              */1 d1 w' V5 T: M& ~
/*                                                                          */
* `6 V. ~$ ~6 N/****************************************************************************/1 r0 V6 [6 p; @
void ECAPInit(void)
+ e  |4 c- F: [+ O* c# y  B{
3 d, K  J/ @& a: b        /*-----设置 ECCTL1-----*// M. S$ i- z0 J) A4 T- ~4 V6 l
        // 使能CAP寄存器装载9 Y! L  Z3 f: M+ l+ _/ C6 {
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);& ~' ?) Q, p, H" n
        // 设置预分频值.- x* ]5 a3 l$ M3 H
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
! R9 m& Y, t0 M# B0 K$ |" B        // 上升沿触发捕获事件1 H0 K5 Q* P" ]$ t9 ?% _; [
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
7 n- i, q5 P  ?* R        // 输入捕获后重新装载计数器值.; ~% U- c0 c, q% {( `
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);, t$ W5 x* h- M5 f# _" t

9 w6 Z! }+ j: U$ t        /*-----设置 ECCTL2-----*/
# q! G" g* F0 l% a( h        // 连续模式
1 c) k$ z6 P' O! U" n        ECAPContinousModeConfig(SOC_ECAP_2_REGS);/ V4 U  d# @7 H9 I6 Y3 s9 h* t
        // ECAP计数器TSCTR持续计数7 N) n# [  j7 k* f
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
3 y& c2 c  @0 K! w* p        // 禁用同步输出和同步输入7 e5 M1 a' _1 }; O. B9 A
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);- T1 S5 e- `2 }- x: n
        // 配置 ECAP 2 为 CAPTURE 模式: g2 j# X- w* ^" D" g, s
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);# R- w4 s, I+ \

0 V! }2 g- b: }        // 使能中断7 S* g$ f  `  m) U8 [- R9 d6 t
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);  y" X+ l, r" Q; s% J
}
" T7 x- P% f% x" t/ F% t6 |' U
. l' u, z7 n' X% b: h/****************************************************************************/! S8 y+ S$ H9 W5 J6 s! L
/*                                                                          */' L; s* V1 S5 R& g/ |5 P$ R
/*              取得捕获结果                                                */
$ Y+ G1 V3 |0 |+ b8 l5 `" [/*                                                                          */' {3 f4 y! S, ?% l8 ~
/****************************************************************************/8 f6 {( K5 o/ s' ~" b
unsigned int ECAPRead(void)9 H, w0 c# H) T
{6 y( _) p7 M" v9 O7 O, [. a
        unsigned int capvalue;
( I- V+ [0 t3 `7 g5 L        unsigned long frequency;
8 a) f' A6 W4 N$ z  e
6 x+ _- l+ t9 h        // Event1 中断标志
& f1 _5 B7 O3 S( B( K        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
$ q  G7 b* w, ^8 T        {
2 i% h  D" G1 P                // 取得捕获计数
- M* L( b. H6 M                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);  u) z. U" b/ r1 J( d6 i+ x
                capvalue = ECAPResult.cap1;0 m; E/ Q: M2 t( u4 o: W

5 l% m$ `0 I* H* R                // CAPTRUE 模块 228M 时钟主频1 p0 a3 K9 n8 n# s9 l- V
                frequency  =  228000000/capvalue;
% V+ j4 X' f4 K) }' A                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);  `" V" @' l' C2 Z

' j: N1 W& _; k. m( h                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
1 t6 y6 c/ _1 o( z5 p" s//                IntEventClear(SYS_INT_ECAP2);& f, m& r% p8 g3 j3 @: Y7 i+ B
        }- Z' l( j4 X( m% N1 x  F$ P
        return frequency;
$ u* G! A0 J( {# [0 Y; }, M}
0 u7 M- {4 n8 y
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
地板
 楼主| 发表于 2018-10-30 17:58:06 | 只看该作者
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
# n$ D4 N: h- R! q

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
6#
 楼主| 发表于 2018-11-1 21:27:34 | 只看该作者
可以给我发一份吗
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
7#
发表于 2018-11-2 08:51:16 | 只看该作者
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-1 10:31 , Processed in 0.164471 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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