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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
8 x( }$ \; K! W5 S5 Q1 U/*                                                                          */6 _/ X: z' Y$ y7 ^
/*              宏定义                                                      */: |) F7 m7 z, S) U2 _
/*                                                                          */+ U: N$ Z7 f5 ^
/****************************************************************************/
$ {& V$ F8 I6 @- D6 `// 软件断点2 e7 v1 }; w, E. y3 n
#define SW_BREAKPOINT     asm(" SWBP 0 ");6 g; z  [5 J0 W5 I. h. x% @4 s8 z( g5 P3 d
( ^" M1 A8 a- W/ u& h
// 时钟分频
: j# G: `3 v* P1 Z, b3 b/ Z#define CLOCK_DIV_VAL     228. Q* a5 N  m. K2 z
* R1 {! \, G6 m- k
/****************************************************************************/
# C0 d6 r1 J8 V* Y. t2 v3 r/*                                                                          */1 P  V# A$ i. v! c' [
/*              全局变量                                                    */
! k  C' W' D2 \& b. V/*                                                                          */
) }/ _( C- q# t  }# q/****************************************************************************/, y4 @' s3 q# }) S/ K' e# s
ECAPCONTEXT ECAPResult;4 O+ Q+ G( p/ `8 f' X& [
! J  O8 b; E1 J- f& @* ^  h, R: W
/****************************************************************************/
: {: G) U/ h/ U0 z/*                                                                          */
  ~& w8 S% A4 g6 K/*              函数声明                                                    */8 c0 k8 e9 N( q
/*                                                                          */) i4 i% K3 ?# f8 o
/****************************************************************************/
1 l  E+ q5 w+ g  m& A, S' f& U- ^// 外设使能配置% a. W7 u" n" b+ c. a; H; O
void PSCInit(void);$ p& S- V( W' B; D
, x5 |$ c0 R* D7 F9 e) _, B3 }; |
// GPIO 管脚复用配置% L' \- C' ^4 c# i( ^
void GPIOBankPinMuxSet();% d4 \+ R" `. O, Y
: A0 E1 n7 \# |+ e* R9 F0 |  f
// 产生波形. ]& z* J& Q2 t; L
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);9 [5 `  v. b) _! X
void ChopperWaveform(void);3 k+ _6 z* w+ u

- w" V; ^( [$ ^+ f// ECAP初始化和读函数
9 i0 l; F1 U2 H. p% _8 V# avoid ECAPInit(void);
* e1 ]7 G& D7 o8 Y( d% F, Eunsigned int ECAPRead(void);
- U: C/ {! p0 u
) _2 R8 |3 c8 J' L# X, A0 y) X//ARM 中断初始化6 l5 O8 a! ~% `7 g3 Z" x! P
void InterruptInit(void);
5 K+ \& b' w) R' J! G' w( {4 Y9 ~7 L' R: P
// PWM 中断初始化( C" A# e* B& w- a
void PWMInterruptInit(void);
$ Q6 T6 ]. o$ y  o+ |2 t// 中断服务函数  u4 h9 Y- d2 L. _
// PWM 事件
  v' T8 d! d/ I( u* w) hvoid PWMEventIsr(void);4 g) T5 t* @; F5 d4 K
// PWM 错误控制事件0 Q( U# L1 C8 E0 K+ r
void PWMTZIsr(void);5 n4 i# n( ~. I8 f  b& J, a
+ [( G" ^- _4 F# N) s( ^/ ], y
/****************************************************************************/$ S$ r% m, Q! E9 H. r
/*                                                                          */) i& I. V# Y  O# u& K
/*              主函数                                                      */
( ]# U+ |1 I( Q% E/*                                                                          */0 m1 T. z+ R; G5 l. }2 j' N$ x( l; Q
/****************************************************************************/- h; `/ A; j; C; O) _
int main(void)+ q( |5 e; y* x- v
{
: i- f+ Q! |  ^/ g' a' f) X$ n        // 外设使能配置. V- a8 I  v( L/ b
        PSCInit();+ W: T3 O. z9 m' ^/ i. l- I

5 t& E$ @7 ^# ]3 i# N* B' V        // 初始化串口终端 使用串口2! y$ U* Q! [; B8 g7 m2 `1 O% W$ G
        UARTStdioInit();
* `4 r% {: C" R. z        2 P. D7 X; t  e( j6 T
        // GPIO 管脚复用配置7 P) m# l, d0 C; X% y0 T
        GPIOBankPinMuxSet();% P3 E- N0 w. X! p
9 \) \$ A* w- H+ A
        // ARM 中断初始化; R, S" t. h0 e) J, B& E
        InterruptInit();
0 Z9 i; i8 R+ k
# t8 y3 I( g  A  w0 o7 A        // PWM 中断初始化/ f8 Q" n" q* H/ D+ c& g! v# [
        PWMInterruptInit();
3 V! t) m3 I! s5 e7 o+ @& N4 B7 t3 ?" k! R
        unsigned char i;+ k% k- e" g9 V; {- I
        unsigned int j;, |# e: M) }/ l' \

3 \" T, ^+ O6 v9 Z9 r8 J        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
" ]' C8 ]- x7 u  J% [        UARTPuts("------------------------------------------------------------\r\n", -1);
3 I- y- B# I4 g, ^: y        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
& ~# d) O/ h; |0 l+ u5 G0 |7 ?        // 产生波形
9 Y) ]4 T; w! b4 @$ k        PWM1ABasic(25000,50);, q5 y9 M- }  E5 l2 F

6 [1 f8 ?" n6 P        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);6 |. u! L$ \* N
        UARTPuts("------------------------------------------------------------\r\n", -1);
7 Z0 u1 K6 L( y/ a& L# b9 m/ Z/ i2 P; v  l1 ^+ Q2 e

8 Y6 i7 t( K6 g8 t
: o3 d, j6 n. L! f" U/ D        UARTPuts("------------------------------------------------------------\r\n", -1);  d( k, D8 S$ B2 d* C4 M
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
6 f) Z: C/ }+ Y0 k; K        // ECAP 捕获初始化/ e. h; ?* `$ v/ ^9 S; S- w
        ECAPInit();8 B1 t% t% ~" A  t1 b6 n: m
        UARTPuts("Initialize ECAP.......\r\n",-1);
9 k. _0 c' w  a/ t* h        for(i=0;i<5;i++)
. p1 L, n9 V3 b        {
' _+ ^2 D  T4 y1 m$ y9 ]                    for(j=0x00FFFFFF;j>0;j--);            // 延时0 u1 G1 {6 V$ l) L& |
                    ECAPRead();8 k" a- Z1 J' y0 j2 S( j9 t% Z
        }
2 _6 c5 z# D" A6 a        UARTPuts("\r\n",-1);' Y5 d. {; v( `6 ]- k
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);" j+ }: M# s0 r+ B+ ^; P' |7 R
        UARTPuts("------------------------------------------------------------\r\n", -1);% J, t  S! J0 I( |

& h: X$ f% H7 d  `1 D        // 主循环
& ~$ B% U9 C* f  ^( m        for(;;)
! o1 q+ h. ]0 F4 x8 T1 ], `) z        {* _$ N' x* [! S4 C
( ~+ K3 r( t3 D9 P
        }
! y3 u" b& p8 V! X6 E/ c}
/ H( B* m3 [/ G& g0 \$ }  ]" M' d' @/ C3 B; `- e1 [7 i
/****************************************************************************/
1 X" C/ W/ e6 w' R  l- _5 P' w/*                                                                          */9 B$ {+ h5 J. Y
/*              PSC 初始化                                                  */" K/ l8 a9 @3 t6 l6 n
/*                                                                          */
1 R) {) i3 e# ?8 q% u0 V/****************************************************************************/
; |- s  ~; u5 }- O7 n. Q7 [void PSCInit(void)
3 c6 P' w' R; [, D) ^" Z  Q# A{/ e. S0 }6 E8 o" Z) s& {$ K, s
        // 使能  EHRPWM 和 ECAP 模块1 s! T7 p, \' _5 ]
        // 对相应外设模块的使能也可以在 BootLoader 中完成+ e6 `1 r# V7 m) Q: d, [
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);1 S4 v0 M  C6 A, u
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
( b" {7 Q! w" f1 S; e}
" b( m+ w: R. w+ w1 D$ J5 D% ]& Y' U) e8 v# T7 i3 W  ^! z# a
/****************************************************************************/
* b7 r( ]1 j) h! X( g9 G/ r  c/*                                                                          */, @1 b4 w7 ?, s/ x
/*              GPIO 管脚复用配置                                           */0 f- }. e$ d% a- l% j
/*                                                                          */
$ O) g: K. @# j. R& f/****************************************************************************/0 A; p0 D' g" n3 W- ?
void GPIOBankPinMuxSet(void)
9 `0 _; D0 y- s- @, F{
. |; \8 Q4 I( c; {; n7 i        EHRPWM1PinMuxSetup();
0 q2 M( [3 t& T3 G
/ }0 u, w3 q+ O        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
/ e9 H& @0 L6 K8 z3 I( q! k        // 作为捕获功能时管脚方向为输入) F: h# H% Z" G
        // 作为辅助脉宽调制时管脚方向为输出
  `- l) T: \, Y* D- \7 r3 X8 |- O    // ECAP2 / APWM23 i( a7 Q# C* F2 ~! A* _1 c# K3 S
        ECAPPinMuxSetup(2);
/ [. H  u+ x5 N, v/ n/ J; J# g" ~9 S) `
        // ECAP2 / APWM2方向设置为输入
/ i( a! U: B; f( q- G        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]# d9 _- M, P5 ~  q  e9 S5 S8 \& I4 |
}! |1 r) W, A' B* U5 m5 x! T
  K6 m, o( s( b9 r" ]. K( C
/****************************************************************************/
3 L) @! |& I( U- s/*                                                                          */
8 q0 I: C. y  B# \# L8 \0 i; v/*              PWM 输出波形                                                */% v9 q; D) I' O- e' U
/*                                                                          */
* [" {3 N6 Q% T5 H. p$ U& {/****************************************************************************/; V% C* U; H) X$ P; l6 i. i
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio), _- X1 Q5 y7 m7 Q
{$ C% ^7 h3 G5 K$ a# {
    // 时间基准配置/ ~! n' i+ q+ I# s# b
    // 时钟配置
. m' v& P9 h1 E    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);- Z) q' \. [" i& C# h

6 `% |0 ^; f0 j# c    // 配置周期
. n2 T" A! }5 ^+ \    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
  b& O4 q& [+ Q, S9 x$ `5 i! }2 e$ C                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);+ l- X' l+ |1 q% n5 v' N

1 V, S4 D5 b* D% P$ H1 j& |7 P    // 禁用输入同步信号! b) [6 x1 l) \" Y3 H  y
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);) G7 M) E/ w+ Z2 }4 y3 T

4 |0 N' {4 c! `4 i( ^    // 禁用输出同步信号+ q6 U1 y% l: K/ F1 w  u
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
" v. c/ y2 o& G* D
8 b6 u5 @% f# |7 _  e% x    // 仿真(DEBUG)模式行为配置7 Z+ Q+ ^: p, Q: Q2 Z" `
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);; |, C( z; i5 v" E3 L

, m4 I: G( |3 k9 G0 R; I    // 配置计数比较器子模块4 Q2 u0 W8 ^$ b. Q5 W+ ~6 Y% z
    // 加载比较器 A 值/ q1 p) [( K6 ?! i, @
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
, Q( M0 `, b5 V1 [1 Q9 M- U8 C                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);, ~3 E, L' b7 n6 n! C
/ H' h! c% d+ `& I
    // 加载比较器 B 值  R, o" \- i' K/ _, V& _9 a
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,) _# `0 _0 `4 S3 k( h
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);2 b( g: v/ _* I8 v1 @
8 n1 \  c5 x2 A, }
    // 功能限定配置(输出引脚触发方式设定)- x4 b' |# S$ J* U
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出3 y, `2 Q/ v4 l" O! D3 l0 Q, T) A( M
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
9 E1 ]' j' Z  m  K4 H                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,* I. H5 F. f8 _9 c
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
* @! S2 n8 z0 J4 G- m7 a8 f" a, J( `0 m
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块- y6 Q) e( Y3 Y! L
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);. f) l9 U) Q) Y2 }" O" {, H

& |$ n! ^1 a/ G6 v: z9 Z) M9 y; G! c    // 禁用斩波子模块
6 e8 m5 y! a5 B9 \6 g/ h7 h  B    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
6 a) e% k- K2 H8 u8 k" v7 _
8 r! z2 N1 H) }* K$ J8 q    // 禁用错误控制事件8 k1 t5 g% d1 {4 W) p9 b
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
1 y( t9 Y3 c: c& O$ L" K! S& @    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
/ u9 x$ V/ l& E* D2 U1 _
3 D& s4 y. n( j    // 事件触发配置
/ f6 \  V: T# r. Z+ ?8 t: M    // 每三次事件发生产生中断  r3 _& q7 J. I6 v
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- S' ?6 l( Q( x" L    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件, U$ e) n8 \* e1 J
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
( l1 N" a$ d& @/ ]    // 使能中断* w# [( H6 ]5 s  e' c0 b- M7 Q: }; K
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
  [" m" g* r$ o6 T. Y) R6 n) u% ~, R) Y2 q0 Q, W$ y
    // 禁用高精度子模块
8 G0 T, {% c4 d; z4 {+ }    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);  V1 h( F$ ^8 d* H- Q

. e( j9 A4 |3 U3 `2 A6 \9 h9 I2 _0 x    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
0 S% v3 o' a# b# U9 x2 ?* l  G}
' \5 w2 [1 Y: O' W7 L4 [, W5 D5 S; o; c% w: m" v1 K
void ChopperWaveform(void)
! ?. y5 f" s( C" s: r{* t& j- W  ?) [3 H/ ]* \" b
    // 50% 占空比
' M7 {0 s2 K: N! Z    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);  n9 W$ M. l# n' r% b
    // 4 分频
* |- o4 B3 B- Q1 U2 C9 U    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
) N$ ?5 J* p- q6 U    // 单个脉冲宽度
4 D% j2 u" g1 S7 \" G$ r    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
8 F" L& Z3 E5 i+ Y! V/ i    // 使能斩波子模块
' _: `9 M1 J+ c& F5 g6 T    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);$ [3 ~, v5 B8 r# o; n  {7 y
}
: t! Y0 z1 A+ D. [  W  a) w* p8 j7 }% r. J2 i
/****************************************************************************/
# d: P) L& M- h/*                                                                          */2 p3 |3 N9 r0 \# s% E
/*              PWM 中断初始化                                              */
- ?7 o/ \5 f9 r+ Z5 V  }( G+ y' Y/*                                                                          */
' p/ d: O2 i8 `5 W# }$ Z/****************************************************************************/
; u7 ^& X& }" Q. m+ ]void PWMInterruptInit(void)
, n4 G, q6 k- m, P, p1 q/ t{  g' i5 L' H' r: ]
        // 注册中断服务函数
+ y9 ~3 L% J5 B# ?2 O3 p" W- ]        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);- r7 O% _0 N  J+ S$ b+ i, f8 _
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);5 b9 g0 \7 t) J  q% Y" ], |; n9 C

4 w4 m: M! @9 L5 W9 s$ r& x        // 映射中断3 G3 }/ m9 ?2 r2 L) Z
        IntChannelSet(SYS_INT_EHRPWM1, 2);0 V3 |; N' N4 v1 {! O3 h
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
: M) D8 V: I+ D% s' }& [. o* d- T8 l$ u; K- @' v/ j$ D
        // 使能中断
/ s7 t  T% S) A& k( I' G        IntSystemEnable(SYS_INT_EHRPWM1);
. v+ p: w* I) b; e  f+ Z        IntSystemEnable(SYS_INT_EHRPWM1TZ);
' {8 D9 C1 H) v2 u, O/ a}
  K5 T, h) c7 h1 \, e- p; Q/ s" f+ d, }
/****************************************************************************/4 \/ m  |# O( w9 Z" V
/*                                                                          */% Q+ n4 q/ P) t3 v+ U; {+ o# b0 F
/*              ARM 中断初始化                                              */
% R4 _" N! _9 ]+ w7 w) N/*                                                                          */. [8 I7 q) K& M
/****************************************************************************/8 {+ B- a2 ?' i/ M1 z4 E+ W1 u) X
void InterruptInit(void)
0 R% }1 X9 k& c3 s2 b3 c{# y, F) `+ @/ r+ i  a$ e' S8 G2 G
        // 初始化 ARM 中断控制器
' U5 v: Z* e, x: O        IntAINTCInit();
( T+ j: p" D% @) S& M$ L* L- p/ i9 x# @
        // 使能 IRQ(CPSR)
9 Q" ^, B" d$ S3 Q4 u& p5 p        IntMasterIRQEnable();
  @3 h  P2 X8 A) Q% C1 E' R8 N5 g1 ~$ d) T) W
        // 使能中断(AINTC GER)2 @& @' O0 ?' {5 t
        IntGlobalEnable();
- p& \/ ], O; v3 X) y
$ ~; j0 J1 m% N+ x        // 使能中断(AINTC HIER)5 X$ m! X" m. i5 N
        IntIRQEnable();% ]$ B4 C" l# z0 Q6 t% s- k3 f8 h  Z
}3 B$ f7 D3 i: M  O

& ?) l( V& a/ g$ P
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
6 h8 A  Z! Q; D5 [1 j/*                                                                          */
! W! y( |. n5 h- X( o! ]$ C/*              中断服务函数                                                */
; q) n! D$ r0 G1 s# a  J/ U/*                                                                          */- E; @8 `  \, h8 `8 r' _
/****************************************************************************/7 V/ K9 x' d5 C0 Y) v/ }& g( c/ n/ a
void PWMEventIsr(void)
: F4 M3 P4 d9 Z  s) c( V: s{
: x$ V. a0 w, y1 \        IntSystemStatusClear(SYS_INT_EHRPWM1);% @0 \2 p/ s- }0 v

( M% l  I% O: m3 q$ ?) O    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);+ e$ `" N- q9 B0 @- J
}* K8 ?3 f2 U( |) M* t7 H/ L

0 g6 ^! g- F/ W/ K* v3 n( h6 |9 \3 Gvoid PWMTZIsr(void)
) W- d5 \! I) }5 k" Y- W) u9 t{% K5 c( ?! H- B
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);5 M& z$ K# C7 {2 E; Y' D$ |

# R# ]) x( [$ ~; |4 @    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
" b( K% }& n% c# w}$ \1 p; r) e3 z3 ]7 {$ X& c

- s8 w" a$ @3 E2 P$ n/****************************************************************************/, `# ^7 I& J, K6 t* E5 N4 x  J
/*                                                                          */
  @; ?: C) h0 f, T# O9 h/*              初始化捕获模块                                              */
& T5 g6 J8 ^6 e) H/*                                                                          */9 r. F. E9 S* X! z" d
/****************************************************************************/1 S. {( a: m& j) ~) H+ s( G2 W% b
void ECAPInit(void); H* V& ^0 d/ y  ]/ t4 j" s
{
: N0 D. p) G: [4 L5 z        /*-----设置 ECCTL1-----*/2 T" @9 M# r9 I* L5 P* @. g
        // 使能CAP寄存器装载
* R/ n. j7 u- V* U; {        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
5 y/ M& e( L7 ]        // 设置预分频值.1 p) k7 f/ v7 l) w" \, y
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
) q9 I9 X! q- s* R" Z        // 上升沿触发捕获事件
4 m, T3 Z+ \7 D/ y/ t0 v        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
( u3 A' }, h8 P. f: S        // 输入捕获后重新装载计数器值.8 r9 P6 ^9 j; p' _' E$ {0 Z$ W4 g
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);; S  M0 b6 @9 w

& u  t! I# Y+ s! Z( i3 ~" `0 e        /*-----设置 ECCTL2-----*/
% z9 L9 G+ \+ U3 B, i        // 连续模式
- C8 r) ~! a6 _; _+ L" k# _6 f3 T  ~        ECAPContinousModeConfig(SOC_ECAP_2_REGS);; y; X+ \: V4 H% |
        // ECAP计数器TSCTR持续计数' a" p, V/ I( n
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);: m0 H* h! D# `, e0 ^; U4 _* |# O
        // 禁用同步输出和同步输入" P* u7 S# Z4 a5 b
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);! i+ b+ R( _5 i- O; M+ b; A& O
        // 配置 ECAP 2 为 CAPTURE 模式
9 j0 C# Q  y  Z2 `* G' g        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
6 R, j5 V: f4 A6 S+ q) U. n4 n! t7 n- N# ~: t
        // 使能中断
2 U7 T0 s0 c4 J8 K( C: t5 u, B//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
. C& p, m( ^/ w) ~# v) L}# _& P6 I/ N6 l" Z' U
4 W) E4 l, ~* R" e6 f" K. r/ \
/****************************************************************************/
8 j& u- j: b& Q/ |! q/*                                                                          */7 z2 B. p! w0 @* O
/*              取得捕获结果                                                */9 V2 ~6 e$ V5 s3 q
/*                                                                          */
9 L7 G" t, J6 y3 t+ L, W/****************************************************************************/
$ R8 y" [1 F2 gunsigned int ECAPRead(void)2 Y4 o: T: ]$ C! d4 M6 q/ n
{
" n/ b: j1 c# p, m+ b7 L        unsigned int capvalue;
: J. f7 g# `# m  @) a        unsigned long frequency;4 j' I/ ]' ?8 i, L% \

, ]: a2 k& T, L4 `' V# F/ g        // Event1 中断标志
/ f$ j" j9 M% c1 O% G+ t        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
% r- _) e" l2 p        {  ^7 D. {8 C' _, x* o3 s- {
                // 取得捕获计数0 U) O/ P. Y0 E5 _
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
% f) P4 U2 v0 V* H                capvalue = ECAPResult.cap1;+ ~7 @1 ?  k( K. T; v

4 X. E( l3 e& I4 S. s# W                // CAPTRUE 模块 228M 时钟主频
4 E$ B  E7 ]- J7 W  h$ j* ]2 C                frequency  =  228000000/capvalue;: e( R4 \9 @' z* ^
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);( n3 i, l7 e4 C! }) V  n

$ R/ W2 f9 w! n1 W5 g                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
- O9 C, v: F3 U7 X3 C# I6 k//                IntEventClear(SYS_INT_ECAP2);
( j# F# g+ x) D! y        }
. v# g! r' D. p/ S        return frequency;
5 K. N, M0 b3 X9 ]5 N4 v}
0 Q% z+ O( ]2 |: a+ p3 \
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
5 e* D' @& E7 L5 {! `2 Y$ S: E

本帖子中包含更多资源

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

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-5-6 20:29 , Processed in 0.045770 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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