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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
& {) a8 j% y6 P( T! A" B+ c7 m/*                                                                          */
1 }6 H% P6 m0 q/*              宏定义                                                      */6 @/ I# W" `6 f0 F5 g- g
/*                                                                          */) h: b8 D( A; ^' C6 D2 h3 R
/****************************************************************************/* [$ z) q7 a/ A
// 软件断点1 f2 i2 T  V! T* y
#define SW_BREAKPOINT     asm(" SWBP 0 ");" @, T5 F8 j. Z% q

  p5 z7 g6 |6 K6 X// 时钟分频5 l2 T9 G( L# B0 V! o4 L
#define CLOCK_DIV_VAL     228
( Q& X% k9 h1 ]& |4 O, ~
& f* @" R" t4 m( n, J- t/****************************************************************************/
9 N6 P" \5 l& Q7 q" m/*                                                                          */
# D- }+ I. n7 r  h, K% Y/*              全局变量                                                    */
) c- X( r+ l+ V) c& p/ h+ @) `% J/*                                                                          */
+ z) D# h: b2 c" ]/****************************************************************************/! {% r1 T1 B7 c
ECAPCONTEXT ECAPResult;
# D! D. v! d2 B6 x
% P$ b# J3 M( @( A' h/****************************************************************************/: [/ b/ _# H9 z' v2 p6 H
/*                                                                          */
  Z- }5 L" R1 O7 k5 q/*              函数声明                                                    */8 E/ @3 K; o8 b& i) c; W
/*                                                                          */1 g: a0 S1 O5 z- s, k
/****************************************************************************/
0 y, x9 P& A3 h% \9 g// 外设使能配置, H) C9 l9 G( a, P. U4 u
void PSCInit(void);
7 s7 l# q& o3 s; }2 R8 }7 e6 j7 f+ F3 S; e( I
// GPIO 管脚复用配置% ~; D: {; g' ~2 j  R
void GPIOBankPinMuxSet();
$ j( o5 q  j! A/ `2 b8 p
  e% e% G$ e: q' w; ]// 产生波形
3 _2 v) |) A" `% S# Y' n+ }void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
2 X9 E+ W4 t$ I6 ~- ?; Q% w  T2 Pvoid ChopperWaveform(void);
8 m* r" I* U4 O" S, _; k
3 h9 i1 Y5 ?' W// ECAP初始化和读函数0 W  v* U& }% s
void ECAPInit(void);  w7 _* |9 W" h6 F
unsigned int ECAPRead(void);
- d3 O1 _5 Y, ?% l! ~" N
% H5 z6 U, x7 T( g, F) a4 s' i9 R/ t//ARM 中断初始化& w; b) r& \4 u4 `
void InterruptInit(void);4 ]8 @) K- M6 G) G

9 {7 Y9 V$ @# A/ n// PWM 中断初始化( a2 g2 ~2 s, d/ X
void PWMInterruptInit(void);
; W8 [) i1 `- Q9 x$ u6 `3 p8 L// 中断服务函数/ w% _* @! F5 m; o( W! o
// PWM 事件1 T' f% L( f7 q0 r3 C
void PWMEventIsr(void);
& N2 ~! ~7 F- ^8 R. b// PWM 错误控制事件
; u( Z3 K0 ~3 G, h) hvoid PWMTZIsr(void);
2 W) a& o8 d$ D# ^) h& `6 a( u1 @( m# m  V0 V, l- R1 N
/****************************************************************************/
! d9 o9 P, m1 ^( b' O: u+ o9 h, t/*                                                                          */
8 U" A- _5 B' G$ G, f/*              主函数                                                      */  Y% Q$ Z3 Z: s0 M; T9 I1 K
/*                                                                          */
0 V7 n1 i! E, Q, S; D8 l- l/****************************************************************************/! M4 O$ }. l( |: b, j
int main(void)) A2 K- I) o. |9 `
{' u; F% i% q. T! f5 K3 {
        // 外设使能配置- X& O& U# o' }/ p$ [+ a
        PSCInit();5 a% y, _# O! `

4 j2 L' z* s, _0 M- L( j4 ]        // 初始化串口终端 使用串口2$ a* r% I% c7 c' N5 a3 Y; L9 i
        UARTStdioInit();8 {: I% o# M' ]% U; {, X3 Q
       
2 L/ f$ e2 A3 D8 j/ @0 J0 g+ k        // GPIO 管脚复用配置
7 j4 d/ Z$ E5 _& y8 j/ Y        GPIOBankPinMuxSet();
. [4 ], N0 _" y! h" r! Z; {0 u  u  r+ v  @) m- i
        // ARM 中断初始化
6 ?( k- e6 E# s  t        InterruptInit();- s, t+ q/ _& c& Y/ p# M

5 ^7 b1 w- W* ~' N& ~        // PWM 中断初始化- Z/ D; a. n. y- [& _7 b
        PWMInterruptInit();7 Q4 J# m) y1 B/ A

2 S0 Q- o; V1 z8 F6 o8 d$ k  T# o! ^        unsigned char i;
$ u( d* h9 o2 U& @' h        unsigned int j;
! P) D6 ^  ^/ G5 ]( x$ s& L( U9 R1 _: L$ d2 j6 W  ?: E
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
4 `- T& t6 L' Q5 k        UARTPuts("------------------------------------------------------------\r\n", -1);
0 m7 ]. d  q8 J- U        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
6 J) \( v' V: }0 u* C, Y        // 产生波形
0 m" \' ]& y5 e/ a4 R, e7 {        PWM1ABasic(25000,50);5 p& v1 F4 S) U5 S0 z) z
9 J4 w4 _% o/ B. i& y+ `- I6 @
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
, S' ^/ v* a4 b  |& G! a; r; j$ e        UARTPuts("------------------------------------------------------------\r\n", -1);2 q& Y- V1 O+ T1 g" s; E* t8 }$ s: C
1 I% Q, T0 r% R: S7 E& B/ u

* P- a5 X; w5 {4 G9 y1 `6 @: \1 ~% y* D# C& f) y
        UARTPuts("------------------------------------------------------------\r\n", -1);; W* D" u4 J% E
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
5 l! e3 F) w" b  V3 J        // ECAP 捕获初始化
6 ~, }  g. H/ X        ECAPInit();) z1 V. U+ X/ s5 D! D
        UARTPuts("Initialize ECAP.......\r\n",-1);
2 C  E0 G% K8 E3 p6 [+ c2 g        for(i=0;i<5;i++)4 Z" k) q+ j/ X* F2 V. w
        {9 L- s& k% l; n. q3 n- M' _
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
9 `) l" C- N4 G0 N- ^% N                    ECAPRead();
6 q+ ~1 T+ B4 T5 A$ j8 m$ |7 ^        }
0 m/ V1 b- V& z% K6 r9 ~: D* ]        UARTPuts("\r\n",-1);' M: }! N5 i( {6 ]' F
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);9 Z# q, H: p7 X5 ]/ @! W
        UARTPuts("------------------------------------------------------------\r\n", -1);
% e9 ?/ ]( q5 r' b0 ?) c1 a8 d
4 X6 c" {& G; ]0 w        // 主循环. o0 z  [4 Q; y: \* I0 v/ b
        for(;;)5 P& b* [" y% e) l1 m
        {" [$ W, U# k/ ~' L! w& R2 {
4 G. }0 U* S! F" c. p
        }
9 [6 T) c" x& O7 X- H5 m1 @}
# [$ u/ ~0 B5 i; H9 P" c4 V9 L7 _) i) z7 O' n4 L" d* s
/****************************************************************************/6 G5 d5 Y0 h% V7 B- j1 u% v6 l7 A
/*                                                                          */- i1 I. o3 ]" W- v
/*              PSC 初始化                                                  */" h: K, w/ i7 p  O3 t& I. S% _% C2 o
/*                                                                          */5 m8 S' @! r$ l+ Y# m
/****************************************************************************/& c( S1 I% M% }# y0 }
void PSCInit(void)
6 L! U4 M9 _' m" u{6 @4 K/ E0 N( m& t  ]0 f4 ?5 E
        // 使能  EHRPWM 和 ECAP 模块/ h% B) v0 [  F
        // 对相应外设模块的使能也可以在 BootLoader 中完成9 i7 b- q8 H8 T+ v" W
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 v: D! R% v$ c4 [
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
6 y$ D/ v% }: z9 L3 O$ C}
; \! Q  k# D, ^: V7 r+ q) Q; P5 H
/****************************************************************************/
- `4 f% }1 \9 _( N  W( Y/*                                                                          */- P; r& ~* c% _4 s5 Q
/*              GPIO 管脚复用配置                                           */
6 @* ~8 x- M7 Y; }2 B; G& Q/*                                                                          */' H) P% f. h' {! a7 J0 g1 q3 q
/****************************************************************************/
" V- i7 V+ Q3 M; Gvoid GPIOBankPinMuxSet(void)& k: y3 l2 R8 c' K; x5 ?2 Q* [
{  e* J# X7 \8 ^& }
        EHRPWM1PinMuxSetup();1 d& C$ k: A/ p. s) k

3 E2 R% L! g/ ?  ^/ w% g, W! T/ S4 u' M        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)1 C/ V9 w& R$ W  _% T5 w* j
        // 作为捕获功能时管脚方向为输入* v' c, a# b+ C7 `  h5 l
        // 作为辅助脉宽调制时管脚方向为输出
) C$ j9 W7 P! E' l4 V, c6 _, Y! p    // ECAP2 / APWM2/ g" t; ~( H; l
        ECAPPinMuxSetup(2);
6 F; k: T% h* P' P! q* }. y( f3 `+ }! E+ X
        // ECAP2 / APWM2方向设置为输入$ `9 q* [: g. x- q9 g2 X
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
9 D3 ]  r" N+ W( `8 d% {! D( X8 ^}
" T: q# X" X3 U3 ^- [- Q/ Z5 r; n. n0 h
/****************************************************************************/1 M7 C& k- x) M+ _2 v: S
/*                                                                          */. l; n+ f; H* C9 O* E
/*              PWM 输出波形                                                */' H7 H) W0 r8 J, r$ L# q. Q( S
/*                                                                          */+ X! a) K8 z! [, b" _' ~4 P
/****************************************************************************/
* }5 `6 E; t7 M* V) ]* bvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
7 p" m* q! D+ G$ v% S{
, X6 e0 a% Q% m% [- E: v% A    // 时间基准配置6 [5 z+ q: @5 u7 c9 e6 m% B% |
    // 时钟配置0 {9 T! J4 U1 X/ Y3 H
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
8 c+ x1 v2 s$ p0 O  B$ ^8 x
5 N- p0 {0 s2 L6 \) Y- t8 u3 l    // 配置周期
) ?! F( ~2 ]. {6 i/ ]  X$ g    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,6 @3 N1 d6 Z7 F7 s5 f4 z
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);7 k3 h: v  r! ~4 N

  {* s+ `, V! w% [2 B8 l2 Z    // 禁用输入同步信号/ Z7 ^1 y$ P, m( g8 ~" ]; l7 v
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
* T+ R  a' B' c6 r/ `) E& z9 k& Z5 }/ Q% b* |$ Z5 i+ o
    // 禁用输出同步信号' Z  U8 Z! S) x: h
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
, a+ f, D  G5 v& S/ S! @6 U
6 n+ V+ H& y" A- J    // 仿真(DEBUG)模式行为配置
% I5 L( g" ?- j  I; |    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
% {3 f! l# b3 a6 i8 b) z
4 l, b- q( Q: \7 g. E7 S3 F    // 配置计数比较器子模块
' i% k" n) _) p9 X) Q3 r, p    // 加载比较器 A 值
& g- P# F* f4 x9 c    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
5 t; p; l/ [: B9 K; K+ f" N                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
) j2 Z- c, y/ ]5 E8 u/ u- T5 K7 D+ L. f9 U* I! M
    // 加载比较器 B 值8 T; ^% W# h% h( ^3 O6 k; c; {
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
1 E% N' s! w, ~6 g8 e5 ~3 B                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);3 ?4 `) e" t' V! v' E" X
4 b8 N3 j/ P; s( a! A7 Y4 _' A2 P2 U6 n
    // 功能限定配置(输出引脚触发方式设定)
/ Q) Y. u8 n' D/ e+ f" l$ T# _6 ?% e" R    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
* A" D, F7 z9 k( W/ U+ Y    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
: L4 z3 M* @. L" [                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
& B) Z8 ^$ @/ P0 C, N                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);2 p  e8 E* K) n9 q

( x  X4 z9 _# i) R& y# Z    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
  H  B8 O4 J) z! h    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
: k( |! ~' b4 k. R# L
7 ]( R6 ~2 h; M    // 禁用斩波子模块6 Q, e5 \6 r; G8 L9 W
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
, F2 [( [$ r2 b$ ]& ~  e
4 ?% Q. g* ?5 e: {* k' ^  L    // 禁用错误控制事件
0 Q) D7 r  W. {1 A$ T3 Z/ r; v/ C, r    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
" X; f& A1 b; H3 m8 T+ Z# L' Z; `    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
5 F2 k# l# _4 L# l: @# d. V$ m0 a0 z+ I% }3 e9 \+ F
    // 事件触发配置( A# {+ \" r/ O& T4 I' t$ P
    // 每三次事件发生产生中断* P8 x( i6 ]8 h! l, \% e
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);8 i' c5 g) \& A$ o, y+ T" S9 @
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
& n- r8 U6 a& `6 ?5 A- c: d+ H    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);7 z' e: I8 j# e& G3 j" ^
    // 使能中断- N" W) T7 u3 ?
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
% V; q2 F6 x9 ]7 \* M5 w4 j( c7 v) f* _, @8 O. {2 x0 y
    // 禁用高精度子模块4 H1 Q# C4 a" n) h/ D9 w) k
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);, [' z) a: e' A& q3 O' N' M; A! M
! I' v1 A, d9 A2 ^" S( T
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);& s, S* J9 c+ \& J, e; Q7 a; ^
}/ M/ r, Z) I" M5 K$ [" r1 Z1 u
* d0 r: A0 Q6 p" i* y
void ChopperWaveform(void)& R" ]  n7 j( \+ s5 P
{
& F( Y  q/ {+ w. U    // 50% 占空比
2 w9 p- Z9 ~* W+ c/ I8 v    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);" X8 e7 X$ p' Y5 K; `1 o
    // 4 分频9 E% {+ d& _9 U
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
8 i" @* K+ j8 U* U    // 单个脉冲宽度
) z: A1 j' R* ]    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);+ \; ]  i  c' y" y* V
    // 使能斩波子模块% ^+ E- I$ k$ h! V8 p' B
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
) x$ T* H5 r( d- k, _# I$ k}
7 G9 Z% h0 v" s- E- @, X: x: c8 A
6 j3 p! D9 q; e: k# T/****************************************************************************/% G; z: ?! Y" p/ v) P. m8 R1 p5 g
/*                                                                          */
* V: O: v. {  U/*              PWM 中断初始化                                              */
" e( a7 y9 v& D8 D/*                                                                          */
' g4 s4 }! @8 }8 k/****************************************************************************/6 m" P5 W+ o( C2 \+ d8 u$ `' w: F
void PWMInterruptInit(void)" T* n$ p. h4 o3 Y; S1 r! O
{
" _! s, ]5 {+ \3 u# F, A        // 注册中断服务函数: J# g, O2 p. g6 E3 f2 m+ Q9 L
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
0 D  ?' R- v1 x8 n  Y0 k        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
% W1 K( s/ ]  Z$ \6 t5 {. \7 e/ x: E* {) Z; V
        // 映射中断7 P# ~# u& ^: F
        IntChannelSet(SYS_INT_EHRPWM1, 2);
2 p7 }3 D5 h5 T/ `" [) t1 ^: y        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
4 e0 [8 K" W/ D2 x# M( U9 E0 c) Q+ _7 e- f: }( m6 H
        // 使能中断# j/ Z3 W5 A" S& \
        IntSystemEnable(SYS_INT_EHRPWM1);( J* A& H/ Y- k+ b) }# L9 o
        IntSystemEnable(SYS_INT_EHRPWM1TZ);' c3 T# H1 M! M/ r% y( T
}
7 C% k6 u5 i, S+ f9 a: v# l
0 f+ Z6 V6 j- ^* N/****************************************************************************/
8 I% D6 a0 k/ L+ P* |4 S% s/*                                                                          */( W% h6 E- q2 `
/*              ARM 中断初始化                                              */  w' [% H" a6 z" Y
/*                                                                          */+ J4 {+ h5 L7 a' ?
/****************************************************************************/: O5 J6 b; g% A, ~( V
void InterruptInit(void)
$ g: e8 |. L) k% q- ^{3 L7 K& Z3 u) M0 B# i
        // 初始化 ARM 中断控制器
4 s) G8 D5 E. @( B' D% z6 I        IntAINTCInit();
3 D' |5 f% @# t" D# c6 U
% n+ n# U+ ?5 X* K9 P        // 使能 IRQ(CPSR)
/ `- u+ \5 j/ N        IntMasterIRQEnable();
& N7 E& @9 u, B1 o' W
: C! d% {9 B8 k7 c, o/ H0 W        // 使能中断(AINTC GER)( H" p* S7 `' ]4 W0 l
        IntGlobalEnable();
8 h+ g+ d4 o1 A( M4 L5 T, M; A5 b
9 w  ~( v( j- O5 t& j* N. }        // 使能中断(AINTC HIER)
5 H6 S( h9 |) D, d: C" a- ]8 y        IntIRQEnable();! y3 s# t. {: [$ h+ q
}. ?7 z8 G  `# w" E$ L, o
5 n" b( D8 n/ P0 p) D1 t+ W
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/+ g- K9 D& Z: ]! s2 a
/*                                                                          */- V" J; j9 }. s
/*              中断服务函数                                                */
2 Q0 ^" X2 E% _, O/*                                                                          */
: w3 m/ E6 S3 ?* z" H) ~6 X5 `/****************************************************************************/& a- K( u) c5 _$ s. ?" p$ b( D
void PWMEventIsr(void)& S7 S7 [! _) B3 b$ q0 r: A: _
{
5 X3 f# v' B% h7 r        IntSystemStatusClear(SYS_INT_EHRPWM1);
& m) y0 i0 F- U* H5 v2 Q7 K0 `0 E
8 C. L1 a4 f9 ^9 B5 u$ D- p7 }+ B$ Q    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
+ i. h+ r$ }' V$ A3 Y4 w! f}
: ]# l5 X) H+ ?- N: k; i+ {* |- |! m2 |: @
void PWMTZIsr(void)7 e" {- a- n5 I. ^" T- B: E
{1 |% A+ N  G% v: d6 f+ X
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);+ U# B& q  r# L: h' T
6 ?# j4 V9 G5 B' z4 G, Q* v
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
; B) Y: Q1 X* l: o& l  r: y}
1 Z; e5 w2 N% W4 d; W
% U+ r2 D. @9 ]8 J# G/****************************************************************************/9 X2 o: M: V! l8 j" \" \2 J
/*                                                                          */3 T- s2 i+ v; i. P/ Y2 d* Y7 T) ?- a
/*              初始化捕获模块                                              */) q9 P( O3 g. m6 `  v! o
/*                                                                          */4 B8 Q( S' r8 ]9 [4 g5 I1 v
/****************************************************************************/
* k- H; x2 \' T4 l0 G4 Gvoid ECAPInit(void)
3 O4 s  x# p" d4 a1 T9 ~$ ?, N{
& @0 x1 F% q" `+ T, O8 h        /*-----设置 ECCTL1-----*/8 D0 `& Y( A& ?+ |" ^: W0 o
        // 使能CAP寄存器装载
/ a0 |* @& ]- ]        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);7 K5 d) S  {+ Q8 }! {
        // 设置预分频值.2 Y* t1 _; A. M' ?
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
9 G" b0 X2 Y9 p+ ^( o2 C* t        // 上升沿触发捕获事件) V+ }( a5 N9 q, i6 C8 S
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
& s% @8 I/ m" k9 W% r0 N        // 输入捕获后重新装载计数器值.( v+ K$ ]0 U2 I2 ]
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
2 F; i/ f2 G7 V* i7 t9 D& ~! a3 [# ^$ \. w+ D8 K& q+ R
        /*-----设置 ECCTL2-----*/
4 [7 K- U7 d; i) T        // 连续模式5 A0 ]4 i2 Q% n" @- a
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
& W2 R" u3 O: Y# v        // ECAP计数器TSCTR持续计数; ~$ I6 B- q# G" x, F' Y% R/ [
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);  m& ?# r% C! S6 n9 ]1 I
        // 禁用同步输出和同步输入' v$ G& O3 e7 x4 x
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
/ I* B6 z: ~. o% S% b        // 配置 ECAP 2 为 CAPTURE 模式% }$ O' F3 Y3 E% v$ D& R0 M  g& o
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);0 E0 \8 m3 a8 d  H/ k. F
9 k8 c2 u+ b! A% _
        // 使能中断
$ d7 \; T4 I1 \4 [8 x//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);( V2 L2 Z  H0 ~) v' A' |9 \
}& o  x! E; T( A$ K* ~" N

% h$ `' z/ l0 L* `! W/****************************************************************************/3 s" J% t" p- L' r+ V+ P- S' M
/*                                                                          */3 e% q6 I0 }# V2 C- W- X6 ?0 ?
/*              取得捕获结果                                                */  |& E2 o) ]) r4 u5 e1 X
/*                                                                          */
% {/ B) _3 M; \  A$ z8 P2 ~/****************************************************************************/
# p9 f6 L1 @3 X. Munsigned int ECAPRead(void)
  L$ A0 F: L9 {. p4 t6 J{
% W: J1 J' P2 S0 K        unsigned int capvalue;
  i) @2 `' o, Q1 @# B, m        unsigned long frequency;
7 M2 `! C1 d3 C+ ^5 Z" Z$ {1 \( k$ r) P# @9 z
        // Event1 中断标志
* h* s* u# W! c! n$ v) [        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))7 u7 w8 o) p4 f+ U" ?8 J+ Q
        {
. U% j% H- T: l9 K! [5 A4 u                // 取得捕获计数
4 I9 j- s5 D* F1 \- ]2 F0 |& \; D! A                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
! Q1 v3 x) H9 ~' W1 h: C' ?" g                capvalue = ECAPResult.cap1;
  Z4 c8 X% t4 ^4 `. t1 h& ?% ^5 ?4 W
8 q  H( Y" p, P3 Q5 |) K                // CAPTRUE 模块 228M 时钟主频# P, M2 u1 o5 R% T0 e% a
                frequency  =  228000000/capvalue;! l! B, x9 f' o3 c
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);' s( N, |1 c4 g' E2 @2 h

5 D) K. s" U6 x$ A                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);" u* z0 ?+ h- U8 |/ f
//                IntEventClear(SYS_INT_ECAP2);
8 Y& F! m' w, K7 Z) i        }
5 D6 Q& H; k, b        return frequency;/ l# n9 b, A5 R4 E! M: ^
}
7 v, K1 E3 O) z; u% f6 c; S
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。5 F6 T3 Y1 }9 q! R

本帖子中包含更多资源

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

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-7-8 19:12 , Processed in 0.057331 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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