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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/+ L# Q; Y3 d. g  s2 p
/*                                                                          */
9 u0 H5 @, l2 Z  A/*              宏定义                                                      */
' P5 B0 Q0 `7 \# o  [/*                                                                          */
8 q' g% V8 K* N/****************************************************************************/
! W5 ]: ~5 ^/ I, v6 E& C// 软件断点: A: [9 K! I& q
#define SW_BREAKPOINT     asm(" SWBP 0 ");
3 E8 Y2 R1 F6 ]2 ~  K2 r* ^5 s2 }: y7 T8 \3 ~
// 时钟分频6 p# r, S0 b0 \( A, S: v" N
#define CLOCK_DIV_VAL     228
+ w& g3 o2 Y0 _6 O3 h! c% r$ b$ C' l  V- t
/****************************************************************************/
3 j0 f- }: J( c- _0 _5 r/*                                                                          */
+ L8 T% s" L& z6 C" a# i/*              全局变量                                                    */
) f' S5 A& E8 }& `4 H4 `0 U/*                                                                          */4 ?/ k4 B% d3 d, S2 H
/****************************************************************************/
. @, \5 W0 a! kECAPCONTEXT ECAPResult;
$ [! d/ ]( I. e: K& s2 z/ T9 S& t6 p9 j
/****************************************************************************/
1 _8 g  U# v$ \) q' v+ N/*                                                                          */  J: l6 I3 U; y1 B4 {7 r! ~
/*              函数声明                                                    */
# @/ `' v0 n7 \1 u5 j" h* p/*                                                                          */
7 Q1 b6 _4 J4 J5 H+ D8 [5 @# x. O/****************************************************************************/
5 }2 f2 E) v- ~: H1 J: Q// 外设使能配置
0 y( x" V- h9 Z; p- ivoid PSCInit(void);
5 j- |2 T! m9 C, I. ~3 C7 W4 q. c0 o6 y6 T! q$ f2 K
// GPIO 管脚复用配置& I% D% m! L" y
void GPIOBankPinMuxSet();
5 h" K7 h9 u  o& S3 A1 U9 c( E' y9 I& h+ ^/ [9 [- G
// 产生波形4 v+ z  ]/ v" T& P/ V
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);9 ~3 r  S' C1 l" C
void ChopperWaveform(void);
/ C/ c/ [) x* k6 d( ~# R. ?; l6 }4 ^5 [4 ?  J8 N
// ECAP初始化和读函数' u+ R/ q" [) @# Q/ d
void ECAPInit(void);
4 o, v6 t3 A) n# ^" a5 D9 }, nunsigned int ECAPRead(void);  G. c  h7 B" m" Q  `
8 V; E- Z+ [$ z
//ARM 中断初始化$ S5 ]3 O3 [9 f, p8 @
void InterruptInit(void);" z; X- q/ f5 |1 e4 N

# F  M& \! q0 j& L* d& U/ X// PWM 中断初始化4 L  n! [" x  P% R2 w
void PWMInterruptInit(void);
, _. z' \' k4 A% Q; x// 中断服务函数
( I5 C7 ]2 h8 Z. N" k8 V! q// PWM 事件
- \, R' i9 C8 {void PWMEventIsr(void);
- R$ r, w' o* }- `  |1 |// PWM 错误控制事件
8 Q, O" M/ p7 J$ o& lvoid PWMTZIsr(void);' [- B9 j: f5 t; n! f

8 ?2 K3 X" a0 h3 \/****************************************************************************/9 i: }7 ~8 f6 B7 s. C! C+ m- n! ?: t
/*                                                                          */% u5 v* [% y7 d  }+ |3 ~: _$ W
/*              主函数                                                      */7 N0 J* V1 V) L5 P6 E1 Y3 B5 e" t
/*                                                                          */% T. r9 I: |# U, \) \
/****************************************************************************/% d, V9 U9 a+ ?
int main(void)8 K$ V2 u' H3 c1 J
{
  a* B" @/ C; d- i        // 外设使能配置2 k: ]) m- z3 x# d/ ?
        PSCInit();
2 W9 a5 h8 f  R
3 w9 d4 p. D7 E% U  h5 N% I        // 初始化串口终端 使用串口2
( y' S; H4 |! ^% ^$ l8 [        UARTStdioInit();, j$ A1 W5 g- f$ R% T: F& F. \+ E
       
6 e4 f3 Q4 E0 T: X% R3 U        // GPIO 管脚复用配置/ G8 b3 [( ]5 A8 l" H, `! B
        GPIOBankPinMuxSet();
" T7 J/ u+ d4 L8 b) r5 G( M) M$ Y/ L- A) B" c8 {) X! j
        // ARM 中断初始化
& u# m9 m0 f* v# x        InterruptInit();
! J2 S2 B+ j4 U4 D" ]  L% B4 ?6 U" w$ c2 T& f5 ^) M
        // PWM 中断初始化
- y7 C0 }: D' T" t; [$ F0 F% i        PWMInterruptInit();, O' Q6 w0 D$ v. \4 e- d
2 i  m( y. B% o8 h6 ]  f& K
        unsigned char i;5 o* S2 a4 }6 S: X! I: V
        unsigned int j;
" [: X* Z& m7 g, m$ I! A, {
6 M7 Z; l! G2 V8 W  p        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
$ f' ^/ m; L/ V        UARTPuts("------------------------------------------------------------\r\n", -1);. j; ^* x" y$ X4 D
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
/ {( k; p$ l) e5 Y* P( {. ^        // 产生波形- O% m3 g8 L8 J. r0 @' |  C
        PWM1ABasic(25000,50);3 J* D3 i& j7 l( f+ |4 H

& [' X; T  j+ ~$ U        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);( V3 t8 E3 r# P+ `4 F$ V
        UARTPuts("------------------------------------------------------------\r\n", -1);/ D8 S3 e% ?/ r' P
$ C$ Z, H- J- }' r; L9 o* P+ ^

4 |6 f( E- }% \+ z8 f( \' k; r( d2 O; C+ @% a- L8 g4 {
        UARTPuts("------------------------------------------------------------\r\n", -1);* x0 j( }( K! j% c
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
% e( j+ `; k% X: ?  c        // ECAP 捕获初始化
2 Z$ d0 O, \4 S5 ]        ECAPInit();
& t' ^- I$ l! r' {' y, i5 H/ E        UARTPuts("Initialize ECAP.......\r\n",-1);0 ?  t9 j& }6 Y3 i; z  w
        for(i=0;i<5;i++)# S) V% ~' d1 K; ]& X
        {5 W( B( h6 B0 Z
                    for(j=0x00FFFFFF;j>0;j--);            // 延时0 r7 F& q1 ^# e/ u2 h
                    ECAPRead();
" Q/ _; Y$ h5 V        }+ S2 s5 Y3 f6 z7 O1 T
        UARTPuts("\r\n",-1);; [* N$ i" u3 w7 f; g1 W, ^
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);2 v' B! ?  Z" }4 c( }, U
        UARTPuts("------------------------------------------------------------\r\n", -1);  v& F9 d1 d9 c8 Y( m, M6 v; @7 {

  E5 J/ X+ z+ O1 s        // 主循环
# n+ n* i/ a$ }2 L) D        for(;;)
% e- @6 B% j! Z% p& p, a        {$ |. E& g5 s+ {$ C
9 f9 P1 X: q) t2 A5 V0 g
        }
; v  G; Q7 m, a! _}
5 [% d# F( n* B! ]+ ~
" T5 f1 O3 b( {/ ^" M3 I: F/****************************************************************************/
, W) E( a1 @- l1 V+ s/ w/*                                                                          */9 f4 ~) X  V' |: e
/*              PSC 初始化                                                  */, X# K9 k+ H" z: {# w! r1 M' }+ R9 L
/*                                                                          */
9 k1 q+ O8 \4 Q7 Z+ c0 [/****************************************************************************/
$ B' P. f/ q) @. q$ Dvoid PSCInit(void)
' o8 U1 v- l- A: Q- Y{
8 K9 p, _$ C6 R/ z  S' w        // 使能  EHRPWM 和 ECAP 模块0 e9 c' B# m7 S& H
        // 对相应外设模块的使能也可以在 BootLoader 中完成
5 T5 s; ]0 k: y8 ~( f    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);. \) @" B! q7 r8 g
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);7 W$ e0 |5 K8 v
}
- f9 ^7 d' o; Q) ~8 J: `. V$ O0 e- C
/****************************************************************************/
8 g. R/ @9 K8 H8 f/*                                                                          */- {2 t! m" `. @
/*              GPIO 管脚复用配置                                           */8 n" H, i4 N  |! @7 k
/*                                                                          */
7 @8 ]' t  g) K' v! s( M7 Q/****************************************************************************/
( [" B8 I3 b: i3 n5 Mvoid GPIOBankPinMuxSet(void)
& z4 ^5 Z# l2 k5 C, K. q{" L  t9 C+ j2 m1 l  r0 N
        EHRPWM1PinMuxSetup();
0 ^% {, f4 U$ p! N, S4 U+ D6 u( F
. [  q% k! M8 r$ L$ T) d        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)0 n$ \" T* Y& ?/ g
        // 作为捕获功能时管脚方向为输入( V  d+ p9 A4 M) J" ~
        // 作为辅助脉宽调制时管脚方向为输出
$ O8 Z$ T% \1 e8 A* ?    // ECAP2 / APWM2
) ^) W# J, q. I- }6 [        ECAPPinMuxSetup(2);8 Y9 v+ O& F: A* K2 Y
- O8 |; k$ m1 x1 A: h/ B, o0 ~
        // ECAP2 / APWM2方向设置为输入
7 P) C) D0 w: v" U7 T1 [7 l* o        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
! `% Z+ x4 ]. m$ C9 T6 y}0 ?( @/ R- W" t+ \+ p" i

2 q& c" P+ F, l- a; |& e$ f/****************************************************************************/
& ~* O1 x5 N! z4 }0 a. M: y* Q/*                                                                          */
) M0 U6 p* T/ O* y/ B) s6 L/*              PWM 输出波形                                                */! k$ `2 x" z7 n7 p' `1 Y1 q/ ]
/*                                                                          */
% F2 |, E/ ~# r, B& t/****************************************************************************/
  O$ O- p* D2 ~void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)8 g, R9 H$ U8 ]8 H
{; H$ e3 p/ O5 S
    // 时间基准配置
/ g; ?% ]- ?/ A& A# r& ~    // 时钟配置
! P! r9 J: p7 ^% j3 Q    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);  \4 g) g+ h; a8 ]/ ~; {

, P: v' `- i1 m+ X* m    // 配置周期
8 }7 M5 E5 ?5 X2 s    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,2 |7 V* K' _3 E8 w0 A, y
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);& g. P2 M! V; I. T: s' N: Z  Y
- n# C8 F& l( P  N* y, {1 g) a
    // 禁用输入同步信号6 Z( j, v- R. g! n$ B# J" \
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);6 L' y% _; ]$ i
- b; o2 G. u* G- c
    // 禁用输出同步信号3 {9 P, ^+ H# r
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
" C' E/ D. J# Z% ]* R7 {( M+ b8 C! {0 ~8 r' w  _' v" c
    // 仿真(DEBUG)模式行为配置
9 H0 V  x  i$ Z1 n3 s4 [0 U    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
$ w2 d$ `1 T- l% _+ _- Z: x1 j  r4 l( ]* y! w0 u4 U
    // 配置计数比较器子模块0 @$ p! o+ `2 d0 G' f
    // 加载比较器 A 值! Q& p# A4 H0 l0 M6 `" f
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
# I; s" T* g. f! ]& i                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
# ]4 N" _2 N( e9 v5 w) q0 _* Z+ B: T6 v1 W
    // 加载比较器 B 值
' B5 a5 K+ q4 p    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,3 m, z5 F6 u! V# t8 C
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);# F8 M) p- r: f- y5 D$ J+ s
; U% l" u2 C$ x3 y- P+ P' ^: R
    // 功能限定配置(输出引脚触发方式设定)
6 u( T) y9 g8 a0 r; ^5 T4 t# ?    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出! `3 s; q4 m& ^% R% \4 _* E
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,- c4 |/ W1 j* k7 T* M3 p1 n% @
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
  o9 R6 }3 u1 H: Y9 H                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);' O7 g0 x, c; u% l0 i$ O

# ~2 l$ z' ]( S3 B& K    // 禁用(旁路,信号直接输出到斩波子模块)死区模块9 R0 ]3 ]' `' ?5 w$ D( N& G
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);) `, ?3 }2 s: l) Q8 V

" o, |+ e7 C0 a* W. s    // 禁用斩波子模块3 Q, {. I) w( E
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);( j5 u6 r% e$ G. E0 w! y9 a
9 ~; w  `: \3 p3 u/ s
    // 禁用错误控制事件
5 c+ s( c% B6 `6 d; V. V    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);9 t$ X. R$ A/ H% k+ a1 P
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
: O" _) `' r/ ?! W: K2 B" i! a$ g7 w) G! C
    // 事件触发配置
% p5 a& a$ w+ k    // 每三次事件发生产生中断
' F! J3 \1 N2 R. U$ k    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);, E1 ~% u% i1 ^$ H
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
% a% o0 a* ~* B8 ?0 a# V  D/ ?    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);3 M, U5 x& M3 o. J5 T
    // 使能中断5 o# F% |9 k2 ]  H# Q
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);, J: ]- s( i" ^5 q
! T. D$ n) @4 M0 y) p- C3 X* g
    // 禁用高精度子模块
' p$ R. o) W4 I    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);9 `- D2 T0 i: ?5 v; |

: t. Y# B& g: ?2 d& H    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);( u# q/ `2 m8 [* m, j4 F$ u# g" \0 r  ~
}
; V# F) G! E( k  Q4 C! P4 E8 b* m7 V
void ChopperWaveform(void)
2 O5 k0 x( a/ X6 G# b( `4 P, ~{
+ ?8 U  v! V2 S( t, w. N    // 50% 占空比
" b) N' c* q) n" `: H2 D# P    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
, R% l5 ^1 Z/ f# {# j    // 4 分频
7 k: C" D, z9 J# y, e: W    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
0 u) p& V+ e# h- T    // 单个脉冲宽度
8 \, j* [8 U. w& |7 `* M9 J3 e& r    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);& h1 L, \1 n2 Y  ^5 X$ C
    // 使能斩波子模块3 a# F. w0 ]% i6 P+ y. ?. ~) B& t: A' M
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
, {9 ?! }1 s) Y9 ^( R# [- [}
5 \0 i. \& y+ P$ Y
& A; [. G' C. t/****************************************************************************/
* s  ^6 g/ w# J  f6 Q/*                                                                          */
' x2 t; C# w& O9 m* Z' y% q; N, l& i/*              PWM 中断初始化                                              */
9 V% ?* Y4 U" E: a% }/*                                                                          */
9 w6 [' X8 a# k; K/ J$ W2 ?+ c/****************************************************************************/
2 y5 \# N$ q! k* R; Q' F4 M+ a# I* ivoid PWMInterruptInit(void)8 _, B  m7 P. Y
{
% E, C$ `( X9 z9 O" H. I        // 注册中断服务函数( r6 x- X, Z- [7 a# f' K1 P
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);# i0 @5 r8 m7 Z( R$ O
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);( W4 v  E1 L2 Z2 }: m2 D$ T: H

& ^4 S, a! C( F* t        // 映射中断
* h8 B2 F+ }3 k5 }, C* A- _        IntChannelSet(SYS_INT_EHRPWM1, 2);( n2 g" s  H$ [4 }# [- x
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
) }' ?3 ~7 w# b. k
( C8 R3 C7 G# l+ _* K: w2 d        // 使能中断
8 S" a; q* M" _! T/ k! q        IntSystemEnable(SYS_INT_EHRPWM1);
! P$ F5 ]+ y6 j  K$ _8 U8 p        IntSystemEnable(SYS_INT_EHRPWM1TZ);
9 u6 O$ t; }' g0 D) ]- x: N, g}6 \. ^  h6 I% w3 Z: t& |; ]( [
( X' C6 x6 P, n% u5 c( F# D$ \7 g
/****************************************************************************/
! f" s( G+ T+ K9 @/ a/*                                                                          */7 }0 M( p( w" w. T+ j/ q
/*              ARM 中断初始化                                              */
* E8 {5 }" O. ]  T: ?+ w6 p; z/*                                                                          */% [7 `( g; E! ]' f4 O/ d
/****************************************************************************/
) M, m; j) X% i( E+ uvoid InterruptInit(void)
! Q, G- f2 Q* m2 E5 G& W2 i: H{6 _% T5 b0 o9 w6 V8 q  w
        // 初始化 ARM 中断控制器1 B& p) T2 Y3 o* [# n- @
        IntAINTCInit();  e8 K3 C- }+ c1 n

# K6 W2 w7 y. w$ J4 X  l/ c' J" \        // 使能 IRQ(CPSR)
  e, G, k" P& U3 _- ~        IntMasterIRQEnable();
; T4 K: r) w- X& r% p9 l2 q+ m3 l$ Z* b8 k7 r& M+ e, n2 P0 ~
        // 使能中断(AINTC GER)% F+ L- j$ s/ d! {
        IntGlobalEnable();) b/ i$ t  l; A
! I. h* u2 u. _6 ^
        // 使能中断(AINTC HIER)5 r5 B) v8 {9 `) y
        IntIRQEnable();6 e4 {; N! M) X( x
}
- i& X/ \% Y+ Y* I: T
) F5 _8 p' f/ b: A
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/, f( ^; V/ D5 B
/*                                                                          */. I& p8 H" m* E2 O
/*              中断服务函数                                                */5 q' z8 s$ `7 W) t1 b
/*                                                                          */# t8 n$ z* i) ^/ F; u  q
/****************************************************************************// Y  \$ I# }2 C. g# a( Y. [
void PWMEventIsr(void)1 v0 C. c* f& [- X# G/ _4 y
{$ Y( H8 h) m( G, P
        IntSystemStatusClear(SYS_INT_EHRPWM1);
, j! m! e. y/ y7 o1 p# Q9 h! e! U3 n$ K: P+ Y! K0 v8 M6 k
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
# p. O- l* y' K& N6 q}4 z, |3 O/ I  x& {* l( i6 {0 e! ]
# u0 ?% I! n' X* m
void PWMTZIsr(void)# f+ ~2 U& a  R5 F
{
+ s4 I/ K' E% P5 ^- |* ]' a0 [3 H4 e/ J        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);  F0 b- x: i/ U1 y. n
- p5 v/ f( m& t  v
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);2 \& ]! @5 \. i; u/ b) E  E/ u
}. h- n! l* v" O

4 f) v! E5 H% y* w. \2 Y' A3 Q/****************************************************************************/' I2 S8 c9 C; j; D! z9 c
/*                                                                          */
1 }$ o$ }7 v5 W* N& {/*              初始化捕获模块                                              */
) v8 m* e7 e* N+ e/*                                                                          */% Q2 T; j7 Q& a# A6 e4 I6 e
/****************************************************************************/" m4 q1 Z9 A0 w. I; m; m
void ECAPInit(void)
6 ~: x, K: H* H! A6 ?& L) d{
8 F1 E& k/ H+ Z2 n8 e        /*-----设置 ECCTL1-----*/# r( ~4 N+ t' S7 B$ b  W. b
        // 使能CAP寄存器装载0 @9 |+ t5 H1 f& Y9 K* u
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
% S. F4 l5 X9 O/ s0 D6 ~- W        // 设置预分频值.1 E6 ~/ |# B. K, A4 i/ p* n
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);7 J% Z( B; k5 ^8 d# _
        // 上升沿触发捕获事件, v6 J% g8 q: r& x% D4 \: G
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
. e/ D( q; i: b1 ^6 ?7 _6 k        // 输入捕获后重新装载计数器值.9 x6 {8 x5 o6 B+ H& s0 {2 x* x) |' v
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);" e8 Z1 l/ c$ s2 b# L$ ?% F
* d' a) v& j+ U- p( K
        /*-----设置 ECCTL2-----*/; [7 o5 e. ~+ P! X% e
        // 连续模式( K7 a8 m, Y& {7 l- Q
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
* W" j( k2 V! p  M        // ECAP计数器TSCTR持续计数; I/ o/ \$ L2 ^9 F
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
! T3 ?- J0 a4 A# b: w        // 禁用同步输出和同步输入* z) v5 |0 d( b
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);# C. z; A6 d* M0 g& n
        // 配置 ECAP 2 为 CAPTURE 模式6 v4 \( l  A. p) Z
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);% I  `1 p' R( ~6 e" o: R

( n4 E( s' F$ Z* p# U7 \" d' c        // 使能中断
, b% ~& Q% F3 ^1 Q' O//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
: U& f5 j% _6 X}: ^7 \$ _* L5 s& m
: ~# @! c  |+ g; ?) [8 g
/****************************************************************************/
2 H1 m9 G( T$ H7 c" C/*                                                                          */
' H1 B2 Y; ^" K) D/*              取得捕获结果                                                */8 d- `5 u* q- ^
/*                                                                          */9 R0 O5 _- K& L- a" A3 b
/****************************************************************************/4 r. k3 T, E0 O6 a
unsigned int ECAPRead(void)8 T6 T# l8 R  r) P/ X/ X- T
{
! L% E8 k# I# Q        unsigned int capvalue;5 I2 ]6 j9 j! h9 q" j3 w' x$ R
        unsigned long frequency;4 B8 w% k% Z# O# k+ o

2 `( f5 I6 F8 ?& c7 t! M        // Event1 中断标志
% ?1 v  G- [' b# J: H; G        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
- B+ d( h- g& f% A        {
' o0 M$ z8 z. ]; a                // 取得捕获计数
) J4 U5 c% u) U; K$ \                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
3 B: f4 P, l; l' T; S# t" @                capvalue = ECAPResult.cap1;6 f% {( j4 n: R4 {9 @: y
9 k. O. f1 R$ X0 d  _3 u' [1 {$ a# P
                // CAPTRUE 模块 228M 时钟主频9 o9 E  o- ~3 @
                frequency  =  228000000/capvalue;1 n( Y. E% P4 ?! m0 f* H& M2 b& s+ L
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);: ~  f+ P) Q6 ]! C; B3 G; @! b& F
4 O4 ?. \$ W5 [# P1 o9 t6 g# a
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
. q/ ~& y1 \: C* G& d//                IntEventClear(SYS_INT_ECAP2);; `+ S6 ~* D5 L6 f  T+ I
        }: B4 i& M9 }& h" l! D
        return frequency;
0 Y3 H/ a, M+ R$ V; K}
6 c8 ?. t$ S0 I
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。/ t5 D$ Y4 g; j$ K) @3 f( F

本帖子中包含更多资源

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

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-12 07:23 , Processed in 0.050025 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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