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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/- ~- v7 }& t4 l3 K
/*                                                                          */0 |" Q$ p0 f" C4 `% _
/*              宏定义                                                      */2 Z# D9 m" q2 P' H
/*                                                                          */
/ x7 ?8 p9 r8 X+ O+ ?2 T. Z4 X/****************************************************************************/
3 O' g5 A& v+ j5 T// 软件断点% q+ E) U' K' l4 Z5 u
#define SW_BREAKPOINT     asm(" SWBP 0 ");, X% v! t! t8 {+ \' A* V  f

7 d" R& B9 k( N, R7 i! u' F// 时钟分频
) x5 V9 n" S% g0 y#define CLOCK_DIV_VAL     228
! g3 Z8 z; E( g1 G; a# f
2 z0 S: g& I$ }/ C2 V/ B/****************************************************************************/
+ l  x6 y; a& |) Q1 {: s/*                                                                          */8 u, q8 X5 R6 a' K6 F  O7 S/ P, `
/*              全局变量                                                    */
. L6 X- v0 _# [& y/ M6 T/*                                                                          */3 H: W( S6 I* d$ t" j% Q, b5 R
/****************************************************************************/
( q' U) J, m2 K) xECAPCONTEXT ECAPResult;6 S8 \4 c: i  ^% G4 _

0 m5 ]5 k; E. ]: S0 M! ^/****************************************************************************/9 q6 u7 ^/ j# C7 ^3 g: V. K
/*                                                                          */, G2 x$ A* ]3 p  S
/*              函数声明                                                    */5 N" [& y7 p4 [
/*                                                                          */
" G: W* F; x' q" z! I: ]6 [" E/****************************************************************************/( _! O% l: ^* d7 S& J! g9 T- }
// 外设使能配置
$ ?# E$ G* H& xvoid PSCInit(void);5 z" C2 R8 s7 _4 r" A& S" i( B
5 Q) g. G, ~4 s* q1 H
// GPIO 管脚复用配置% k$ M2 z- n& k/ A# S% G
void GPIOBankPinMuxSet();
  p8 u# G( R9 G  V7 `& y" e4 `+ `
0 e" h8 ~4 ?9 [3 V0 f5 |// 产生波形" ^9 q* Z- K1 ~
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);8 _% S7 i: G( j# w$ ^. F
void ChopperWaveform(void);  H3 _8 h) N9 z4 s

5 e9 e- S  j  f( k8 I5 B& @& J- W// ECAP初始化和读函数8 ]7 P! u! |; x3 ~1 J9 V, v9 Z8 w
void ECAPInit(void);% N$ {; o. I  I1 F
unsigned int ECAPRead(void);2 ?( W+ H' o9 L- m/ F* D
9 ], g7 [5 i, t
//ARM 中断初始化
- _; y9 t# N) ?3 ?void InterruptInit(void);
* X& h3 h( X1 F8 N6 N/ x6 D6 m* k: r& d
2 N( i+ L5 d* V& @4 z5 R& }// PWM 中断初始化8 k& @9 ?1 b5 d: }+ V* K0 ?
void PWMInterruptInit(void);* ]) `' W4 ]# `
// 中断服务函数
9 ]$ S$ a' |+ U1 Y& B- p1 u// PWM 事件
  K; D# X3 u/ t8 k1 d" R) ^2 dvoid PWMEventIsr(void);
' [5 U7 h5 P! o6 N( D: `// PWM 错误控制事件9 w) S: c" X* L5 F
void PWMTZIsr(void);  F- w/ ]( R( `+ y" l/ K7 k3 t
* `% }- K& K3 B# L6 G
/****************************************************************************/9 F  ?6 t/ @7 P3 ^* x7 [
/*                                                                          */
% A$ x& y# z0 y$ R/*              主函数                                                      */7 p7 V; J3 s! F4 i
/*                                                                          */
  N; v2 x' g7 y9 U" f/****************************************************************************/1 G8 F0 f2 _$ y5 {
int main(void)5 O  g; U9 u/ M) k
{) p0 f$ u' F3 f0 e2 ~' {
        // 外设使能配置8 I! y8 ~; Z% x
        PSCInit();
' z5 L: S/ j) Y# E! k* c) ?
& U5 r5 \  j$ |        // 初始化串口终端 使用串口27 {; p. D5 F- G3 b% f
        UARTStdioInit();
: v$ f. p) a0 z2 E       
/ U' z! U0 i+ t# j6 B        // GPIO 管脚复用配置1 ^& E* V0 H8 H3 e5 Y1 H
        GPIOBankPinMuxSet();
6 J' x( `1 Z, H  G
$ I5 m" E/ _- H+ h3 g& b: F        // ARM 中断初始化: `  r9 A! H* [* p4 p+ a
        InterruptInit();
& H# X  V, U5 c/ e; Y) a
: T1 f! I& t/ ^. V/ V' _        // PWM 中断初始化
/ }. B2 ]( g2 ~- X6 j- R! E        PWMInterruptInit();
9 l' \% V8 l3 O9 L
5 G$ b9 t. N- U, X4 |        unsigned char i;
5 e, l& N7 @# g; ?9 d        unsigned int j;/ M! [4 K8 h% P% U0 ^/ H0 z  T6 M
3 D5 e' }2 p) u& E
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
* y: F; H5 t- V; I& s        UARTPuts("------------------------------------------------------------\r\n", -1);
( }. z, @+ n$ {; S5 M        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
! j) _# |4 Z1 p( T) ]0 x        // 产生波形
6 p6 F1 B' q9 F8 ]* g6 S        PWM1ABasic(25000,50);' L7 b1 u* Q& h

, x: A- _- V& w+ n5 n; Y& a        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
% F* |+ s  ^* r$ g' G        UARTPuts("------------------------------------------------------------\r\n", -1);
: z' r% B* u% @' j0 L# E) D) s* \* ^" i, O( W5 q+ d
; f0 l, W# m' J9 V

3 |; U; z, o  P        UARTPuts("------------------------------------------------------------\r\n", -1);3 U# M, V! F1 w' K
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
- r7 |4 i$ }7 G. h3 {        // ECAP 捕获初始化9 @& x" ?/ _' g0 m
        ECAPInit();0 ?, u3 H1 [. `6 X7 c
        UARTPuts("Initialize ECAP.......\r\n",-1);4 _4 \* r' s6 L0 Z1 j3 O, G+ J- k
        for(i=0;i<5;i++): p. V. @* W9 X2 _
        {
7 V# z" g0 `  V1 N% |, z/ J                    for(j=0x00FFFFFF;j>0;j--);            // 延时
! j1 n0 `- ]' U: a9 w                    ECAPRead();
2 @5 m: U, ~  ~% M5 z1 u% r        }
; X! A/ Q6 t1 K2 S2 R0 `2 R        UARTPuts("\r\n",-1);3 ?! g/ g+ f5 f$ u
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);6 k: X6 K! [8 o. |0 R
        UARTPuts("------------------------------------------------------------\r\n", -1);+ q  D, g4 |9 j* ]5 \
, E: [4 N/ ?4 M/ l. h' {
        // 主循环
: C& c4 ^& j8 T        for(;;)2 M) N7 a7 u" [9 V) x
        {4 S8 w9 S) m4 A& w* d" a
% O; }+ \, E/ U; y$ Q
        }
" D- r& w* L! N2 {) }9 m$ u5 G7 O3 P}
: Y2 e+ m1 e" [' {+ ^, k" v
8 s7 {* {) P6 F. F3 e# a( l" ^/****************************************************************************/7 V& E4 J; Q! M+ W9 q) e/ X
/*                                                                          */
' B' V# u8 C3 t6 P3 y/*              PSC 初始化                                                  */1 N/ |5 @7 R3 d& Z# I: C+ \( K
/*                                                                          */. v/ l. a( W5 R( f. \
/****************************************************************************/
' q' v! n. B% [, @, k! O8 M' \: W* H9 @void PSCInit(void)9 `1 K) T4 M/ J. c8 ?4 ^
{
  r1 ~1 \# y3 {" {& e        // 使能  EHRPWM 和 ECAP 模块
, X5 V  P$ o: x, ]        // 对相应外设模块的使能也可以在 BootLoader 中完成
( n9 D% U( g- U# [    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; X* N3 n9 M9 A- B) D    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);) K9 g" }4 {6 Z1 y5 t
}
& [. `6 y* P* @* E9 q
6 j2 e, G) s5 @( B0 ?8 T1 d# [6 H( a/****************************************************************************/
2 W! e) |7 F% r5 f9 W" B/*                                                                          */
$ ^$ G' h+ ]2 _: A- u' c/*              GPIO 管脚复用配置                                           */) m6 X' V1 B, N
/*                                                                          */! ~) B/ v/ E1 `
/****************************************************************************/
) ~2 [6 M% W! _, E$ A' c9 kvoid GPIOBankPinMuxSet(void)8 X! i5 p3 F) m1 j* x
{
/ Q3 V4 W- _2 o  z  w- }+ Q* M1 V3 v0 L        EHRPWM1PinMuxSetup();/ h5 a  r; H. D( w6 ~4 {
( r, R  E  d. `" Z0 X8 T; p
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
3 n/ J3 D$ |% E* V        // 作为捕获功能时管脚方向为输入
- P# }4 {: a  s6 k) Z7 i4 `, i! x# u7 @        // 作为辅助脉宽调制时管脚方向为输出
; K5 q* }( n0 C6 X* U    // ECAP2 / APWM2
. `" z8 C+ V$ F$ x        ECAPPinMuxSetup(2);
8 S7 a  O9 L, t! ]7 p; o* [$ Z
& S9 }/ H( D4 @- Z7 I        // ECAP2 / APWM2方向设置为输入, ^+ p, X5 Q- @
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
: S0 \: i' R5 H& o3 d$ w! E, m}$ S( ?5 g* A5 m$ u1 M  r
( I- J3 V% S+ b6 x
/****************************************************************************/' u- B& W3 L* f; ~9 e2 H  L
/*                                                                          */5 M  s& U1 [. \5 Y" a' N2 H; m* H
/*              PWM 输出波形                                                */1 G: e! A- a" C4 e. Z' h+ U7 _) c
/*                                                                          */1 j, K- |2 f6 N9 @, W
/****************************************************************************/
  e5 x. A" D* c3 C/ i7 ]! pvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
! d3 e8 ~4 r) e* j1 O0 T{
7 ^& O+ w% t6 x7 Z- P# k    // 时间基准配置
, ^& P+ C; c) m$ @# O    // 时钟配置
6 C) c  q: v0 l8 E& a    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);) e0 b, U3 ?  a% V# ~/ k

1 n5 J! v: g* W8 o' a5 ~    // 配置周期" J" u$ C2 F+ W
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
! R. }" K5 M2 M& F4 d                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
3 {$ F* H- e  h, R% d1 s
: u4 `, L5 `) V' B: o* j    // 禁用输入同步信号* n4 z0 d+ e  x" c6 j7 k1 h+ E
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);' ~6 n/ D6 r% v3 N% [  a; V$ b1 A

# _3 s0 g* T; N/ I    // 禁用输出同步信号( f: x" C* I; o. l, u+ H2 B/ t
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
1 Z/ ~' |# ^/ B$ y5 p
0 I8 @* l9 q* E! k. s! R    // 仿真(DEBUG)模式行为配置
( c; H+ w. i! Y, W& @  w    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
# ]' P. E& M3 ]  c9 U" k+ e9 t
! d9 X! S3 j' U7 v! Z+ W) f    // 配置计数比较器子模块' Z& T6 w. ~9 o% R! `8 g
    // 加载比较器 A 值
! f& v% N: X, j$ E# W5 j, I    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,) n6 o! ^7 m; |: a- ?2 n& Y
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- _& X& \0 R# V) l) O# o; ?, _
% n" x4 x1 f( P) ?0 O    // 加载比较器 B 值* P* Z# A6 a5 f+ T+ T( X
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
1 C1 k* C% S! O/ w4 Y8 X- X                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);+ f' ~7 B$ q2 }' W8 j  H

/ n1 E4 q! P8 [$ l* B9 E. z" N; e    // 功能限定配置(输出引脚触发方式设定)
; y9 v* j( `0 O1 B" n/ V    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
, g- c, k2 J9 c* |9 G% v+ z    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,0 c9 a8 C0 N4 p& o* c
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
/ O0 L: n, h" M: H4 t8 F                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);+ X" F  w# }- I4 N; K1 p9 R7 B

, N, X+ N$ t9 p) d3 o    // 禁用(旁路,信号直接输出到斩波子模块)死区模块3 T* G$ S* F- D; i. ]) L/ F
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
* j  t  h- x8 Y1 Q4 X* K9 M- n2 O. K
    // 禁用斩波子模块& K; J0 r( G9 `/ G
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
+ \+ M5 H+ D& q' N2 n
  l: z. Q) Q2 @5 u8 R  F4 T9 |& f    // 禁用错误控制事件
, |. d, U, C4 k; x8 e' ?# Q    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);* x) ~% F; P1 P& S) [
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);! @+ U9 G$ }0 B2 Q; w3 Z  H
8 g2 `) b3 s/ y, [3 V5 c5 [1 e# Y
    // 事件触发配置
$ a  s/ ]: [0 k0 B    // 每三次事件发生产生中断3 p. d5 \, t2 H2 `4 C. Z
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);* w1 k) W7 M" T% Q8 N
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件1 X/ t1 [5 I) C2 }& e( D2 F3 ^
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);9 O) e. `! \0 w- l# m1 }
    // 使能中断1 z3 I# C6 ~. R/ I, }% ?% G3 l: o
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
7 P9 ~4 e) E5 v6 q3 S- c
. b- T7 I; T! |    // 禁用高精度子模块
3 ^  Q" r; G: R% b2 ^5 W    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);! N7 ]2 x) C1 K0 G2 u, P% X; N
4 ]. w" g9 ]2 t
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
! u, @; [( |, N: e3 l3 Q" F}
, G& R5 \; d5 q( m5 m6 h9 p/ ~9 ^! i5 v- }1 h
void ChopperWaveform(void): V. o7 g- b5 S/ m+ w9 e* C7 t
{
2 r9 v8 W* L& I# N# s, W5 b/ R1 _    // 50% 占空比, Z5 N6 F" b3 L0 `
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);* W$ f! }/ _7 U+ U8 r7 F
    // 4 分频
# }- x  v6 e8 q1 u( r7 x    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
  G  u1 ~0 {: Y. C    // 单个脉冲宽度
  P8 y# \8 B: D5 Y3 g$ ]( M    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
, k6 C9 `! P0 w& i, I    // 使能斩波子模块1 g% N9 Z; a5 n  g
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
1 }: o) A( h9 s2 S) {& R; ~}' j$ V1 ]7 H) i% F* Y( [3 b
1 A4 g- f3 c8 H1 ]) x
/****************************************************************************/% ?- i1 d7 d5 _- m+ o
/*                                                                          */
4 r3 {; J) N3 w/ r/*              PWM 中断初始化                                              */1 V7 ~# J2 u$ U4 O4 w: I6 B* W* X4 z
/*                                                                          */3 I1 ~; A! D' w; J7 E" [) q! E
/****************************************************************************/
, c+ s7 O7 C1 R; Q/ }$ t; h  ?, ?5 Kvoid PWMInterruptInit(void)
9 Y3 g0 s2 q% K{& X+ f" w& N/ t$ ~8 l
        // 注册中断服务函数
" o6 v, t/ z' V7 p; I6 R        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);& P8 I8 `& O) b9 ^, Z
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);2 w, x$ [, f1 z/ U" a, O6 X
4 v+ a4 ]$ }6 Y
        // 映射中断
* G) V5 P# q7 b* b  A: \        IntChannelSet(SYS_INT_EHRPWM1, 2);
- J9 ~% j* H; V  j% T* l; U/ s        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);" g" t9 I& r5 y; r2 @

9 B4 ]- G6 c. u        // 使能中断
8 b1 Z% Y  `: Q' r6 c  G        IntSystemEnable(SYS_INT_EHRPWM1);/ d1 E: e1 Y  Z
        IntSystemEnable(SYS_INT_EHRPWM1TZ);4 h9 T( H, d0 `
}8 Q' l7 S- G" |$ {) f, t  X$ g
  J# C* D3 j( j; ?5 P, ?* \4 x
/****************************************************************************/
: I3 @4 k6 ^4 _7 g  m. P! s/*                                                                          */5 o$ M+ w2 {, t6 v4 h" [* _* [
/*              ARM 中断初始化                                              */  P: U% t1 [  A9 _0 B1 a  E0 |, ?
/*                                                                          */
( d* T! f1 R' Z  S/****************************************************************************/
; U! X8 G( O' lvoid InterruptInit(void)( ]) z% C- V  F1 ]! x* H% I1 r
{
" q9 i' ]: p4 E$ F( f! }        // 初始化 ARM 中断控制器# Q( D" _3 I4 P( `/ T7 D6 n' a0 m
        IntAINTCInit();, u2 D* _% d6 Y; [. \% ]7 k9 R
. k  h2 H) Y3 G
        // 使能 IRQ(CPSR)
' `( u7 g- V+ M/ C' P        IntMasterIRQEnable();; U8 u, z6 L" h% @: n
8 ^# y9 ?0 y- ?+ ~
        // 使能中断(AINTC GER)
" Y$ o' Z; W5 k, A6 \8 X        IntGlobalEnable();
$ x8 b9 _! `6 [- E
1 g/ w1 X9 M/ J2 C        // 使能中断(AINTC HIER)- M: r7 F2 e8 A7 P% Z" X
        IntIRQEnable();
) X3 K# I4 h$ m% G% Z6 E8 B}$ D  x$ \) N6 o1 a
* D8 t9 w7 h6 }( I1 D
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
& h% o2 e6 |- r5 z( B# U) z/*                                                                          */
& w* X% E- C$ e/*              中断服务函数                                                */, l, n, |: {9 n+ {. M
/*                                                                          */. s) k, X5 N9 b% O4 s4 d% {  ]
/****************************************************************************/! Z" X2 }8 [. Z
void PWMEventIsr(void)
0 h* g) z5 ?, z{0 S" l+ T8 r1 N9 v: O  N* L& b
        IntSystemStatusClear(SYS_INT_EHRPWM1);& C5 K. m" H# V0 s
/ u+ i4 O. z- t" o
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
7 A+ b$ y" O' \; P9 g3 x8 d}
( q+ E5 Q2 ?4 B+ ^5 ?- `5 }3 c4 h8 C! n) b. A  u( m' Y
void PWMTZIsr(void)8 _2 V3 N8 H1 v8 B2 W) B" v0 f
{* v" g& z# |) t2 w
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
$ A' u: o+ C! A- @
* A; ?; R& z# @    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);" ~$ s. A% }/ t" b! A3 p
}9 N9 j' d/ j/ x. E6 S9 [' K
& g( u& e' i# f. m: ]9 z6 v
/****************************************************************************/
+ w6 H! Z: i7 g+ S& I8 h) e/*                                                                          */8 {) l5 k$ p% ?. {0 ?  D; Y; O
/*              初始化捕获模块                                              */
! J) m! |" v- V2 c7 [. a& z/*                                                                          */
, N% q- U2 T  v/ I2 i, j/****************************************************************************/( U4 s8 \5 U' M9 V1 Q- ~
void ECAPInit(void)% a4 q8 I0 j1 Q* |% n4 O8 j* p
{
9 n1 }* I% n  b) k% p        /*-----设置 ECCTL1-----*/0 ]% F8 r0 ?  ?% Z& p! n1 i
        // 使能CAP寄存器装载% U6 P$ U# w2 @0 E) k
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);9 z2 T3 G( m$ r' O4 c5 E$ ~+ b
        // 设置预分频值.: Z" u' s6 h% m
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
9 s3 O5 H& O/ _( M5 o        // 上升沿触发捕获事件
8 _" B% e+ h$ k% Y! \% P# @+ U        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);1 j# J0 y! E: Y9 v+ P% |; |
        // 输入捕获后重新装载计数器值.
* |0 L2 a4 O6 x0 B        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
, l4 V* J1 F3 n& b7 w5 U% g4 U* T- z4 V# ?* C; i# d
        /*-----设置 ECCTL2-----*/7 v. |, C( o* k! t1 k' N
        // 连续模式+ m; O& ?: o3 P' I
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);6 R9 z+ Q+ o4 N6 d0 \, i* T
        // ECAP计数器TSCTR持续计数
' s+ b9 V) W9 C        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
+ p7 n" s6 e+ Y1 N+ r        // 禁用同步输出和同步输入' q# l% v7 M4 J' [+ a& t
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);  Z7 {) z1 n  Z) }2 n- i7 K
        // 配置 ECAP 2 为 CAPTURE 模式
7 F  K. ~2 ]$ }: u. L7 {/ f        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);) t, m' S! t& l: D1 Y

+ [; t6 ?7 [6 T! F* y) g        // 使能中断
" m7 F$ H( x  @: w, X//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& \8 F' l' b7 A& l7 X0 }/ P: Z}
& F% Y) v4 B; D9 O% N4 \( m( V' A  ^  g/ i% B3 a& X# N$ K
/****************************************************************************/
0 Z# r) m% F* v: V6 J5 d/*                                                                          */: F  H' r; s. }; T7 d' ^0 g
/*              取得捕获结果                                                */
* O7 N1 G9 ?* J0 s  I/*                                                                          */) w4 L0 t8 B& `, n# z; G9 k
/****************************************************************************/9 S4 `7 e1 Z5 [% r. x% x+ s2 z
unsigned int ECAPRead(void)
- W( [* W8 D) y! K3 \{' x" V; @! H0 {: p
        unsigned int capvalue;+ F, G4 {$ l8 b# s
        unsigned long frequency;+ m! g) j- q1 F1 w
4 S/ z% {% z* D6 n1 l9 w& @
        // Event1 中断标志3 d) ~# E) s3 U) T7 N; F
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))* i" M* p# o2 y1 Q" d# Y
        {" r5 m1 F7 ]+ ]. y" Q/ C
                // 取得捕获计数
( N1 q; [# a- S% W  e! C- c% \                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);# O4 h1 w) @/ W. ]
                capvalue = ECAPResult.cap1;
/ h5 C4 m9 ]7 u, J3 j) m  ~4 s- \( o1 ~; G6 ~
                // CAPTRUE 模块 228M 时钟主频
/ Q% ~* D* B- l: G' N                frequency  =  228000000/capvalue;
2 ?* {2 O  r0 K3 m0 X7 g                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
9 E! T4 U4 f( w2 v" G9 [) f3 z4 v2 v! Z
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
8 B! ?; g0 A  W$ @//                IntEventClear(SYS_INT_ECAP2);
, e$ M% y4 ~6 o  C        }/ L' K5 }4 U  S! o  u
        return frequency;# m7 @+ b5 {. r7 s
}
) a3 _  l) R$ }8 ^% d
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。1 s+ u% o& p# O+ g5 t

本帖子中包含更多资源

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

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-11-1 07:53 , Processed in 0.052077 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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