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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
1 D3 N- ?& g" O7 W" s( H/*                                                                          */
* u( l- G$ |8 ^/ Q& _5 {7 i/*              宏定义                                                      */
' H$ p5 y- d: J$ i/*                                                                          */
' V8 ^! ?- _2 r- z" p* x/****************************************************************************/' f2 T4 |* n  t; k& A3 K
// 软件断点
' V0 f( |1 c! p/ f7 N#define SW_BREAKPOINT     asm(" SWBP 0 ");2 f- o* N+ g' P. G- N, X

- b& U$ z/ t. g// 时钟分频
. m% @: v3 X* K4 Y1 u0 n#define CLOCK_DIV_VAL     228
4 |2 E2 ~( t; E1 f+ Y
% |6 O2 P7 G, ~7 `* C/****************************************************************************/
( Z. o/ L% I  F) P" x/*                                                                          */# s; U& o+ {' H7 Z9 u1 x: w/ g
/*              全局变量                                                    */
" i1 f( u+ N; k, {) c/*                                                                          */9 e& d" s5 n/ o8 m( k8 r2 j+ ]; e7 T
/****************************************************************************/. ~8 s9 A0 T; P
ECAPCONTEXT ECAPResult;
4 C) }, G' M( J- S
1 n: r  ]# `+ ]/****************************************************************************/" {2 H2 C* ?; o0 v8 a( e
/*                                                                          *// O! ~3 N, \+ l/ p) c  v! W
/*              函数声明                                                    */
- m: g# T1 ?4 e" a! A/*                                                                          */
1 L1 n4 F) s( o( ^. [2 Y% R5 R! `% d" |/****************************************************************************/3 R$ E  ]0 T; R  Q3 C- S
// 外设使能配置
$ K, g0 H) t/ e+ b, A4 A  }void PSCInit(void);1 z$ `& N8 W3 j# s* Y% E

7 E' e5 o2 e% [1 m2 F' _5 w// GPIO 管脚复用配置- P# O; u0 l1 f1 @" B
void GPIOBankPinMuxSet();" G- K# r+ A3 d) U
/ d- j& ~  I: r# r; X2 j; u6 B1 F1 K) H7 |
// 产生波形0 u2 G* X8 }0 i0 |+ x! G, v  A: [
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);# g/ ~7 x" l8 e: u! J. @
void ChopperWaveform(void);
  I9 v, v8 l8 I$ I( Y* S
4 u4 d8 |/ o5 `+ A$ l' q1 j: ~// ECAP初始化和读函数
  `% C; A$ i4 m' O2 v- K4 hvoid ECAPInit(void);
. {$ H" O; ^7 o2 `7 lunsigned int ECAPRead(void);
9 w( L1 N! e2 a' i! k5 [8 B
9 M& ^% l: N2 v//ARM 中断初始化9 [: n, F$ G: a" r/ O% l3 ^
void InterruptInit(void);- H% ^* \1 g# V4 |  P- [
: ~: c! G# X& p9 V) G
// PWM 中断初始化
2 ?7 E7 p& a& V$ p7 Kvoid PWMInterruptInit(void);! a5 J! o2 o8 c) \2 y2 g/ S! T( G
// 中断服务函数9 R0 F$ p0 y6 y* U' Q
// PWM 事件
! Q" o: U' ]% g9 i9 `void PWMEventIsr(void);
. E$ C% V( {7 ^6 `. x3 i// PWM 错误控制事件1 [0 k* m6 f+ z+ |
void PWMTZIsr(void);' {; V3 J1 d$ ]& D* _: f3 h" X
7 m' R! Y8 |# p! @% {) I0 ]
/****************************************************************************/& j  h% i- N, a; T/ w( s/ r, ]
/*                                                                          */* E% L0 ^$ l+ g
/*              主函数                                                      */
. U; b  d( T- a# q; I/*                                                                          */" ^) Y3 Y: D; e; N% D5 t6 {
/****************************************************************************/
8 v5 X% G# @+ J3 B4 jint main(void); Z* T; R8 f! E. u# |* D7 s
{" s. T% Q0 p2 H3 X" T
        // 外设使能配置
' T, Z3 M+ _3 e) T        PSCInit();
' z& p9 U3 E+ m; C7 x2 X/ M" b+ ~, ^6 _& s8 h1 \" e% y3 I4 k
        // 初始化串口终端 使用串口2
$ @" e  x7 u  p  ^: {& B2 L        UARTStdioInit();
8 s' M$ h' v. f3 g& ~6 a          e/ A) U/ K5 U/ S4 m1 C9 J' f
        // GPIO 管脚复用配置
2 j0 Y* I0 o; [, q4 x0 [        GPIOBankPinMuxSet();) }( V. s/ d$ l) S. N7 L8 p  t' Q

3 G$ G! k; U: u8 D* y' [5 N2 [        // ARM 中断初始化
$ t5 ^5 m- n  P, V8 R& F& l' p        InterruptInit();
, o) f! o) N5 n6 k6 Y% Y$ h3 w# z* g' ]; O) P" K: L6 I
        // PWM 中断初始化' `% S  j4 E$ P# @! F, `
        PWMInterruptInit();
, n8 M1 r8 W2 B4 T7 ~  [, J3 A2 H' Z9 x: w( f2 c
        unsigned char i;
; R! r! d/ _8 V4 h  d  e3 W! [        unsigned int j;
; c  E* x5 Q2 G" H$ M* |# ?. W- A, X5 g5 T
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);- D3 `& a2 D: }$ }( D
        UARTPuts("------------------------------------------------------------\r\n", -1);, g1 z' D' `6 a( \1 D' k( @
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);$ L+ X8 N. f6 |1 C  e2 ~9 m
        // 产生波形6 X; s# r" v/ e* z8 n1 z( e
        PWM1ABasic(25000,50);
. ]& n2 y+ _; \) i9 R
8 l; m' c4 d, X3 d4 a+ |( `* r        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
, n9 h) }" R3 n% N1 y( W        UARTPuts("------------------------------------------------------------\r\n", -1);
2 H8 `9 P! H2 I5 L: I0 h. O5 ^7 [& ?, \; M% |' R; U
3 h0 [) h3 N. w5 {+ Q

0 A$ n+ X) T8 e8 R, g        UARTPuts("------------------------------------------------------------\r\n", -1);  }& X" G, g/ k7 }, G
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
& ?5 b1 U( A; d4 F4 C5 k        // ECAP 捕获初始化
6 P0 l( _& _) Q9 U        ECAPInit();" p/ f& m8 }* b6 Z: G# j
        UARTPuts("Initialize ECAP.......\r\n",-1);$ v$ g9 J% q: e( E
        for(i=0;i<5;i++)- i$ T6 o3 F) l+ L4 o' I! I* }, G
        {
2 W! {/ p$ Y- i3 d                    for(j=0x00FFFFFF;j>0;j--);            // 延时
6 ~+ `0 z3 n& V! m  r                    ECAPRead();. I9 ?: b* H8 T) P8 e! k2 P
        }) q7 r+ K9 ~, S5 e8 g
        UARTPuts("\r\n",-1);
9 M2 i9 c' d3 ]$ J& X* j  j2 Y9 p        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);8 t) q+ |2 ?. G
        UARTPuts("------------------------------------------------------------\r\n", -1);% ]$ m4 `8 ?& K) Z( M( |. N
3 \! l. y3 N. P' ]! p
        // 主循环
. T& P$ A3 O5 B: Y; U! L        for(;;)
- m  p+ Y1 C, ]5 S        {
# Q9 ~5 M- \. |( j0 F4 ]1 k+ x4 P7 w& u2 U; u
        }, ?- o9 M  _0 A1 ^/ e/ D; }5 B
}6 H9 K& o' ]$ Z* Y0 x
- n& s8 A! @# J
/****************************************************************************/
3 |$ {" r* L7 x* K% b3 O$ P/*                                                                          */) E4 R, |& @) h  p! C1 ?
/*              PSC 初始化                                                  */' T$ [* ^, U% z% G
/*                                                                          */% ~2 _+ a6 F# [4 O- |* d, @
/****************************************************************************/
0 K! {0 ^' z7 R, q3 y: B7 C) K0 V  jvoid PSCInit(void)
# e" P  k% k5 T3 h: E7 N) e/ M{
, U% c( ?& {+ N) m/ K, q        // 使能  EHRPWM 和 ECAP 模块6 b- D, S' ~. I. z. B, i+ n& a
        // 对相应外设模块的使能也可以在 BootLoader 中完成2 R/ t8 \& u4 N& X  a
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);3 M4 u: c4 H2 ^1 g  Z5 b+ P; |
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
: t& C0 X7 H9 C( ^+ ?}
. X- E* z  o6 u3 B( ~
# C1 N& u; S0 n2 Y- v/****************************************************************************/
8 t- x' c" f% `% G1 H/*                                                                          */
9 g) Y) O' h! q' i3 q/*              GPIO 管脚复用配置                                           */( Z" l. q4 i6 M
/*                                                                          */
* A5 b7 C: P. |$ H5 }# c/****************************************************************************/
" G4 H" X% b) f% Y/ nvoid GPIOBankPinMuxSet(void)
9 `! j0 B! F& \( D2 S" S{
1 b$ N6 b: O' W8 n5 T! d( V2 A  ]        EHRPWM1PinMuxSetup();
3 ^1 j% c0 H; ~8 @4 z( l1 d! x
1 F. L, T" Q  Y% E        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
* j" d" C9 \, `% }+ a        // 作为捕获功能时管脚方向为输入
3 S% k. |6 |( T& Y" u3 D        // 作为辅助脉宽调制时管脚方向为输出/ d9 a  b1 J; f1 L& {
    // ECAP2 / APWM25 B& B! x0 ^, u8 h" u
        ECAPPinMuxSetup(2);3 T" b' S8 u" H, q. y6 _

  F+ t! O# k; ?2 N        // ECAP2 / APWM2方向设置为输入. f3 k6 h) q4 _
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]* S4 I5 Q5 R% n* k( M
}5 p2 \" Q8 N% i1 ~. C0 j6 Z
  }" [& T' F! G9 `# G, w3 X3 z. ^& v& _
/****************************************************************************// X% [! P9 _* |7 c
/*                                                                          */  v) g7 I3 ~( g1 ~- W
/*              PWM 输出波形                                                */7 ?* ^/ b7 \+ v5 b- n
/*                                                                          */% r$ q* O) _4 }% k. s
/****************************************************************************/- t6 B' u( G- V& f4 L
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)( Y# ]7 b1 B2 o, N# M+ M* O
{* h' t7 C% A$ r6 ]
    // 时间基准配置+ Y  W4 A+ Z) u
    // 时钟配置' \5 c! O0 i! h3 K* L
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);% J- U; K' j$ d! g
; J# |1 |$ [5 X
    // 配置周期
1 Q7 k# O; r9 l: |8 _" `1 {! _0 \0 y    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
3 T+ `$ A) b9 k+ N, f" u, u                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);+ l2 J, ]) `# e/ V. J" V, T

: _9 _; V& ^1 m/ {    // 禁用输入同步信号
% [& s+ c- q3 G+ e; R, T; g    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);# W! ^4 ]$ A% Q/ u) e
9 L. K7 I. G1 }4 T; x/ z9 g3 x
    // 禁用输出同步信号& g4 {/ Y7 R3 W# J% x
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);' L* K# B% ?( `2 ]& Z3 ^* a8 f) G

' F+ l0 v1 R+ h+ X( C4 t    // 仿真(DEBUG)模式行为配置- k7 c  R$ V; w& p2 c( i1 u
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
4 U: h% `8 |1 ^+ J; |8 x3 M6 |# U/ j9 U) ]/ k- j) A9 }
    // 配置计数比较器子模块
9 g7 h8 I, s  b" E/ e: B( K; L    // 加载比较器 A 值
) O( j! r; E# p. H    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,* I. D$ y5 A/ L8 z: l- {' m4 O
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);% B  {" v! R9 k# s0 j. `$ K$ _; J, @
8 i# W% c; K) [- v
    // 加载比较器 B 值! r2 e* {, e% P2 Z& y
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE," ?# u" J. u. ~* N8 j- g# b' r
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 ]9 \$ F& A" k2 J# \% C! X" I  p& m) p" B  M4 [
    // 功能限定配置(输出引脚触发方式设定)
% Y" @/ @* \0 d4 W& {    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
9 n1 Z: _: I. p+ m    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,* ?( d0 N- C& s% t5 [1 y  X' ?1 Y
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,% f8 o6 M) C5 s' a; E- h' Y3 \' O
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
0 J: m1 `: H) p& e7 A9 g; h0 [! h2 W- H& p+ L
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块8 S7 f# e) m, q) z1 w; K9 c6 G
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
( Q9 V1 s2 l9 H
( k; k( V9 g; Y! m& u& t6 P    // 禁用斩波子模块5 v5 G  r& v) v$ b: [7 I# p
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
/ @2 V6 S0 q1 Z
& h0 C+ Y% {& w+ [# a# W9 v    // 禁用错误控制事件
. G9 t/ S- J+ Z/ `+ B' n    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);  A( a) O/ K# ^2 e4 S3 j; v
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);$ x2 V, Z+ t' l+ ^

" c, o& N) x9 h) F* y    // 事件触发配置, V' e! K7 j8 z( V3 n& L
    // 每三次事件发生产生中断* D2 c' t7 _) E. s' e, ~8 }) C
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
8 ~7 p, |# |& t  N    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件- ?: ]  J4 _9 G& c
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
6 C. u8 N2 s9 ~% S3 v    // 使能中断
( n" Z. h8 h' z% ^1 D    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);2 ~0 u" d$ P+ k8 m- B: X7 S: Z

+ v* T! W& O2 B. t! V' M# J    // 禁用高精度子模块
6 o9 `5 O7 i. l- t3 P    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);* y( t- H) w% A' _. Z1 j

; k; g; K6 t+ o$ ]  b; a( l/ Z    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);" Y* x& D! i. y/ V9 N. e7 `
}
* x6 F( {5 E0 `8 T6 A* J5 k8 q& I
void ChopperWaveform(void), n# J% M" A; p/ S# X  G& L
{
2 n- `+ G3 E& g! n$ M    // 50% 占空比
0 j% L% b8 c3 ^4 e* s6 x    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);# m% W5 s- C" {, D- `
    // 4 分频
% [: T& ~) @' y+ z    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);( Z) E) B1 l, C; D, t
    // 单个脉冲宽度
1 s" Y! u6 L. A/ `# Q3 T    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);6 r# F; T" H: D0 W- G0 i
    // 使能斩波子模块
& u& t+ Z1 M; a6 I! U) A4 P    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);' w9 U) P4 T  X5 e: w0 `+ K- u
}
3 C: ]' S9 P: p9 ?
4 X1 E9 k& f5 X; n6 U  X# ~/****************************************************************************/
8 o6 ~8 d# [' |2 {) |4 [2 s/*                                                                          */' Y' W! A5 L0 p  q  q
/*              PWM 中断初始化                                              */2 Z( n$ c& b2 |* ?: G
/*                                                                          */- O& V7 s( S# R, i% X4 ]) l$ x
/****************************************************************************/6 Q2 F9 U$ ^6 G3 x+ j( l
void PWMInterruptInit(void)
8 x8 ~/ s! X4 i! ~' O& i9 t{9 i; e, ?! t( h4 i: h; B
        // 注册中断服务函数! i  U. s' v2 ]+ G+ M7 {) o! e, v
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
* y9 _% k2 X# v0 W- {. T        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);$ t* U7 T/ h; a; P

- H( s' a% j- q4 r2 c        // 映射中断
# H3 p) F4 ~& s7 Z  b1 I        IntChannelSet(SYS_INT_EHRPWM1, 2);5 b' |4 w. s, N! @! }' X
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);& D% O7 M! r' t* G) h- W3 X2 G7 v& Z

& O' Y2 p3 O8 M8 }! U: ^* u        // 使能中断3 }: m0 g$ f5 i0 C
        IntSystemEnable(SYS_INT_EHRPWM1);. F6 O& |  i: }7 T! @
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
" |: s* b: t1 Q  J( Y+ h+ _1 Q}- u$ A$ u- J6 H! e6 }1 z
7 n' ]( Y3 i3 P2 l6 p9 G- O: l
/****************************************************************************/
6 b6 }, }/ l9 a: [4 A- a/*                                                                          */
( b% I; M9 A3 N0 R5 q+ q" E/*              ARM 中断初始化                                              */
1 n1 y, D0 `& E8 V, N/*                                                                          */
& y9 G9 ^$ v8 o* N* ^+ q/****************************************************************************/1 v0 v; {: Q4 }5 w, {- ^+ G
void InterruptInit(void)
! K1 o# u0 f" o. Y, V1 M1 V4 M{4 u7 E* f. Y: G. _8 ]# s
        // 初始化 ARM 中断控制器
4 b; Y; W; @5 S" l        IntAINTCInit();' u% Z) q1 W5 m4 p3 h
" O! K: n  m" P% x% K! F
        // 使能 IRQ(CPSR)# e4 N5 u6 `# c( ?. D* G7 H
        IntMasterIRQEnable();+ H" w* A; n( ?

% h" H1 C: M- q: U- S8 K        // 使能中断(AINTC GER)
8 S$ u- Q( b- P9 r% L/ p4 n        IntGlobalEnable();$ t. {  x6 f. M1 j; _
, C2 k. d: O# p
        // 使能中断(AINTC HIER)1 C; c8 g; A% c4 a
        IntIRQEnable();
# U: ?, g' \% E! Q% D* [3 s}
! J1 x9 h/ D9 S+ D4 N% x3 A8 Q7 ~! T) x% S+ l
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
& j" L) {* ]% n" F+ W3 W+ e/*                                                                          */; N! n: ~5 V$ C9 ?( Q5 {) `1 l2 U
/*              中断服务函数                                                */1 R  m4 P8 b8 A  ?
/*                                                                          */
  Q5 l$ l/ S7 p/****************************************************************************/( r. J' B2 |7 ]" u3 v0 F" M; U
void PWMEventIsr(void)" a! ]" X- e2 z; `0 b1 t4 L
{
! Y- E% n6 R. ^* D1 U3 p9 w- y8 r$ X        IntSystemStatusClear(SYS_INT_EHRPWM1);
, \0 U1 ~) }$ X! M$ N
# n4 l4 g0 i1 i, B" f  C  I; _, W    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
$ e- e; _9 t8 J# S: {}
# h7 j) N$ o" K. j2 Q4 E; V. n
0 k, ?) U, d' ovoid PWMTZIsr(void)4 x; ?( A* g: c( G! C
{
* g) S# N1 J6 o+ C6 L7 x        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
3 e8 b- F4 _! o' U( p/ y8 p0 S0 G9 }" d5 c4 H3 R/ g7 J2 j$ g1 g' ]
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
% n8 f3 s% Q' g}
+ A/ r" j. h/ s, H, b% F
, ]) J/ r4 G6 p/ o4 S. N9 l- J/****************************************************************************/
6 {8 i$ C' X# i& G( @4 B$ i/*                                                                          */
/ l, V. Z2 a+ c- E6 _) W+ @/*              初始化捕获模块                                              */3 d: U" L! C; W/ [# V
/*                                                                          */, v. `& W, i, f
/****************************************************************************/
8 h! K7 Y% ^, b1 g" ^( ]void ECAPInit(void)
3 [8 p, @) q- n, o  @  x: j{0 Y. t, \; J' [, I/ _  J6 z$ ~
        /*-----设置 ECCTL1-----*// S  S/ q; z  c, F; L+ e
        // 使能CAP寄存器装载0 p/ p& q- m; y; t9 p* V. v' o
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
/ S/ e" I. E0 i4 A$ H1 R" p        // 设置预分频值.6 ~' f" ~7 r* _3 e
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
. y% Q9 @$ s( x5 w0 ~        // 上升沿触发捕获事件: U, S7 X, {6 A! w7 ]5 y% ]
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);/ U. w% P; q4 I, _1 R6 p
        // 输入捕获后重新装载计数器值.( d$ D8 J* ]2 J+ T: S
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
9 D/ C# r6 S. M: \8 U' I5 i' n
" k' ]8 q- Y/ z$ [# Z        /*-----设置 ECCTL2-----*/
9 s" n$ J& ?* Z: R6 a        // 连续模式- z8 w3 y' \' K9 D: K1 P8 O2 g
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
- Q3 b$ n, ~0 {4 E# i        // ECAP计数器TSCTR持续计数
9 {$ \$ u! C  a- @: W        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
6 h% {' E+ m! }        // 禁用同步输出和同步输入# u( M. F& U3 S7 `0 ?
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);/ V. s2 D6 k/ ~( W( O
        // 配置 ECAP 2 为 CAPTURE 模式2 ?0 e2 `7 y0 S; m* r
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);  A  B" I. H0 [! g- V7 E

+ K5 C9 ]9 }4 U. m( Q8 e        // 使能中断
) D5 {& X, i# q9 r1 {, ]7 O! P0 p: h) H//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
) V2 ]7 _  [7 b* \: r$ B' F}
/ f4 L5 `. o+ a6 f  ?' z8 X/ {0 q; l0 v
/****************************************************************************/
* v2 l6 r3 f' v/*                                                                          */
- c9 j8 c$ e% {( h; _2 u6 y8 b9 J/*              取得捕获结果                                                */
( ^# K& E, n# v  ?4 |( N/*                                                                          */4 w) O) h+ p% @' m) C" r8 Z7 {
/****************************************************************************/
0 \& I) T: H+ c# S6 Z, hunsigned int ECAPRead(void)
( Z# }3 O2 S, X" X' l( _+ F{5 U, u: J# U7 t" M
        unsigned int capvalue;
: Z5 B6 h+ j% n        unsigned long frequency;
2 N. @5 F: {/ a; c, k7 ^* F7 K1 C3 T, D' R
        // Event1 中断标志
3 l! D& \2 c+ Q! U        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))9 j6 T5 w0 S. n$ _% g
        {
, U6 A# o6 P7 Z1 m, g' c                // 取得捕获计数7 A6 }7 }# Q/ d/ ~- q
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
5 q2 n& `# V/ ?6 ~                capvalue = ECAPResult.cap1;
$ R3 a5 `& ~/ o' O" g/ L: L! ~5 N4 z$ M
                // CAPTRUE 模块 228M 时钟主频3 R6 ^3 c9 E2 x4 D1 Z* [% ?" J8 c
                frequency  =  228000000/capvalue;
* S; {+ V9 Y4 L" Y                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
( p/ ?# i+ L* w0 y5 w7 j3 n* Q' h6 Q- Y, `/ M' }4 R) |
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);4 b5 R: o7 ?" ^$ H4 {) b) l
//                IntEventClear(SYS_INT_ECAP2);5 n8 f2 }9 [4 j! X
        }
8 |9 e1 I/ L& p! ?; O        return frequency;5 r) E8 r! n# p3 j: C- O' S
}" P( Z* u# T+ \, O
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。# I4 I7 o9 v" H- |. O  A9 A  p

本帖子中包含更多资源

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

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-4-30 09:21 , Processed in 0.045868 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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