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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家0 i# `4 W- \; ]9 q0 |" l. J* [7 o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
0 J$ B; w% @1 M, S/*                                                                          */  y5 x1 w  P; a4 [' ]
/*              宏定义                                                      */
/ C( r0 R, L1 Q  @  G/*                                                                          */; U5 N2 Q  h( ?. C. G9 @( r+ X
/****************************************************************************/
+ c1 o: @5 b! k2 b0 |, q' x// 软件断点) t- c' {/ h" F6 r* v& q
#define SW_BREAKPOINT     asm(" SWBP 0 ");
. m, ~2 s. a+ c" v
3 M$ d+ V" w/ L6 C) T// 时钟分频
, g" h- F1 Z$ e, x#define CLOCK_DIV_VAL     228
8 y8 P1 {0 y* T% ~% G" V
$ l% n+ {8 W; Y; d  m# P/****************************************************************************/7 u# c8 v( E$ P- L
/*                                                                          */
0 X0 ^6 ~$ L3 }4 b) z  s* N/*              全局变量                                                    */) F6 d/ H; T+ X6 P
/*                                                                          */
/ s2 x! h, p! f8 n4 }5 J4 \/****************************************************************************/
3 j8 C: y! t; \  ]ECAPCONTEXT ECAPResult;7 s4 q. f. g" e7 m2 ?
; A  V( c2 S! v6 C1 L/ S! p" [0 R
/****************************************************************************/
) S# d( K" x  k2 p; k) M  B/*                                                                          */7 c8 q6 Z2 J* \0 o9 U& I
/*              函数声明                                                    */7 a0 r* O( g; i( c3 G
/*                                                                          */
( W( O  v  a% I7 b1 g5 p. O. i9 p/****************************************************************************/: P+ e. V6 c& P: Y
// 外设使能配置
  a" P( y* `& ]. v3 T$ bvoid PSCInit(void);! h( i, e6 R; W& _- Q  z
/ f4 D% r4 Q$ T0 i
// GPIO 管脚复用配置
0 t8 B% F! ~( }6 d5 L+ g) Q0 |, ]void GPIOBankPinMuxSet();, C, L: t' K8 f9 X! P; F( ^

: W& B& b- W. \6 R8 X* i1 o8 ]// 产生波形
" O" I  {4 c$ L! jvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);8 ]! R+ Z1 I5 E# ~
void ChopperWaveform(void);$ K2 T6 ^) c0 y: E7 i% z
; m; h  \+ n. J: s4 b9 a
// ECAP初始化和读函数
) D0 ^' @& _$ R7 K0 @void ECAPInit(void);
; m9 H. s/ X/ I" [4 M) nunsigned int ECAPRead(void);
# \4 z% f& H, q# L" x: p, ^6 r5 r5 N  i4 |8 }" _  W1 `4 S
//ARM 中断初始化
! _* E- U5 K9 ^. o5 Uvoid InterruptInit(void);
  C7 v  `+ B* D. x# z
! f6 i# k* |( b4 W4 ^% n: i* r// PWM 中断初始化
" J2 @9 ^+ l& U/ G6 \) Cvoid PWMInterruptInit(void);; l9 i% Y0 R8 g: s$ I" ]# E
// 中断服务函数* }- f7 b! r, m& m% F6 R
// PWM 事件2 Z+ p  X5 _) F2 U  ^  |9 ^$ U
void PWMEventIsr(void);# K3 D! `+ W0 @* c" N% E. V" f
// PWM 错误控制事件3 H1 s$ w/ ?( C7 h! O8 ?
void PWMTZIsr(void);$ Y/ j+ J" J# m( u! Q

* @2 k5 Y/ @7 @, }1 g; p7 G& H/****************************************************************************/
( J5 W  T$ w3 `/*                                                                          */3 x" b! D" z4 n5 M) C
/*              主函数                                                      */
0 e# g: V! c9 i' D6 V/*                                                                          */
9 N/ G" g6 u9 s' Y  Z# F! I/****************************************************************************/
1 A  p4 O, o6 s7 g. Mint main(void)
# Y+ y- H& g1 y+ y% F/ @$ Q- d% Z- v{1 T/ B9 I3 V7 z. U3 m
        // 外设使能配置
( c: T) l& L. w, g        PSCInit();
5 l2 z" A8 D( [' U
/ e6 u' K9 g9 Z% |/ O0 s! S. b" ]* g        // 初始化串口终端 使用串口2% t  }0 ~' A2 w0 E! z2 I4 M
        UARTStdioInit();
; W# d$ U; c1 N! T8 Q0 Q       
8 O4 G- w5 G1 E3 r5 N        // GPIO 管脚复用配置9 R9 K1 n0 V' V+ v. B
        GPIOBankPinMuxSet();0 y5 X9 }1 X; X  T
, \) ~% B/ ~! `( F) f2 F
        // ARM 中断初始化: y- I: y/ J, ?
        InterruptInit();
6 z3 U3 z- G3 X+ O: q6 c% N
- f7 x1 k( O0 R& e1 K' J' l        // PWM 中断初始化
* @5 W2 P. U, S1 D: k: _& v        PWMInterruptInit();- I4 Q) f5 E, j9 z
. r* }0 T0 r! N  u3 o1 C( ^7 [! B
        unsigned char i;  q0 A' J6 T" C, z$ N9 \: s* h
        unsigned int j;5 h& U) g; q0 A  a* y9 {! S
  |' t  l# K+ t3 Y% ?; |
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 v. C- f$ Z  ]9 t" v/ W( w' R) {        UARTPuts("------------------------------------------------------------\r\n", -1);# y7 ?- Y, r( Y1 i
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);6 y, _1 f, k/ a2 }* \/ ^
        // 产生波形
% q' c0 }9 I: S        PWM1ABasic(25000,50);
! R/ V) w! h2 V4 h  G
' @: w* r, p$ X6 X" V' }2 A# ?& ~        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
  q) a4 @2 O2 k# s! v9 T        UARTPuts("------------------------------------------------------------\r\n", -1);* C3 }" K1 o: n+ n4 o/ K$ w
4 M+ M/ m- ]8 [3 }
$ s' o! r& G1 k$ i  b+ c

, W4 Z. \7 ~" [, r3 E        UARTPuts("------------------------------------------------------------\r\n", -1);9 S3 Y  n4 ?! g' L& j6 q
        UARTPuts("                    C6748 ECAP Test\r\n", -1);6 }" d* e2 f3 V/ k  T- P) r
        // ECAP 捕获初始化  i( H" |+ u% J( W) |6 y# Q
        ECAPInit();' T) l% P$ k) H) ?, G
        UARTPuts("Initialize ECAP.......\r\n",-1);& {  m1 q" h  C
        for(i=0;i<5;i++)1 I2 Z& a2 F0 O6 f+ W1 O9 _8 m& S3 Q& @
        {, a: a( J; i5 S7 Y1 w* m
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
! b' W) o4 e# D) t3 H  U6 |                    ECAPRead();
4 g1 O+ |9 U* \: ~        }0 s0 p; P, U/ p6 A$ T' Z, v; ]
        UARTPuts("\r\n",-1);, T- w7 u# u$ |
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);) @2 q2 q9 h# p
        UARTPuts("------------------------------------------------------------\r\n", -1);
3 ^# a% o, L7 b; q2 B. p% o
8 D4 a6 ~. R# I! w" T8 w' `! G        // 主循环
, R8 ?, d" ]1 J# h# A% D. f        for(;;)- _* w" w! ^! D& `' B6 V6 K
        {3 l: v% y- j% z- V
/ X; f. r6 A# Z7 V9 I3 t/ v
        }
+ C% s/ |0 z7 X}
5 S- ]3 r' m4 {( t
1 u  T5 z2 b1 L. _/ q/****************************************************************************/
- @# H0 W, e+ l, H0 ?6 \/*                                                                          */4 c& J% ^. N% t) _% s$ W2 F% V
/*              PSC 初始化                                                  */9 m  J3 c! l1 c
/*                                                                          */
% x& q2 C2 b/ Q6 e+ A/****************************************************************************/
' H! U8 @9 r, B5 e' r! Jvoid PSCInit(void)! k' Q0 [7 @* f: w4 J
{3 G; L6 v% f5 q/ r
        // 使能  EHRPWM 和 ECAP 模块
7 J9 F4 f" F8 g# W        // 对相应外设模块的使能也可以在 BootLoader 中完成* F2 o: G; b; c' O& W+ a
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);4 F9 e2 a5 Z% _- C; \
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ {  U: P5 I+ D, h}( I: P$ r# b( ?( b; _' K
. [/ p6 Z9 H2 R  k$ L0 T+ P
/****************************************************************************/+ f% U# y7 ?6 {1 P" K
/*                                                                          */: U) n- D; J; j6 ]8 C
/*              GPIO 管脚复用配置                                           */
7 B" r# l# [" F0 x. x1 ]4 P5 y2 X/*                                                                          */
# y' K: ]) `; M0 W+ A# V9 P/****************************************************************************/. |' h/ e) U& T1 z9 J& ~7 f
void GPIOBankPinMuxSet(void)7 b" y0 X0 u( e' l9 B' }1 @
{
* F# B  {  o6 i+ u% b        EHRPWM1PinMuxSetup();- D5 W$ v/ R7 ^0 `; g. W. x

; Z: `! h# X& m$ B& J0 l        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
1 g; {( T1 ~/ ~4 }) Q        // 作为捕获功能时管脚方向为输入
9 w  C, n: z* I- z        // 作为辅助脉宽调制时管脚方向为输出7 B4 z8 P2 o0 L. {; I) _; @4 j. b
    // ECAP2 / APWM24 Q1 b, n5 u% c) w
        ECAPPinMuxSetup(2);
+ R8 l# C+ h. f% B  \! j' }. C6 [- w  V, m( w* f* `! ~
        // ECAP2 / APWM2方向设置为输入! o) a4 {# k) _9 j
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
0 m# w' b& b( U; _8 V( j( g7 g}4 P+ \' k2 {  s; l( D% H9 _2 ~. k

# {( i) B) Z/ |+ H, q% ~+ X% k/****************************************************************************/2 z/ o" Q5 V/ v- X5 B  D
/*                                                                          */% t0 a' @4 \8 p" q1 x
/*              PWM 输出波形                                                */
2 x  \9 q1 e8 ~! ?9 T/*                                                                          */6 J. ^0 ^) A. P' N' R
/****************************************************************************/8 `/ Q0 m. F( o' G
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
# t" J1 W, \) v, s2 N0 @/ a6 J{
1 m( b$ p9 K8 \% U    // 时间基准配置
5 S# D) x7 a! V6 G$ `/ h. N    // 时钟配置% J" O) J- o& L' r  P* b
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
- T! h6 H: k. y) L% W, n9 q& ~* v1 [; N: t
    // 配置周期- b* F" N/ R  a( W- e
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,) n3 n$ z$ o: Q( E
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
6 B) B" p  h! z! ^( g+ C% X/ ~& l% }4 C$ w+ s& V2 D0 {, e
    // 禁用输入同步信号
5 V; l$ {9 n! c1 X; o    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
6 }) @. R& }: _( ?
3 P3 a) U/ p) [! z) {    // 禁用输出同步信号* E* Y1 P& m3 g4 T5 i9 L
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
6 I1 x0 j8 X1 M6 `5 v+ D" W
% g# N& g# i2 N( Q    // 仿真(DEBUG)模式行为配置8 B7 v) y% O* n& Q
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);3 @- M9 l  a0 p4 E" O! K0 D
2 S3 n" b( j! V0 h1 O% r
    // 配置计数比较器子模块
4 [+ G! ~# X- I# G    // 加载比较器 A 值! R% J, e+ f! I# i
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
- o% H- n8 ~! f+ A4 ^                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
! _* U. a& `0 x9 Q% g+ M% j
: o) R3 y# ~) i  @" u# H    // 加载比较器 B 值
7 X" N) c; n( @) L    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
6 l+ C7 }3 A( u  V                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);, z$ N! D; C+ P2 y9 k2 n

3 }9 U) D) D) S3 h    // 功能限定配置(输出引脚触发方式设定)9 e; P5 d8 n+ M! k% }. e
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
" b, y1 Y5 ]+ q$ R6 R9 Q( ^    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,; b" g6 I: s/ g/ [% H2 X) T; @
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,% ?  `- |+ |6 u  N% K+ I- r" Z' |
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
$ }/ P' M- o3 E  q6 `9 }3 l0 K
& L: y, z4 T7 d8 I- M6 F    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
5 @8 {5 Q- e9 S* c    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
4 K5 g6 |4 I: o) I4 g% X2 T
: T6 `+ q! h2 l- [$ E( F) z    // 禁用斩波子模块
3 a+ c3 S' I( b! g2 D    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
! j( h& N/ x: ?7 ]9 c/ e+ J7 _+ k5 K. x+ c' W3 j3 \
    // 禁用错误控制事件; c; L" U: x- _3 G3 }
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);+ D: Y4 c4 `/ ]$ a; U, y
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);+ y, W7 p/ [! D# G' _
) ?2 X3 `( O) p( b* f! b6 r+ a
    // 事件触发配置
, ~9 n; r, \6 B! s* o# z9 m4 ]    // 每三次事件发生产生中断
$ W9 o/ d! u3 W7 F' |    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
) d/ N( E4 J* |& _- w    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件6 G) ]: p! i5 e( b$ Z3 ~4 K
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
- o( m9 R: c* O8 ^. j; k5 ~: L2 c0 p4 @    // 使能中断4 d" P9 {/ }5 ~8 j1 Z
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);' s6 x3 C# j- {) P  T" ?& X

. S1 a/ l% G& a* _    // 禁用高精度子模块
# ?" [1 t* f; p( l" {; |$ R    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
8 P9 Z5 G! g* b9 b' q- \$ |& T" x/ b- G5 @' x
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
8 C3 b* D' w  e4 ]; e}
( C- V3 Y0 A& _* M
, p3 }4 }3 B( p' P! ~void ChopperWaveform(void). r2 Q: s/ k0 ~* V; Q! y2 ?  u7 k6 E
{6 |+ x  d% x" B
    // 50% 占空比
5 r6 G2 s# R4 x# q$ `7 E7 f1 M2 g    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
( ?; M1 Q) g/ T5 @! L, e    // 4 分频, C+ t" }9 |- U; s. i3 Z7 x
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
) j  |$ g9 }0 p    // 单个脉冲宽度6 F- f$ h/ U0 _' f7 {% p0 T  `
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);1 R. B, j4 ?. X6 n+ H$ i
    // 使能斩波子模块% e  z6 [- S4 V' C% W, v! }' J) F  ?
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);8 I3 S5 L% E6 n" g0 Y! B* [
}- ^% v, ^$ o8 \
: C7 E! `7 w( ?- [! U& p3 V$ b( a
/****************************************************************************/5 q5 B4 c) j* f' b4 |. g
/*                                                                          */
: o5 |) k: k1 {# f0 Q/*              PWM 中断初始化                                              */
) r5 h6 _, }: f+ T( \/*                                                                          */
$ y9 W* w  g5 u1 q+ n# @; w+ y/****************************************************************************/
, s" c! X( J" d% }. Fvoid PWMInterruptInit(void)
0 [7 H- @: @( Q/ f5 R$ l# ?0 d{
" Q- g8 d+ _$ l+ D9 u: v        // 注册中断服务函数3 w) x; X! o- ?0 Q  ?( i$ b1 F
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);$ k: L, S( c( u! L
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
1 J3 y5 M; k3 u1 M4 r9 D( S! g3 [9 b! `. O- I2 m8 J% B/ N6 g- L/ R0 q2 Q
        // 映射中断6 \# x0 T) F  [9 U
        IntChannelSet(SYS_INT_EHRPWM1, 2);9 t# a* _, F2 G! P, S' _+ h
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);0 h# v0 P+ d* Q
7 o* u% r8 m; M  a) C$ `
        // 使能中断
5 r3 O6 M/ C' E4 A' f        IntSystemEnable(SYS_INT_EHRPWM1);& d3 m0 k- }8 i. l# R" B4 T
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
% \2 y9 T+ u2 C, W4 r}& I5 `0 g, i# l/ c* {1 p6 e% d6 g

: w5 n5 V1 ?! k/****************************************************************************/7 A/ h  ]$ a/ g, S  [, a4 V
/*                                                                          */' y$ j7 g% j2 `) ~# [8 b
/*              ARM 中断初始化                                              */! W) ^# @# W) k; |2 |
/*                                                                          */
7 F6 r- H6 f+ d& i/****************************************************************************/
4 P& t. ~# {  q* U  ?void InterruptInit(void)' h3 J* J0 ^" v+ q( g3 a  N
{
4 X/ \* C3 w) {& `2 t) e6 F        // 初始化 ARM 中断控制器
0 C4 x2 e1 K4 f+ S. C: R* m        IntAINTCInit();
2 ?/ Q" }) N3 z4 N( x
* m: E; v' k. X0 k0 p/ j        // 使能 IRQ(CPSR)- \+ x, J& T. t( b
        IntMasterIRQEnable();
. e# R7 b+ f1 h6 f" O) ?. C
6 O  N" x' |* }4 @1 v( K$ y" r/ l        // 使能中断(AINTC GER)# i. B3 e: C- `4 i1 W% e; n
        IntGlobalEnable();/ F9 j7 S3 P% y* t& E

4 R" p; g4 `1 P  {* |$ Q        // 使能中断(AINTC HIER); T( v* J0 n3 C
        IntIRQEnable();  m! F  }8 y& E4 \+ e
}
  z" V; S& V# w+ D$ b1 D  [
2 r4 F; J0 I/ R* `5 B0 `: I
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
8 i! e+ E5 |( y. X( l: s5 o/*                                                                          */
5 m& C) H1 O4 r3 L8 N, R/*              中断服务函数                                                */
) T* W) X9 p. i6 B' ^5 r' B: E/*                                                                          */
+ T) M3 z* j4 Q/****************************************************************************/3 O, P1 ^3 e' r3 i( Q5 L& ]8 i8 C
void PWMEventIsr(void). w! X" ]  H' B
{1 j* ]5 r1 z$ W) p
        IntSystemStatusClear(SYS_INT_EHRPWM1);
$ a* z# l4 R! Y2 u: B" k3 }# ~
: O( _# D6 m2 Y, H+ V* w, U) a- P/ {    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
7 r: p$ P, T2 n}: u) O0 N7 P1 T7 K8 i# T# ~

4 v' I! c6 A, p$ u  n% k2 n7 Dvoid PWMTZIsr(void)' m. |/ w: L. [  Y6 t) S; R
{
" C1 W  R& f" U9 Q! u- z6 W        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
( |4 P4 \/ w9 Q% L. k% A) n" k4 K% ?: o/ P: P/ J% r1 T! J9 i+ r
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. D+ C. o+ K8 f6 ?}2 i; T" S; U) g. k2 [" n. |
8 ]7 V, d0 ^" ~, W
/****************************************************************************/
6 q9 `: j* T7 n1 \, T/*                                                                          */5 t- M" y9 u! w/ \6 }
/*              初始化捕获模块                                              */* Q8 f" J5 ~- ~8 H" L
/*                                                                          */
& P% K9 k" a/ R8 m/****************************************************************************/
3 o1 R& Q, T+ mvoid ECAPInit(void)( U5 m7 C: A! _2 {$ T4 r3 u" E: e
{
" `, f, ^! s$ ~4 E0 d6 E; y        /*-----设置 ECCTL1-----*/
; r6 d" F0 C8 ], R9 N        // 使能CAP寄存器装载
$ M1 T( b0 J7 @& f# O7 Y* _$ A        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
: K$ `0 D  A! C, |5 L: S& v& u        // 设置预分频值.4 F2 a, _  u/ ]4 X- W3 U6 E" M
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
( @' p( b4 ]0 J1 y        // 上升沿触发捕获事件# G' _) a+ Y  r5 Q
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);# p& v7 Q9 z! ~2 t/ }; r
        // 输入捕获后重新装载计数器值.
* F; |  b$ m. Y* `: K        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);! t4 l% ]) b0 D& e  F7 D

( C6 E9 h% Q! ]  |        /*-----设置 ECCTL2-----*/3 X2 I0 ]7 j: w+ k  h
        // 连续模式
+ k5 {) f- E. \        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
2 ^' [* k" n% F  p$ ~        // ECAP计数器TSCTR持续计数/ B/ w  D5 \# n! ^4 H0 H/ Y1 z/ T
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);0 }3 }3 v* w) p+ g: |
        // 禁用同步输出和同步输入
( r3 C  R1 k# C$ O        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
  H0 n" G: B2 R: q7 q8 \) b7 M        // 配置 ECAP 2 为 CAPTURE 模式
# R" b3 u" m0 a+ m* W; c( J0 ~2 d$ Y        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);# `6 C. r# ~, @# J" H- _3 }
% w! r: N& ?; u# u+ h9 \
        // 使能中断- r! L# z' R) i9 Z7 E% R: e8 s
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
, q% m9 J6 k  A$ N}& f# B% f! m- y4 ?6 Y. ^

  {) ]' l& S; s/****************************************************************************/
6 y) a& t  ?; u/*                                                                          */: B2 W2 V) }, L" j8 }9 b2 U( C
/*              取得捕获结果                                                */
  W3 H& V1 M' k* k( R+ v6 T/*                                                                          */. [9 M+ |& u/ M( ?, F! n/ K
/****************************************************************************/
6 \- y8 M) k4 e- v8 }unsigned int ECAPRead(void)0 q' c# Q, V  N
{
# S! W% a7 I" ]' R% O) d        unsigned int capvalue;  x/ U" {6 M( s& U9 V
        unsigned long frequency;. z; l# _5 ^/ f7 L, h% o/ Z6 b& i
6 s3 M, i% _6 O% J, o0 B
        // Event1 中断标志
) w3 |6 i2 f9 m% w& }        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))+ P; T" {9 J  i
        {. j% W1 u, B  G  S. p- l
                // 取得捕获计数
: _0 D$ E7 Z0 L- u                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
, d2 [* e( s! f) f. C% p                capvalue = ECAPResult.cap1;
0 U9 S8 }! H- Q% g0 F
: N6 D& r0 @, e3 x                // CAPTRUE 模块 228M 时钟主频# b; C4 Z2 [* E: P' t
                frequency  =  228000000/capvalue;) E6 I0 Z! I  i0 I: Q/ `
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);/ T# X7 |1 k4 C, @- x

4 g- w$ t% z1 _. I                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
5 f+ i3 O, C0 ^% k+ Z, a2 s2 F9 p//                IntEventClear(SYS_INT_ECAP2);2 d1 h: a$ F( X, J, d
        }
6 Z3 C' L' p1 G2 |0 K        return frequency;8 `& `6 H0 i" I0 a9 h
}
8 p2 ?# G: w! x5 F/ I
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
3 z% \4 Q8 T- p" l/ ^1 w2 G

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-7 20:47 , Processed in 0.049960 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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