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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
7 ^4 b/ `' w$ _* V- N( M3 V% z/*                                                                          */
! c# h4 N) W& b( N; o$ Q1 |6 e, P/*              宏定义                                                      */, h# V$ i  B7 N
/*                                                                          */
% w2 h1 U, B; X: ]5 g/****************************************************************************/
6 h/ ]! p9 a: J5 Q. k// 软件断点! ]8 d, V* B" u% J: j$ f
#define SW_BREAKPOINT     asm(" SWBP 0 ");0 k: J7 ]0 w8 D5 T2 E0 d, h
% x% t2 u0 Q" o9 }& u$ p! t6 Q
// 时钟分频
) G4 L5 l! Z! U- l  S1 @#define CLOCK_DIV_VAL     228
2 `: t& U% O; w! ^8 ]* ~( ^/ M/ e; h0 y
/****************************************************************************/& E/ v% I( ~% R$ t( \
/*                                                                          */
$ s4 [) m( B& K# a: z/*              全局变量                                                    */
8 J  l. W( @4 v0 f/*                                                                          */
5 F; `4 b( }+ O7 ^* m/****************************************************************************/) L0 O; ?) J% y: J$ L3 a" q* Z! e1 F
ECAPCONTEXT ECAPResult;( n  s" Z: z6 |# y- G# c. w7 ^/ E
' H+ y( U' J9 R( M/ [+ V
/****************************************************************************/
& d7 V- z# ?, T/*                                                                          */7 o5 O, @  Z; c" v
/*              函数声明                                                    */
$ D& {: b1 [) W5 R/*                                                                          */
. {# S! O$ a7 h  H/****************************************************************************/9 o8 i: S/ U2 C' {8 b: s% j* g
// 外设使能配置% |* p% w; }( Z0 a9 ?
void PSCInit(void);
- R8 x; B$ V# x3 N
) G7 A) L% L9 a' F// GPIO 管脚复用配置
; w& w4 m6 R/ jvoid GPIOBankPinMuxSet();
" f2 [! m; F; g4 W( B+ u+ N; M# B: i! J
// 产生波形
+ W! S  E% k) J8 X+ D5 Uvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);' p- U4 `$ `8 Q! O" t3 I* J( a0 y
void ChopperWaveform(void);
1 u$ |% t' h+ U7 d4 Q
4 z4 L+ @: D+ P; d// ECAP初始化和读函数+ P, F6 \& @* m; j- I
void ECAPInit(void);
. v$ I( m$ I. t- O# E5 f4 S% H, P2 Uunsigned int ECAPRead(void);, t6 ^+ |  E' ]) m; _
& r$ A3 V4 m# Q; m. y
//ARM 中断初始化6 ?% {; D6 h4 b
void InterruptInit(void);4 }9 a3 @+ S2 I4 M7 o

; C- N3 h2 _7 t7 X// PWM 中断初始化  d9 R& d# Q/ N3 v( Z
void PWMInterruptInit(void);
- o$ R! @% k/ P( E// 中断服务函数- A0 J2 b9 @2 Q* A
// PWM 事件. f0 u# B) T+ k
void PWMEventIsr(void);5 n) J( W. e% A6 B8 N6 c
// PWM 错误控制事件
7 R9 M5 i2 |6 G. [; s' q# w0 m: O' zvoid PWMTZIsr(void);
! V2 ~# o. ~% C. O5 z6 o- w; d. [4 \8 u
/****************************************************************************/* M4 C6 ]1 b3 R2 ~7 J  M3 s
/*                                                                          */
) P2 r2 T; V3 h! @/*              主函数                                                      */
( }7 r  V" w/ P8 s/*                                                                          */6 G4 @5 R9 b4 ]5 M1 I2 s2 r
/****************************************************************************/
6 n1 f3 m, c3 j" u( i* Yint main(void)
/ ]% ]+ T& I; ^{
  U5 C# J8 Q0 F6 I0 ?        // 外设使能配置" {$ y) g! t5 p  r7 i
        PSCInit();
% I' `5 G, p% W8 }( q- h# u3 L+ m! _$ Z+ @! g
        // 初始化串口终端 使用串口2
, a6 }4 S, J4 ]8 }6 f        UARTStdioInit();
- Q1 @0 Q6 q! t2 [       
/ `7 ^) A3 N4 Z; L' C) q  z        // GPIO 管脚复用配置
# ?8 u8 F0 l# ]+ R) D        GPIOBankPinMuxSet();
& `* X0 L6 Z' E) W2 ?; W$ j+ i# C$ W( X& q, N1 `
        // ARM 中断初始化3 r. f- l9 {+ F" L
        InterruptInit();: q' d3 r1 T2 g& X5 \/ _' g

: P( }4 {/ I% C& D% n        // PWM 中断初始化1 K% _' a% _1 M  T+ X/ e6 _
        PWMInterruptInit();
2 G, ]- H8 X4 s0 D6 I3 {
4 M8 F9 `+ U$ K9 v; n. D  D        unsigned char i;
7 e* }0 V) `% C" o( }) v1 E5 {        unsigned int j;
# d4 C2 t; U  A) E. Y* I5 I/ w! K
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
' o6 n1 \' D' }9 A2 |; k; ~. a. @        UARTPuts("------------------------------------------------------------\r\n", -1);
  v- S% k5 |, ?% j        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);9 k; ^' S* E, R7 o' v  G5 E
        // 产生波形4 ?5 v+ T3 G, A1 {7 n$ t
        PWM1ABasic(25000,50);
/ p8 d1 i* O0 H# V0 A# r, }$ @8 b4 X7 _
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);0 F, T/ U4 v6 E/ E& m$ l
        UARTPuts("------------------------------------------------------------\r\n", -1);! I8 e) R7 J8 }$ i0 C6 v

: H; n6 j4 s8 p
. n! S5 |# z- q2 h; q4 R: b. d! r5 N. Y5 K
        UARTPuts("------------------------------------------------------------\r\n", -1);+ w% y/ z/ @6 \4 U) c7 e+ G" ]- m  U
        UARTPuts("                    C6748 ECAP Test\r\n", -1);2 c2 C. }# M6 r8 k$ E
        // ECAP 捕获初始化
* t2 b7 j  D: @! z        ECAPInit();6 c/ `7 T/ C" J  g0 b) A/ t
        UARTPuts("Initialize ECAP.......\r\n",-1);
1 \2 |- `$ j! J1 r5 f- H% F- f        for(i=0;i<5;i++)
- p8 [: [' ~; U" O) }) B0 w5 C9 W1 T        {$ H8 V2 F5 t( g9 @8 S
                    for(j=0x00FFFFFF;j>0;j--);            // 延时$ D( Q! m( x" z8 ?4 W  t
                    ECAPRead();
( q1 j8 l$ U' ~        }
$ h; H+ o$ j! G* w+ d        UARTPuts("\r\n",-1);
- P, r1 n6 t1 J1 P+ Q        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);5 J& H+ [# h7 Z! h% I
        UARTPuts("------------------------------------------------------------\r\n", -1);
1 }( l# U" Y: O$ u, P. m% A/ x2 C. T
        // 主循环( B$ l! y3 Y$ u/ B# P1 u! B
        for(;;)
/ {; b' o% V8 O: s        {
3 d% j  V+ e) f) i
  G& `4 w7 {4 D0 i+ k7 U/ Q        }
9 l& R5 X+ d$ N& p( S5 T; ]2 A}) {$ T  n. D) ^5 R

" n4 A. V2 {5 }7 C3 n4 x& l/****************************************************************************/- l0 w! e' V/ o- t* R0 O
/*                                                                          */$ N, l$ R- @1 I# _- V# H
/*              PSC 初始化                                                  */8 d: B; G8 U  o( h9 \
/*                                                                          */
9 i; @$ Y! X  V8 m; n( q) w/****************************************************************************/1 s! q" ^0 t$ ^, ~# b) k, C
void PSCInit(void)  g0 f0 P% X8 m6 ~
{
- U+ a: M$ X- x+ h        // 使能  EHRPWM 和 ECAP 模块
' ~7 i1 D$ o5 q! B, O) E( k        // 对相应外设模块的使能也可以在 BootLoader 中完成
- e  U$ `6 u1 m$ Z1 C) j1 [    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
1 F- i( G, w( d1 \! G! o    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);- U# K6 Y" t+ k' S( K9 y2 g
}/ m) U* S$ R* }% `# x  X% A# I
0 W) M) Y) Z6 m/ e/ ?, N) m2 s" d
/****************************************************************************/
/ _) v8 f% j9 m! A0 a) i/*                                                                          */- h' o' W3 }; n. f
/*              GPIO 管脚复用配置                                           */( ]6 B# S/ ?6 U" F4 g
/*                                                                          */3 u$ Y, g; l2 Z3 r" N
/****************************************************************************/
& g: b8 m& z3 t6 [  Avoid GPIOBankPinMuxSet(void)
5 `: c0 s$ D, Q7 q{
, T5 J& g" z) G( M* m        EHRPWM1PinMuxSetup();
  v# e: Y# n1 E; ~
( @3 ~) L; N3 }9 _' C/ ^' a3 d9 e        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)! R. D8 P3 m" B5 l
        // 作为捕获功能时管脚方向为输入
3 C! S6 N1 O4 Y" J' ^        // 作为辅助脉宽调制时管脚方向为输出! `4 {- T0 z# ?$ c
    // ECAP2 / APWM2
. z, z  U$ x- @5 m: H7 Q        ECAPPinMuxSetup(2);2 j7 x0 \; `. M
3 f7 Z1 G! }, B8 T. n) n
        // ECAP2 / APWM2方向设置为输入8 L9 ~8 r' T1 i3 e; c, |
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
' x9 a8 I; f/ ^! X* |7 R}
+ y- D/ `! l+ K. w4 @% U
4 ?$ u$ C7 t5 M0 n! P3 t8 o$ `/****************************************************************************/* O1 F  ]8 _2 {; U% F- E
/*                                                                          */: u9 E0 A2 A% c. }2 a6 g2 ?" y/ p: B
/*              PWM 输出波形                                                */0 J; _4 ]8 m. f9 j) ]8 E
/*                                                                          */2 E4 H  m: F2 r4 E6 ~) e
/****************************************************************************/. J1 C0 I. p3 i4 \
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
; n7 `+ h3 I- S+ [1 G{
5 |1 |% ~6 P, t    // 时间基准配置
! t% q  P. [5 R! a6 e    // 时钟配置
6 h* h1 b, ?9 S7 Z/ @# }; g9 d    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
: r- s8 f! \, Z
: F4 q6 C$ W- w: F- A    // 配置周期
0 S3 _2 k) M' H: {8 M- S2 ]1 r( Y    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
7 g7 S4 x, h" f+ H0 r3 U) j, s                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
. B2 P3 p. c1 H1 K2 r  `5 ?
4 k7 n5 u$ K+ \' y    // 禁用输入同步信号# @( T# J3 I( |+ q$ z7 p; C8 _
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
+ C) e! M3 [% A& ]" ^4 H9 t
1 U0 A  H1 C% Z2 S2 I) z! l    // 禁用输出同步信号9 r  }' M+ E! P. D
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);4 {% Y% W' i& L$ T) @

" i7 _- U/ s1 O3 i$ m/ s    // 仿真(DEBUG)模式行为配置
  F" k& K% E; T& p+ a! Y7 s, A    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);, ]0 \8 @8 X0 M+ T- q
7 s: U# x( Y. P$ P
    // 配置计数比较器子模块
, \* U- C6 C0 o- C# D    // 加载比较器 A 值
* m0 k# g5 ?% e# x, r4 d    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,! l. _1 X7 G3 u3 t1 |+ }
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);! B/ D8 O0 w( _% C) q- N, s
, a0 J5 M' k" ^& l/ F5 `
    // 加载比较器 B 值. q& F% i$ @6 c$ ]0 U% F3 c- c
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,9 L9 W  B- B1 ]. X' L! f
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);9 U; O! r' a8 }# K( T
% `9 m) f$ I5 ]& R0 K! _
    // 功能限定配置(输出引脚触发方式设定)
/ a& ^% w+ a/ K0 E5 n6 x' g% G$ f, O    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
4 m' \6 K; `: J! |' E    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING," U" N$ ?: r3 _# Z- B- E. m
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
  o% g( }2 w$ X# s7 \  B) S                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
( ~9 u6 V2 ^6 `8 ?( _1 Q/ f  h3 ?. g) A! k' x4 g
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
/ |2 F( b' ^; |* g$ o) q0 ^    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
, d9 ~' A+ T5 z( e( S* T) J) S, G, X" w1 }. I' B
    // 禁用斩波子模块  J$ M7 T: F, ]! U- U
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);4 ?% k2 ?& A5 M/ S
; v8 Y/ B1 z  o! @; e$ m9 ~
    // 禁用错误控制事件  r0 l9 r( q  o) l4 N1 J# y+ l
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
8 N; }7 ~' ^) m) D- q& |1 s    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);3 k8 @, ~' K/ {9 {
" b* n. E; k# |% f# p
    // 事件触发配置
# U- Z, Z- P7 U1 `8 u* w    // 每三次事件发生产生中断
9 `! |7 K7 ?! R- m! ]1 J* Z    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
+ z$ e0 d& V; c7 N    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
; G& O" g: }# W/ u* {. ?    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);' v0 V3 c- |2 r- v) a  p% f
    // 使能中断
! z: S8 E; ?! q) k0 f    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);5 B6 a7 d4 n. K/ v, i: _

9 V. a7 E6 t* s( b! n    // 禁用高精度子模块
/ q7 a) g/ f$ ~% Q4 N    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
' l2 g/ V! N5 O& l1 b4 L2 ^" C' c1 I- m$ w) M, s9 U9 L) h
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
: Q6 G# T& ~; P5 R}
6 \+ Z! p( ^. i) N3 V) G4 g0 s. e1 W# y' ]
void ChopperWaveform(void)% k) O0 {/ P: v5 I- M3 y* q
{
" u1 }) K2 d: {* M    // 50% 占空比0 D$ s/ @8 {& T' J7 V, q$ o5 @
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
6 K' l1 [9 [' @8 }2 M    // 4 分频
6 T8 h& A5 m( n, @    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
" N% A) M* {6 i5 ]) y# L    // 单个脉冲宽度
$ M- A" ?! x/ d  F! A8 Q    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);% t$ C+ F% C2 s6 f8 [
    // 使能斩波子模块
7 J+ J8 N# q7 r: O0 Y    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);6 o# ~' J0 I2 P- W/ J
}
( Z( y0 }# J: ]6 q+ g: s4 C( `  I2 Y, K9 M
/****************************************************************************/* W- ^6 K. W/ b' Q, X
/*                                                                          */
  n- I1 A& N5 Y, M/*              PWM 中断初始化                                              */! c, a5 n1 l" L$ t! r; Q1 x0 w5 M
/*                                                                          */" V7 s/ v- P2 `* |, m3 b' h
/****************************************************************************/
  Y! d& x) h1 ]5 X' D- @3 hvoid PWMInterruptInit(void). X5 S7 ]9 Q9 x4 j2 Z! w
{0 M7 E" k: j$ P( b! W0 M
        // 注册中断服务函数
2 O7 @$ Z$ R( V0 D+ E8 R        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);& @9 H6 q  p- S1 A4 ]  K4 I8 T
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
& w) x. U+ }6 v* K$ h/ Q5 H, \) s. T4 ]- ~
        // 映射中断  [' `- U& L& D' q5 M( D% _
        IntChannelSet(SYS_INT_EHRPWM1, 2);1 i9 M& \. |* |9 ]6 i
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);( w3 @) j  Q; a$ Z& i, W

1 K% T2 L. ^( `" Z        // 使能中断- f( a; L) |3 n+ u
        IntSystemEnable(SYS_INT_EHRPWM1);
3 c, g' l3 j1 m! z        IntSystemEnable(SYS_INT_EHRPWM1TZ);- B, F  }1 D7 B" h
}/ E' b$ }! ]0 P- S8 s2 \2 j

; P2 \- R7 i) g; z/****************************************************************************/
! Z* C+ m, Z/ T( S6 c7 X1 P/ O/*                                                                          */: R: ~2 k; C/ C: X
/*              ARM 中断初始化                                              */* n( Y) p- F$ E6 I  f
/*                                                                          */
% c' i1 u  f3 N+ R$ `2 R& |/****************************************************************************/. q$ Z7 j( q- _9 E# g; X
void InterruptInit(void)  g5 H4 f0 }. Q; F7 B
{8 S/ o" N3 S" m# \; C  t
        // 初始化 ARM 中断控制器
+ R& K) e& F) I. Z9 v& t        IntAINTCInit();
; Q* j7 z  P$ w3 l! V' r9 d/ M3 @* v2 P. m9 P
        // 使能 IRQ(CPSR)" f+ s* x1 J1 P! w; z
        IntMasterIRQEnable();
3 T1 r. Q% o8 t
/ g1 U) T6 p# t3 J" [- Y9 a        // 使能中断(AINTC GER)8 T& n! ^) {: y- g
        IntGlobalEnable();6 w/ z, Q; _  Z) J8 E2 g  M

: d* @6 u3 ?) h: _        // 使能中断(AINTC HIER)
+ K) x2 B# h- S' v        IntIRQEnable();
$ N! i2 p# q7 d& W2 n1 b4 Y9 M}2 j# `% `' X& A, m. u2 h3 N
) Y3 D; h# u9 N$ |! w% ?; M8 |
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
- B: y* X: {6 X% d9 U/*                                                                          */  F, P! _4 ]5 ~# ~% h! Z
/*              中断服务函数                                                */
+ ?$ ?+ g% M5 \( m2 d/*                                                                          */
! R; k2 |/ j2 Z! W! i/****************************************************************************/
, @  C+ u3 k) Q' V7 H# l$ R1 ~2 svoid PWMEventIsr(void)
0 Y7 @2 m$ a$ ^  u9 f: O{6 d' l" z7 U3 o3 R! n
        IntSystemStatusClear(SYS_INT_EHRPWM1);
, Q! U  j6 ?. A6 Z% y2 j! f( ^. J" P: x) m1 B7 C; L
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
1 @. W. {) T9 i' O* f}3 O9 @/ X5 G3 s+ |. k, k2 p+ l

( v& }3 Q! e* E' T! y+ k, rvoid PWMTZIsr(void)
5 @$ A6 e8 q( a4 r! P( i; a{+ ~4 ^  c2 V+ a5 b. ]6 s
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
4 H0 k" p. w/ K( }
# l- I( [. G; \# p    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
7 z8 M3 ]9 b, G, ?0 v}
$ z$ W# x( F5 a' v, _7 k
+ t9 S1 b0 ?/ m4 N" R' I/****************************************************************************/4 d6 g( ?4 d. v% X5 U
/*                                                                          */6 a7 H/ B5 _6 q, }- ]5 M5 m
/*              初始化捕获模块                                              */+ P6 o: I5 m3 N" U: T
/*                                                                          */+ C" v, V7 I  j- A' l3 ?
/****************************************************************************/
9 v% P, l( T  _void ECAPInit(void)3 Z0 @# X2 B6 `+ b5 Q
{
! A; l- [# V$ C; }* m9 j* S8 T0 j        /*-----设置 ECCTL1-----*/
) l0 B3 y. e) g) o! ^2 K        // 使能CAP寄存器装载
5 j! w5 K4 s5 O& D; J        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
4 o; w, s, ?9 I& F/ S        // 设置预分频值.
+ S6 K7 K0 j& k        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);$ S) _! A; ]6 _# n! `
        // 上升沿触发捕获事件
# a* m# W& |0 M' K  x        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);# x+ w  ~; @# z: J5 E, }
        // 输入捕获后重新装载计数器值.
* }9 i* k( m& B        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
. r" d3 l/ f2 G' s  e  a+ V0 L8 {, Z2 k' ?7 E3 m1 E
        /*-----设置 ECCTL2-----*/6 Y9 i" A$ i; n& y2 r3 q# K) I7 m
        // 连续模式
% \+ `4 Y+ H# {; m, s% w        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
6 ~) B$ z( f; q6 L# J        // ECAP计数器TSCTR持续计数" m- J1 f9 h$ M
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
0 p: r  x! c- ^$ h. j        // 禁用同步输出和同步输入9 B  y3 o2 c- X: G# l: L
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);  z6 _# Y  i( ~% ^: h" l% {$ D
        // 配置 ECAP 2 为 CAPTURE 模式
6 x" `" Y4 k* e# {4 f8 v2 {        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
2 y' q" b  S8 B* H2 P* \: D  a+ s
        // 使能中断* U$ G! ]! `2 G9 T1 w# Z
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
. N- [4 m& @/ E8 m% }) s2 `}
' Y, t% J$ P: E" M" r+ A
1 [5 o; `. E  E% i/****************************************************************************/0 Q9 w( E) _4 K, i: `2 a/ p7 j
/*                                                                          */8 }" m: o- \: _. O
/*              取得捕获结果                                                */
4 P* g; ]4 \! U/*                                                                          */, J+ Z4 Y2 h4 F- Y+ a
/****************************************************************************/3 G3 r# V0 d" {2 ~$ p
unsigned int ECAPRead(void): u* R- I8 t7 {9 G  C
{
0 c9 u; C* |9 n$ t- e        unsigned int capvalue;2 u/ N! L) L! ^( D$ }9 _
        unsigned long frequency;
# i6 g0 z* H2 b/ V  I: B4 n" Z# D- Z; T6 C6 x- `1 A0 m# [
        // Event1 中断标志
& U( Z, z9 e# G# E/ ?+ @( ^+ f        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
1 n4 m0 I5 B+ d* T8 G2 Y        {7 F0 W; c9 ^" @, q" I
                // 取得捕获计数$ K& n; \7 P1 P6 X. j/ N3 `0 ^
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);6 k+ X' Z3 p2 o5 M1 M
                capvalue = ECAPResult.cap1;! M- N! u9 g& k" j6 Q( D/ T

4 Z3 G. ?/ [2 P- z% I, O4 d                // CAPTRUE 模块 228M 时钟主频
$ u, ~& h7 p  ^- l. a                frequency  =  228000000/capvalue;$ M. Z% I# E- }) c+ O2 Q5 M
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);8 I' v, I2 S; X! e0 F% n- t. n) G

9 G0 m7 I' @3 b7 O2 k! }                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);1 V( h  n) y+ i/ a7 M
//                IntEventClear(SYS_INT_ECAP2);
6 T8 J+ r2 _7 I- G+ ~4 P        }; x2 w8 f9 r  g# {1 C
        return frequency;% |! d) W9 V: o! G: \' w
}
6 n; N# e" r) q3 w4 H
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
1 M% J% d8 K2 U8 f, N4 I

本帖子中包含更多资源

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

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-10-17 22:03 , Processed in 0.046939 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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