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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
# x5 ?' S( R& u+ w. r/*                                                                          */) k$ x2 d0 Z/ r7 A, [- U8 K% l
/*              宏定义                                                      */
/ s1 K$ X, j- E/*                                                                          */+ d3 K3 k6 w* Z' e# m/ ]
/****************************************************************************/
, I3 o) ^4 L- g9 W0 v1 ~// 软件断点
# T- E7 X& [: x  t1 a0 [# F#define SW_BREAKPOINT     asm(" SWBP 0 ");( K0 B( H+ k/ B) s8 @

3 j  b5 e+ v0 Y; z2 M, A// 时钟分频% {; R- N1 ~! s( q* @6 J0 e
#define CLOCK_DIV_VAL     228( @$ \2 J; }. S, @0 r$ e, o( X; U
( h2 x0 m6 l1 N( M) e6 `* J; Q3 l
/****************************************************************************/
' i: y7 K% s8 ~0 L8 G/*                                                                          */8 d# v0 X) `" B! L& G
/*              全局变量                                                    */
8 y! p+ x8 L$ C( e4 C' E/*                                                                          */
1 @8 ^+ v0 H5 _/ `* S" Q- I/****************************************************************************/
" I; Y) c2 B$ F$ ^) k( W3 SECAPCONTEXT ECAPResult;! \8 a% y- ^; H

+ z* ?$ |" ^1 l$ `% l/****************************************************************************/0 ?% S) p+ {& t
/*                                                                          */
6 o) [* Q8 U7 L' n/*              函数声明                                                    */
5 {! N; l2 y) X# e! Q" I/*                                                                          */
5 w1 {3 o/ Q4 \1 S/****************************************************************************/7 \1 B- ~* ~& d  n. |( O8 B
// 外设使能配置1 Z0 h0 a' h, @8 A, ?3 i1 _- Z9 X  _& @
void PSCInit(void);
' X+ v7 g  z( i; \' \5 h( s4 f4 U0 H. D: a
// GPIO 管脚复用配置1 b/ O4 E9 f) t/ I! T
void GPIOBankPinMuxSet();
8 R, q# ~- ]0 t  a2 o" p+ b4 S3 \- Y. I# }" O5 |
// 产生波形
5 z0 h) d/ i" n. N8 ]# f7 h5 O8 t& Rvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
& H( V) A6 W4 Z& r1 F1 `1 l7 lvoid ChopperWaveform(void);
& G3 K9 T/ u8 ^+ ~
8 \2 i$ W$ H0 Z2 b9 ~7 f// ECAP初始化和读函数: }' X: b1 ~/ g& K
void ECAPInit(void);
. s+ `3 x' [- Hunsigned int ECAPRead(void);! D. L- H& d' t- M; Z0 K

3 X3 Y+ k: z5 P1 n0 \1 c//ARM 中断初始化( y4 Z9 @+ e. v, @) g7 Y8 M
void InterruptInit(void);" @7 T) h6 W0 h5 e6 R
$ S1 C; q# h" H7 G* K
// PWM 中断初始化
; _* ^) W) c9 Y# O2 G) o8 hvoid PWMInterruptInit(void);! {8 J$ p* S2 a0 {- {) I- i
// 中断服务函数
. a0 Y( p2 [) H! f1 ^2 s0 `0 Q// PWM 事件
/ @0 q% q3 H; [void PWMEventIsr(void);  @" F4 I3 _* N/ D! l5 I9 F
// PWM 错误控制事件
! n7 A1 R( u1 y# yvoid PWMTZIsr(void);
# p/ }+ S" i7 {) I. t. ~& F
. t0 ~/ Y' i% `' `7 n/****************************************************************************/: z" f- a! a: |4 K# B" h' @
/*                                                                          */2 r$ N- ~+ d( l; o- O
/*              主函数                                                      */# l' Y4 u! U9 x1 ?# {
/*                                                                          */
) q/ l! n2 b0 X, f: r7 k/****************************************************************************/
0 ?3 B2 [( f$ p9 wint main(void)
! @* ^" m6 _5 x{
: K0 K$ J1 |5 W2 e8 a. X        // 外设使能配置8 Z; c. Y. f7 g+ E4 c) P- [" ~
        PSCInit();
% b% o0 m0 z" T) ]* i( S3 ?- ^- I% @9 }) @- h
        // 初始化串口终端 使用串口2
" t* u! {: N' ^6 U        UARTStdioInit();$ ]- I* e- a& D8 v: |
        2 F% m' z8 y# c
        // GPIO 管脚复用配置  p" @4 ~' g0 r- G
        GPIOBankPinMuxSet();
8 `+ I# {* }2 @6 U2 z3 y
6 [' ?* b, I- O        // ARM 中断初始化
) O7 D2 R  X. U: @        InterruptInit();
4 V) r; H9 H' \/ L& D0 _; W8 K
7 b9 A# Z: @$ P: l8 [, O        // PWM 中断初始化
1 Y- G" R3 C, E. @$ N        PWMInterruptInit();0 b+ f. b+ i2 Y# o: T: _: Y

3 P" f% g' i1 a* f        unsigned char i;/ }$ K- K1 P7 \& \* H% |
        unsigned int j;
4 ?# U" ~( V: F& T5 n% @6 {% n: Q& E
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
3 N8 m! t  G3 N  Y/ @$ I        UARTPuts("------------------------------------------------------------\r\n", -1);$ K! ]! ?0 ^' Z  c. N
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);3 R! c5 Z5 k8 o- m
        // 产生波形2 z( F% s  D! F/ u0 U
        PWM1ABasic(25000,50);$ S; q. u; g& s; E0 C7 P

  x4 E$ T+ ^3 Y0 D2 a        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
: h: z, I1 z# X& E0 A        UARTPuts("------------------------------------------------------------\r\n", -1);! x3 M0 N8 _" I
1 e% F6 q$ ]0 j
8 s3 q0 O* C- P
  w- Q# s( T) b4 k" T' ~
        UARTPuts("------------------------------------------------------------\r\n", -1);: m% E1 o/ Q4 a8 c
        UARTPuts("                    C6748 ECAP Test\r\n", -1);  ^& ]0 f# b- \  ]
        // ECAP 捕获初始化
* b% e& w; h9 E4 |2 d( o3 o        ECAPInit();
/ C9 }+ o. A; O$ |: S        UARTPuts("Initialize ECAP.......\r\n",-1);
! k& {. z% t! _5 {- N/ i        for(i=0;i<5;i++)% V; c8 H; B& J* t
        {
# [% E1 R- m" q( V1 O" Z                    for(j=0x00FFFFFF;j>0;j--);            // 延时
. I$ {& J# U; Z2 b: y                    ECAPRead();0 }, L7 S. e$ ^0 O( N5 G
        }! |' A$ S6 ?" }6 j
        UARTPuts("\r\n",-1);# l3 j# W: W$ q7 w) J& e
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);  B4 l4 S9 {, r. w0 X7 \8 }
        UARTPuts("------------------------------------------------------------\r\n", -1);
/ O, i8 I$ `& b0 x* ~, g3 a" c, E7 R: K: C/ F1 Y0 f3 r
        // 主循环
3 K7 G6 r% z4 D5 e        for(;;)
- u# W0 c( e) D        {
4 q  _! u: Q3 y" p  p2 c& N: L* R+ ~2 ]
        }* x$ ~/ _8 ^( C: h4 P& x
}* N5 y* ]5 O3 v- p: G% w2 A
/ e$ [& A( p$ F
/****************************************************************************/
$ U' ]$ n2 [. j+ Q5 [/*                                                                          */5 \% o1 j9 h. S- c' s4 i
/*              PSC 初始化                                                  */
- X) b$ {2 ~! t+ q+ E# R/*                                                                          */) J/ r% o8 A; ?; m$ y
/****************************************************************************/
1 `  a! x5 `, ]6 M0 evoid PSCInit(void)
" _' K8 X, i$ J4 Y& n' u{
5 L5 f  X4 W( I        // 使能  EHRPWM 和 ECAP 模块9 L: ~& K2 S+ u7 L) x
        // 对相应外设模块的使能也可以在 BootLoader 中完成
& E* x, z( u; {, s    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
$ E9 d' S* c) T" \6 A5 n5 R) J    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
' y) R! \  f4 M' |* ~: s) G# d% C  d}" f, ?  q) ~* a

8 U$ _* P2 ^" r2 h  T% |3 T  I$ ~3 G/****************************************************************************/. r9 ?/ w/ S8 q
/*                                                                          */
! `; s1 r* b  g/ I3 Y/*              GPIO 管脚复用配置                                           */3 ]( {  D3 M; s( ?! q
/*                                                                          */
6 y  l* u; [5 X5 A' \: l0 K* ?/****************************************************************************/! f  g" N, H0 T
void GPIOBankPinMuxSet(void)" d2 c/ n% h: M# r
{
& k# ~: N3 k- e2 c        EHRPWM1PinMuxSetup();& I! }" p  P+ n) v. @) N
/ r& ~; c* I) ?  a% T4 f' D
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP). u) {; \0 y% b8 L' N: [. w
        // 作为捕获功能时管脚方向为输入
# i$ R/ C5 l& {, r3 B+ i* T9 U        // 作为辅助脉宽调制时管脚方向为输出
3 C! t9 r+ b, B' w, t# M  E    // ECAP2 / APWM2
$ i( `6 k& \  W7 q. r        ECAPPinMuxSetup(2);
# Z6 y5 e- }) _/ B  C$ p% o/ @
/ K$ H2 x2 `! ?% Y1 H        // ECAP2 / APWM2方向设置为输入$ F- M4 e# \8 E8 T
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
, m( O( }1 q1 J$ \, B/ b) M; e" O}3 C/ w0 i+ b% C
/ a5 `4 D7 B1 [0 Y$ D  _
/****************************************************************************/: {$ X$ h+ d$ ~* t2 @
/*                                                                          */
; [7 X5 ?( Y( U3 L4 H. y; A) ]/*              PWM 输出波形                                                */
' j; @; E# R4 o6 k6 Z) T/*                                                                          */9 b' x7 H" W3 w, u+ N6 c0 \  t8 s
/****************************************************************************/
9 c2 l& w. o) U) X  H, k$ gvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)- d7 u, @  d% }, h4 B% F6 |
{
* n& B9 ^+ ]. G' Y    // 时间基准配置
. r/ s1 [2 ?2 l& h! Q    // 时钟配置
) D% R# N1 ^9 D3 ~* |% k    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);3 }' h, J: p3 w3 V5 S6 |9 Q1 ]" H

0 K" o# x' [4 i+ w    // 配置周期
  h" B! ~7 }% @) T  x8 |8 h* c    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,  w% A! u7 f# X- A
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
6 I% t& [$ c! `7 B
' T1 ?+ v1 p5 L    // 禁用输入同步信号7 v5 {2 p  W; M) G7 @
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
( q6 @- _& L; m9 i$ _4 w$ M# b1 X2 {; z3 {9 H: j) o# G
    // 禁用输出同步信号
7 G4 n( e' v. v3 l- ]    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);& k2 ?5 G/ x: E9 L# F% D

7 N% Z1 s2 y  N& ]$ W, t' Q* v1 s0 Z2 h0 T    // 仿真(DEBUG)模式行为配置
% e3 W6 w- z2 o5 o0 z1 V    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);4 t& i% T( g1 \2 D5 b

$ H" h/ E; {% p) J    // 配置计数比较器子模块
# i3 E8 |3 G: B/ c    // 加载比较器 A 值
# n; P( s5 c  v& Y    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,* V' v5 D" K% m2 J2 t
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);$ |$ L; Y# ]" u
# C/ j) B- ]- T5 x
    // 加载比较器 B 值
* ?' a; d: T' z- _    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
9 P) _7 j+ A, u( a0 `7 f                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);4 [) q$ P2 d( s+ m: L
# w3 h% e2 q/ U# a
    // 功能限定配置(输出引脚触发方式设定)( }( p+ f+ A) y' k3 M: q
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
3 D7 E) B5 c# [. Z3 ]    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
! ~/ w. l. n$ w                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,( ]8 _4 [  y5 N/ o
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);# j  P; F3 |6 t- g# m

/ }6 }2 O+ [' A5 T' b7 F    // 禁用(旁路,信号直接输出到斩波子模块)死区模块3 ]! ]# ^0 s; O) G  \
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
( ]- |6 {! m- `& B" i) M" Q  w" {& K' n6 C* _, ]  R$ m
    // 禁用斩波子模块, }2 a, A5 F8 F- ^
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
5 x' e# v( V' X) {
) r" ~! |% o( u6 K$ _3 |- u7 a    // 禁用错误控制事件/ d* M" G$ l+ B, B! k* L$ C
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
8 e; g) Q; J0 D; f5 c( [    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);+ _, m. _* @8 ~- c4 ]

! B# v" N% H5 K+ w# U' I    // 事件触发配置
5 y/ y; `1 N0 @1 u8 H, O    // 每三次事件发生产生中断
7 F. S, {6 f; M9 |( }1 {2 B    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
: a: J7 ~% F$ W3 G    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件4 B- x& e" K  D1 v4 A$ _
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
+ E. I$ d8 t, o6 M. ~: c2 w, H    // 使能中断
. l  |2 y/ S- C- f8 U8 b    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
1 r7 \/ T9 }/ U9 {0 B& p
; U  e( q0 k. X    // 禁用高精度子模块' L+ H0 R+ j! t$ `
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);, \! _) e1 E% {2 z3 D2 J' V+ Z& K

& h9 D; c! C1 _2 Y    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
9 W  r6 T$ a; v1 W; P8 {}3 b. u( x% k( o" r3 a# f
9 m% Q2 q7 W, k7 z
void ChopperWaveform(void)
" z9 J5 @2 n9 J* f7 v& j( o{* y3 \% u: ^5 S; E( Z! \
    // 50% 占空比
4 j: v: N9 J& X( `- y  Y; J6 K+ ]# }    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
9 i/ Q# X; @% W0 K( x    // 4 分频0 n1 E# Z5 x% \7 j
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);1 [$ s/ ?+ B6 U5 q% k7 H
    // 单个脉冲宽度
8 A; ?$ q0 w; U' P: W    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
8 ?# d' Q1 v' U. |    // 使能斩波子模块
8 v( R$ \# ], w; U, ]0 F- t, u    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);, I1 j  D* i+ G/ @3 R! G+ D
}' h8 q$ z: C, x* A6 d

8 w. c2 A9 D8 U/****************************************************************************// t+ q; f5 F! N7 Q8 Y
/*                                                                          */& T, J9 ]# o6 X1 \; q
/*              PWM 中断初始化                                              */  w7 E* L& `+ u* v" `
/*                                                                          */- Q* w6 ^8 [# a* T# W  ?
/****************************************************************************/7 {* ^: Z( G) v2 G- T
void PWMInterruptInit(void)" T- w" u6 k' n: l5 \5 P
{) d' @+ [0 p5 m% q0 I/ l0 O
        // 注册中断服务函数
! l. M% {( o. j  w4 o6 L        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);0 A7 i+ s8 F% [9 M) H6 h8 x7 \" {
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);: U7 Z$ i4 C3 [4 X$ [& m; r/ G/ w

7 d. E3 v' V$ U# K% t, [3 g+ I        // 映射中断1 F: W2 Y& P2 G. e6 B+ v
        IntChannelSet(SYS_INT_EHRPWM1, 2);
  K& L5 S, }/ |' C        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);& A2 Y1 ~" Q. \

5 T9 k7 D! D2 T0 D9 e8 r& Z        // 使能中断
! E3 x1 ]& i9 q4 a% s7 ^        IntSystemEnable(SYS_INT_EHRPWM1);
) M, {  T7 d( _4 v8 ?+ Z        IntSystemEnable(SYS_INT_EHRPWM1TZ);! G9 E1 k) S2 e% x
}
+ [- H- E7 H: f+ [
3 c, p5 K, H- }/****************************************************************************/% S5 u: u0 p) K) |! d
/*                                                                          */4 H, D# c) e# B) f2 W" h8 e
/*              ARM 中断初始化                                              */
3 r& F2 Y7 ~# F, w/*                                                                          *// k/ E3 @5 C/ O9 _) F* ~
/****************************************************************************/( i: b/ Q0 a( L0 O0 N7 U
void InterruptInit(void)
& Q' }( s8 g4 d{
" S) v/ C3 j. ~2 h. [4 o" J        // 初始化 ARM 中断控制器
' q' ]0 |! \( J- j( Q! W: p8 \, \        IntAINTCInit();; U, r: ?; ~9 u- @: M0 X% J

7 w* _% `1 W# {1 T) L# h0 Z        // 使能 IRQ(CPSR)0 f% L  K/ K- K
        IntMasterIRQEnable();% q: V/ \. |, o  U! M' C) w9 v1 q
; e* b  a$ h& m
        // 使能中断(AINTC GER)
! U' F3 O- H* U9 ^" ]        IntGlobalEnable();
" M* y# ^( m1 L& ?1 |' @
: w+ u& n9 i* U3 j$ i# ]        // 使能中断(AINTC HIER)
1 H: f: w4 i) h) L4 X  C& F        IntIRQEnable();* d) k8 R- V* o. ~$ H
}- o, A5 M6 Z/ s) y# \

! \6 O& X4 ^' n7 x; r! Q) O
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/; ]1 w% j- S6 r: ~4 x" ]- n
/*                                                                          */$ R% I2 I* n$ K+ @6 s
/*              中断服务函数                                                */
4 Y. Y* Z: W* K4 {. E' z/*                                                                          */
9 [: ^+ y: o! L7 d/****************************************************************************/) j4 R! ~/ J4 X
void PWMEventIsr(void)
8 i% q1 }5 ~/ H& Z  h/ v( Y+ n{
- [4 u1 H8 l' |8 A        IntSystemStatusClear(SYS_INT_EHRPWM1);
; Z0 j* I/ h4 F3 H" C
8 A8 D% V; n6 t) T    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
+ w3 f4 a' ~4 w  Z}& r: K" r$ l# F# S: I1 B7 m
7 n- f' j2 ]/ `0 W9 z6 _% o; |
void PWMTZIsr(void)
, C. h6 j8 ?  ]$ _{+ T/ p$ n6 B+ Q' p8 E
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);; n( Y! J9 y: X/ S

; t, a+ l2 q; Y, \& P. H. V    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
1 |! ?2 m) X' T9 d5 X}% w6 ]: b) Y+ J/ e. f/ a( r' g: {/ D3 ]
% h$ V3 z# w% ^
/****************************************************************************/% Z& W, k2 G# M3 r! r
/*                                                                          */
" e/ p2 c; ]' s$ p/*              初始化捕获模块                                              */1 F. A/ Y# H; R7 M
/*                                                                          */
. i4 u* o- Y9 z- d! Q/****************************************************************************/! L8 B5 C  }2 g: W
void ECAPInit(void)
& x! a* z! |+ J$ R{# }9 S0 z* l& Q: H8 J
        /*-----设置 ECCTL1-----*/( ~* o1 s! C2 h  r$ J
        // 使能CAP寄存器装载. G5 t4 e" v. `& Y# I
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);& f* g+ k6 I" Z
        // 设置预分频值.
4 M9 K; n+ u( {        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
, o; G' y. f0 s3 U) B8 O* [* v        // 上升沿触发捕获事件
7 u% ~9 k$ S3 T        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);& G& P6 _" ~5 d1 E
        // 输入捕获后重新装载计数器值.* s; ^' }6 F% I3 P. `
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
3 q1 Q7 o* t7 I$ ^. K# t& E' \3 Y3 M) U: ^( L2 e
        /*-----设置 ECCTL2-----*/. D9 E+ M4 S- P  K
        // 连续模式% G$ |1 o* u1 k  o- v( z, t3 O
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
  Y8 P- B2 G: j# j        // ECAP计数器TSCTR持续计数
/ a, I1 y8 N  z, j, C& ]5 d. ^  \        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);* g9 M4 x/ S. Y) W. m: ?
        // 禁用同步输出和同步输入/ h' b6 t- z# c9 v$ U
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);: G! i" H/ r  L
        // 配置 ECAP 2 为 CAPTURE 模式
4 Y* L0 v8 {" W" Y2 o        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);; C2 C; r5 g, B5 x" A

! E9 {' G. D! M8 g) K2 @* W        // 使能中断
3 S+ q8 K7 j8 c" J, X+ C2 {//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& U8 \) r( w: v% O9 e4 j}7 d4 F: v6 s& R7 E1 p
6 n0 Y1 i% X- H8 j- i! }) k
/****************************************************************************/& g2 g. _# }+ p! X* a0 U
/*                                                                          */1 ~% S" d* S  O
/*              取得捕获结果                                                *// J5 a+ d9 i2 J8 D
/*                                                                          */
+ e+ e! `2 N* o! {/****************************************************************************// U% G/ q1 C# h% D
unsigned int ECAPRead(void)* w" |3 n7 v2 M, E9 J1 |+ j% Q9 X6 R
{
( c( }7 ?. W4 j! K. u        unsigned int capvalue;
" H$ f. o0 Q7 _8 Z  K        unsigned long frequency;# q+ Z# e: J! W# ~
3 S' g) z7 r, T: X3 ?" `! z
        // Event1 中断标志( J4 `+ T( X/ S" f" K: P2 a1 [$ ]* ?
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))5 X* m# N7 k, v; B) H+ O
        {
8 A& A! H+ V: j; z$ F; c/ T+ q                // 取得捕获计数
  r; J8 j* `$ w6 X3 f! t2 [                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
3 W, ]/ D2 O* e- w' h5 \  k                capvalue = ECAPResult.cap1;; Q( [9 h8 Q  [! \+ d
1 E4 O/ _& m( l. v
                // CAPTRUE 模块 228M 时钟主频- k( ]3 l; F4 N. ], i  J
                frequency  =  228000000/capvalue;
( i" N- |1 I7 ~! h                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
5 A3 B+ a: I6 V. v; P" I1 f7 t& K" P7 }% \% C" c- f4 ?
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);( k1 v0 X0 o) M- i* L$ ]
//                IntEventClear(SYS_INT_ECAP2);
. l  P2 D7 T2 G3 l0 R, B        }" Z2 p: g6 T' ]  l
        return frequency;
: u3 W. A; V2 e* }9 [( L8 L# _}
" s9 G. g" L$ x$ `; }
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。: O) @! y0 s4 m% ^

本帖子中包含更多资源

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

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-6-14 18:14 , Processed in 0.046278 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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