请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
/ Z1 v0 s+ w/ D1 J/*                                                                          */
! n% c3 v% G) J. ~1 E1 P& d/*              宏定义                                                      */1 p  ^9 w& ^3 c1 N7 X
/*                                                                          */
$ L- u/ G( r2 R$ K/****************************************************************************/- H2 X' M5 n3 I0 m; s7 J4 V* C: o3 L
// 软件断点+ N; S- e. N  ?* j
#define SW_BREAKPOINT     asm(" SWBP 0 ");
% L7 G3 g+ M6 ~: z$ I) y+ Y  M7 b* [7 k7 x2 _3 X' M0 W9 {
// 时钟分频! A; N* X% i9 H' _5 N1 a
#define CLOCK_DIV_VAL     228/ n, A3 w7 `- c/ c- a

$ Q: p! }- X9 s/****************************************************************************/
. u) G6 ^2 d9 `, J# u5 A/*                                                                          */
& P6 z0 }* A; j# ^. `1 H/*              全局变量                                                    */9 w0 D$ m! i8 M- s  F# a
/*                                                                          */
( q) O8 \; A, m9 W/****************************************************************************/3 \8 A- n2 c  `6 f$ F8 {
ECAPCONTEXT ECAPResult;
3 v$ i" A$ ]+ B+ F2 Z! {2 h. |
- ?  w- S- |7 S5 I- K& c% @6 }" e/****************************************************************************/
( n" ~. Z( O  o9 I  j. M5 ^2 R/*                                                                          */
6 u- c. m& R* L: q# c/*              函数声明                                                    */' A1 X9 r9 p, r! D$ N
/*                                                                          */
; z. m4 x' p* I: C% [1 ~& U/****************************************************************************/
" s6 j% V7 o+ v8 s; |0 }// 外设使能配置" Y/ o! Z. o# r* a0 @% L
void PSCInit(void);
; J' P$ d/ Z! ]
( w/ ]$ d1 e! }/ _6 m2 I; r// GPIO 管脚复用配置8 p" o+ R: n1 ]1 c2 o
void GPIOBankPinMuxSet();0 D* C( v, J' S
4 k$ {' C4 s1 u- s! x0 [
// 产生波形7 U& T! I' U1 [( i
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);" @: L) w3 p9 J/ R8 d& K
void ChopperWaveform(void);
  z. y" j5 P) l' U* ]; f5 r* I& ^. B6 c' t. f8 r2 E
// ECAP初始化和读函数
' J; s( z) T9 A. o+ Fvoid ECAPInit(void);
- n- f' l& _2 i* Q; h9 x3 Munsigned int ECAPRead(void);. Q1 Y3 _) c+ @- R% E
9 B* `+ G3 q6 o  Y* V  S2 K/ C8 j
//ARM 中断初始化
7 Y+ r% S" o  p0 l6 p6 a! q. |7 \void InterruptInit(void);* [2 N% W' T0 h- E" s) L  Y6 P9 `9 O" G
1 k' D! a8 _+ M$ S  b+ C+ ~# b
// PWM 中断初始化
2 v, e& s  w3 N" W) q4 C0 O$ c/ fvoid PWMInterruptInit(void);
: F$ c4 R* {1 I0 s0 z% Q1 A// 中断服务函数
, d* @* @- q  A# L* t( b. ^// PWM 事件
' i/ r+ t. K; hvoid PWMEventIsr(void);3 F8 O9 f! d# m+ }" k% U& ^
// PWM 错误控制事件0 L% X- m, V$ M: _- |; J( G
void PWMTZIsr(void);
( S* Z; q) `+ k- d6 P7 Y: n! i: D$ E2 N
/****************************************************************************/' c( V- O% x' ?; T; ^+ |' O+ v; G
/*                                                                          */
( p& j# A+ [! n+ w1 A/*              主函数                                                      */- P2 I& i$ r: ~/ N5 I: X0 m
/*                                                                          */9 L; P  T7 B3 w; P  f! `7 |
/****************************************************************************/
2 h: O1 P1 x4 w4 {( mint main(void)
9 `$ n1 {1 k8 @& g5 p% o1 S( I{
" \4 g5 b2 N# |2 e. G# [& o) V        // 外设使能配置
8 {( o' ^4 M& X% w8 A% z) r  b2 \        PSCInit();: N* ]9 C; w( D  z. G5 ]3 z; P

9 L' }$ ]$ `; S        // 初始化串口终端 使用串口2
. M& w4 s9 @4 ?6 p( t        UARTStdioInit();
6 e: t. u1 u, ~1 r6 Y       
. d- a' A- t" t7 v' j7 \  _        // GPIO 管脚复用配置
7 X' g+ x' K6 `5 }" X9 c        GPIOBankPinMuxSet();
% {% k% r+ L. ]% ?+ e6 S; {( l7 ]
        // ARM 中断初始化# f* u- H! I4 X- B8 I* k+ ?  e
        InterruptInit();. w7 O0 z0 @3 i

1 a5 d  {* s! f& L: S6 N3 e0 \$ {        // PWM 中断初始化( W. z$ w1 [. H1 L5 Z; }$ B0 {
        PWMInterruptInit();
  I4 J- _6 T* Y! T% z6 p0 f  P( L  [' t- }0 V% n
        unsigned char i;; m& Z& F3 x/ ?
        unsigned int j;
0 e2 }; U; r6 H* V1 V. ]$ K0 K- l% s% q- A
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
3 e  g! Z8 |0 u5 w! \" I" f& y$ B        UARTPuts("------------------------------------------------------------\r\n", -1);
: E4 k; u; a+ D0 _6 m3 x8 {3 z9 k" ]        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
% \9 y# o( L4 \" F. r9 t        // 产生波形$ @) b" r/ K" _6 s
        PWM1ABasic(25000,50);
: e, e: o6 C/ x6 a" l- @
+ D$ k; o$ z; }$ l$ E        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);) |& [" {/ @+ |# X. v
        UARTPuts("------------------------------------------------------------\r\n", -1);
3 B3 P' t  z+ n( b* {& d
+ q& f/ v5 Q6 P  n' U6 r% k1 y# E2 v& K  B

4 X! m! D1 _3 n/ \. D        UARTPuts("------------------------------------------------------------\r\n", -1);
! r( V( v- S: ?5 J6 _& r, s        UARTPuts("                    C6748 ECAP Test\r\n", -1);4 _7 z* c( S7 Y) I# n1 l6 k
        // ECAP 捕获初始化2 V3 W0 I. v4 l# B: d0 n2 `5 E1 N
        ECAPInit();
. V* ]7 ?% k/ Z: y  ]; b        UARTPuts("Initialize ECAP.......\r\n",-1);( a* m. ?7 ^# r0 B
        for(i=0;i<5;i++)
5 H% z7 K% m  V- z        {3 ^' l& B; D- e' u, X. P
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
( D3 g+ D* X$ O                    ECAPRead();
7 Y. m# w3 U7 F6 d/ n* H        }
4 _) f$ J3 T5 J, m3 ~$ }" P! T        UARTPuts("\r\n",-1);; N' t5 X1 h3 k7 A
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);/ m$ N) C1 I( }4 b! ~2 y0 P% T3 \% `
        UARTPuts("------------------------------------------------------------\r\n", -1);# m4 O- `# @. [

9 x( m+ u1 v: x' Q* O. ~% u3 M+ o# b+ J        // 主循环  c& d* J7 [* V
        for(;;)% E/ F6 ~+ X2 F9 b! J
        {. z8 w# p" S5 {7 M
9 q( P$ K7 e- C  j6 U
        }
$ l! \/ J. K+ z3 Z1 m6 h* i$ O}% r3 T: C! V1 T- ^+ x
9 i; S6 `3 W: Q
/****************************************************************************/, T' i2 ~2 N/ q; J  n* S7 k
/*                                                                          */$ t% L' F( ]2 \" Q0 ?1 D
/*              PSC 初始化                                                  */3 V  R( i, Q% I9 h: u/ c: j* ^
/*                                                                          */
  {! q0 Z" T4 D7 b. P2 B/****************************************************************************/
( e3 h2 `4 q- Q" }* O3 x. v* }void PSCInit(void)* V& S  q6 z( O( k
{
- F2 \5 z  b" J1 `% h        // 使能  EHRPWM 和 ECAP 模块5 T1 r7 `2 x# T5 K- G2 q
        // 对相应外设模块的使能也可以在 BootLoader 中完成- _6 p9 t  f, [8 d4 h
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);! x2 ]$ }7 k  @! @& N
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);; h- T( V% Q- V2 y6 z
}
* h0 l9 ]" Z. S$ J( n+ L
8 p+ [( \1 T9 R) f3 t/****************************************************************************/
/ U3 a: w7 _0 c/*                                                                          */
4 [. o) a/ h! ?/*              GPIO 管脚复用配置                                           */1 I0 L5 }8 S2 o% y
/*                                                                          *// w8 L4 @1 F6 b8 I, R; F# ~. L5 b: |
/****************************************************************************/" v, Q1 o. \) k% V
void GPIOBankPinMuxSet(void)  q" x9 P3 J: p
{) b. s, X1 a* O7 n
        EHRPWM1PinMuxSetup();0 b* n( c5 K9 |3 n
" l/ Z5 }9 n# n2 i
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
  |- a2 P7 V& N6 p        // 作为捕获功能时管脚方向为输入1 d6 U5 U! |3 Z, j2 k: T, q* ~) Q
        // 作为辅助脉宽调制时管脚方向为输出: B$ K) N& a; k! W- v
    // ECAP2 / APWM2
, Z6 `( e6 i1 j) P" g9 c7 k# F( \        ECAPPinMuxSetup(2);3 u3 w" z$ }. j( L& T* ?+ F' D( y
+ k4 Q. B& G4 v: B- A# ]% T
        // ECAP2 / APWM2方向设置为输入
; u9 e' ~6 |$ W: \  Y        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]3 K; W6 |, a/ h9 M- `8 O! u: O$ b
}
/ ?3 E+ b" l1 d4 g$ F
$ @3 V. h; U0 a, j/****************************************************************************/
0 V5 P, `8 D) |) _/ G/*                                                                          */
5 b( r* |0 g7 P  ~4 d' a/*              PWM 输出波形                                                */
" G1 z, i6 p0 o* i) x: W9 z/*                                                                          */
0 G3 X, {5 N& E, _% E8 G/****************************************************************************/) U% v  T5 ^1 P$ @0 W2 x
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
& ^% }2 o; E" K% Z3 {+ Z7 J+ ?. l+ D{
* L1 \4 c% M, m; J    // 时间基准配置
3 \/ t: L6 J$ D# D5 y% s1 }    // 时钟配置# |/ O; x8 n+ x7 }! N  e. k. H
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
$ m$ w# ?- `( j5 F; H2 X; L/ s, d$ @
    // 配置周期' K" [5 [/ U: F# ]4 a3 n) x4 H& Q
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
1 O& u% G- J4 y  \$ ^* l5 @; Q1 C5 V                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);4 w9 V7 j- i. r7 z+ H
5 o" c1 r4 f& q6 h& m% s) x
    // 禁用输入同步信号
. |/ w. u9 d6 ?& U) i    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);2 G" s9 R4 N8 U4 Z* ]% F& x5 T- G

. x7 P) L% \9 p4 v6 h    // 禁用输出同步信号$ X1 M- N* S9 D3 u
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);- I" u2 b; N) _0 Y$ |* U
! `8 q) l' f: S4 N. h, h
    // 仿真(DEBUG)模式行为配置
9 {2 w6 Y" w, {, p6 G: P& L    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
6 }& a$ E3 o  D6 K$ C" h: ~( B9 x
    // 配置计数比较器子模块
$ i5 s. q6 {) R2 Y' U+ j    // 加载比较器 A 值
) e2 {1 u3 r# W3 u! G6 J9 |    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
0 o# |+ T, j4 T0 z$ d                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);% ]1 L" L5 i& b

  _; x+ V+ Q8 J- u1 W, T    // 加载比较器 B 值5 Z, q" V; J' H$ H1 |
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
" @& X- b( g& m( c                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);# p2 w# b5 U6 j1 G4 H# o+ L& u

2 j, x3 z8 y  W; }! U. d6 s, e2 P% z    // 功能限定配置(输出引脚触发方式设定)
' B. V: }" K1 v4 b$ T9 L  J    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
- R  Z9 v9 _- |- k. x: w    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,. \2 n0 S; m3 ]  }
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
) T% N0 m5 \; F$ k3 l9 _1 \. H                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
. c3 r+ H; g6 R  R, P5 E5 j
  s8 b3 K& o: X6 o4 J    // 禁用(旁路,信号直接输出到斩波子模块)死区模块3 y( |  \0 F0 d6 n
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
1 Q  Z$ b+ l) j; V/ ~
; k* c$ ?/ w4 b; Q# a    // 禁用斩波子模块3 e8 Q5 [7 [/ ]7 c: i
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);! x  D& c8 @# w

+ p5 Y8 ^: v; k* X2 n    // 禁用错误控制事件
8 S5 a/ G$ k- u; p$ z    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);# b) {7 q" b0 B6 x& {
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);/ B$ S2 U6 a/ Q' B+ j# r) F/ U! R

2 M1 t" L, D' L1 J; B5 k2 m  R+ b    // 事件触发配置* Q5 J. u* U0 Y7 D1 y
    // 每三次事件发生产生中断/ D. i5 G) A* I2 w' M
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);' O- Q, B2 R! u. K( m5 H
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件5 y: p8 Y5 h6 u4 ]
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
/ N" \9 D6 r; `$ i% o4 m    // 使能中断
& M. ~. O% u, S' L0 P) Q" D    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
4 l, N# {* o6 k3 e+ d, a9 }& j0 \! h8 j( Y* w% d: ]
    // 禁用高精度子模块
9 Z" R. F7 Y9 i; E8 B    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);: h. K! v' G- D5 s( L& Y
  i4 A  B) i/ u/ ~4 b6 J
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);& u5 x& c5 s: u: c; l
}: l! J" H8 ], |  J6 {/ r
9 a# s9 ?$ D( g! x* O) ^0 z6 X
void ChopperWaveform(void)! ^$ w0 y6 c  B
{
: ~, i) x0 U. w* b  t: W    // 50% 占空比
) X+ X/ S6 ~( O2 u* H    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);8 q; k1 N2 n2 ^
    // 4 分频
3 Z; @# u* v: a6 U# c9 X% U( J1 }    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
# Z* K! z3 R4 i, ~  I* r    // 单个脉冲宽度
' ]. u, v0 t' [- g7 M6 h. T; k: a    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);) @1 T- H: V# [' d6 n9 Z
    // 使能斩波子模块3 X" ]6 h6 `* F9 r
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);+ P3 ?! d2 s! F& @( Q- B
}
* ]$ b) L; v/ U3 }6 P
% P; U0 Q/ q0 L$ B5 b; v/****************************************************************************/- H* q9 r# e& c# ]4 f/ Z
/*                                                                          */1 x' n! r0 `* k" k+ {! u2 A
/*              PWM 中断初始化                                              */
) T: G9 P: c, p) j) y8 I/*                                                                          */
- ~, f3 F. ^6 p$ [. j% W7 \/****************************************************************************/& x" T( w# F) W. Y# y
void PWMInterruptInit(void)
1 k$ d" C- J, s{
/ v$ N* V* L+ a4 g: v0 H8 A6 ]        // 注册中断服务函数7 h2 N3 x( [3 l
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);$ W+ I9 ]; S4 r- e: V
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);; O, {) {$ Y$ A6 T9 p
# b9 {6 x4 t; I" N
        // 映射中断
5 E3 g1 P; q6 ^9 T3 y) ~  N3 C        IntChannelSet(SYS_INT_EHRPWM1, 2);& u$ @0 S# u% z" R  D( E3 e
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);3 |" L$ Q$ P' s# s
& a& P2 M+ k4 e( `6 t
        // 使能中断
6 R9 K( _8 B6 T. g$ y( q        IntSystemEnable(SYS_INT_EHRPWM1);, o: ~+ x' i& z
        IntSystemEnable(SYS_INT_EHRPWM1TZ);) |. a# ?" c9 Y, ]; k
}- c; x/ r- }( x1 [4 i: \

8 h. i; i# @8 g/****************************************************************************/
4 W; ^+ x0 I) T! K+ t+ x/*                                                                          */
/ r& K" N$ ^' _: Y/*              ARM 中断初始化                                              */8 j$ t5 }" x. `% e! h/ [
/*                                                                          */
& n+ \& ?; T% I6 m( Z2 m/****************************************************************************/
! E* f* f3 r7 E$ q' c7 w7 tvoid InterruptInit(void)2 Q1 `# S- O- S8 E
{
' O! R/ j, E, V7 K* h        // 初始化 ARM 中断控制器) E/ E* H/ _7 _4 g& v& `& B$ u& X
        IntAINTCInit();
. }; [3 ]$ V3 e, T$ D3 O, f5 h! i. U
        // 使能 IRQ(CPSR)
+ ?# _6 s6 R$ u        IntMasterIRQEnable();
) B7 h7 H- f+ a
% }, B- V- N& M3 Q  N& S7 v        // 使能中断(AINTC GER)" F/ Z. d4 B: S2 ~5 v' E
        IntGlobalEnable();9 ?3 |! \! y0 @4 T

# l5 o8 O* s2 g8 l- o! O        // 使能中断(AINTC HIER)" b% h' }0 q7 m0 J- m1 q: F
        IntIRQEnable();
0 D1 z$ ~+ R0 l: W( a# W}+ s# Y& {' j5 E, B( b
7 s- f% ?+ [4 S8 h7 v
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
6 z2 B# x( w, ]- }3 D, M8 G/*                                                                          */
3 h* Y! F- D, g' K* V$ p. m9 U" T/*              中断服务函数                                                */
9 ]9 d- _3 I" e9 V: g) \/*                                                                          */
$ l4 Z4 h6 r1 H! B6 i$ R8 [/****************************************************************************/
% l; V$ P% Y+ J4 {0 Ivoid PWMEventIsr(void)* i  n( D% v" D' W4 s
{
  h+ _* h8 I& J2 i% S        IntSystemStatusClear(SYS_INT_EHRPWM1);0 y# v2 M5 I9 G, e) q; W

+ @' C- I8 k1 y% v1 G    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);/ u! o! p2 l* d! A
}; ^* K! F6 v$ r! s9 B
5 {5 z6 w, s( E( |5 L% R& R1 q$ K
void PWMTZIsr(void)9 l" k9 w+ h8 C, g! q
{% _5 Z3 o6 G% o
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
+ p* {( ^, |1 F8 b" A3 ~3 ?: R9 ]2 R$ a, S4 C8 o; c# m9 y
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);7 c9 @6 z4 |! F  L6 k( E
}/ s5 B# E3 G* m0 e8 j

6 K# r1 B1 S; z5 M; E4 \( L/****************************************************************************/: }9 f, j* G& B, |, P9 @; b% N
/*                                                                          */
& b$ f4 ]& U# x" _4 T/*              初始化捕获模块                                              */* _# @% D& B+ h- ?0 y3 Y3 u! w, b
/*                                                                          */
8 A2 j& d) ]. y5 C; u, z: r; N7 ?/****************************************************************************/
- m# I6 d& A1 S5 x( l7 W4 w* Qvoid ECAPInit(void)
- u1 |# ]% L0 \0 J, X{8 h) i, P1 P9 T
        /*-----设置 ECCTL1-----*/" X6 W" E- T2 j! H
        // 使能CAP寄存器装载( R8 @  F; P; o( h' P
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
. O' f/ |8 |9 p+ r' u( @: p        // 设置预分频值.9 W' F5 r9 c+ Q  P
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);. H$ d; g1 u3 e. @6 U: o
        // 上升沿触发捕获事件8 ^2 m$ l* z9 H+ U5 k9 o+ I
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
- R! O" v7 k7 `) ]9 {' z. v% J4 B        // 输入捕获后重新装载计数器值.
$ Y' K) z' ~* v- O$ Q" H        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
8 _, ~' R+ T- ~, X6 ~7 R1 v$ k! D$ ?1 [/ v7 n9 z8 q- E: R' j
        /*-----设置 ECCTL2-----*/8 A2 H9 K  h' R! g/ @/ l
        // 连续模式
# E: m: T3 H" |        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
% U! |6 c. e7 b$ P5 u" x$ c& Z        // ECAP计数器TSCTR持续计数
$ B8 s1 R) K' |% y' @/ }        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
7 m9 _, Y. O! ]* N2 h3 G8 [9 N        // 禁用同步输出和同步输入
* _+ D" @1 v7 o% N4 f) a1 L        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);1 P# q; S1 e( L* C7 u: d' N& p" X
        // 配置 ECAP 2 为 CAPTURE 模式9 k! N% [% e9 C9 B. K. u
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);: n  Z7 }# _4 i2 ^' R3 Y4 n% h# Z
. |1 F6 G: y/ W  p0 _( v, @+ N
        // 使能中断
" U$ c; _1 v" L# d5 @//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
3 f8 ^6 O( r; J) J7 d/ e4 g}
% S) ?9 j+ R$ |2 C. H$ U4 E& a+ y2 }7 p; ]
/****************************************************************************/6 [; g" A! ]3 n& M6 `
/*                                                                          */
4 g9 i) ^, t3 c( F) r/*              取得捕获结果                                                */! T; u) D$ Q* N7 X8 @% ~
/*                                                                          */
7 h6 g# R5 C- g  N/****************************************************************************/
+ T% Q4 q3 [! [  Runsigned int ECAPRead(void)
; C: a- R3 z4 W) d. I  k, f, S{
) _) q  }6 J" }0 o4 C' ^8 @        unsigned int capvalue;9 N- [) V0 F3 z4 M% f7 {
        unsigned long frequency;
1 z( L/ p2 q' x* m5 c- p# w
5 r* [* J1 b* @' w3 d. ]+ y. S        // Event1 中断标志6 g/ ^) [/ ?+ K# Z
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
2 k( ?" w2 y4 q) n1 k, O6 O        {/ x, [' C+ V! N! o
                // 取得捕获计数
+ m1 |" @% i3 n5 w+ [% e                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
- D9 P1 ^" R7 [3 h, k                capvalue = ECAPResult.cap1;) o: _3 N4 P3 ~0 H
( T1 H/ c' r. |( Q# Q% O' \
                // CAPTRUE 模块 228M 时钟主频
& k1 S/ Z5 J" F                frequency  =  228000000/capvalue;
7 g6 G% X; A6 Z$ x) u8 t                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);7 T; i: a8 \$ q2 Z7 q9 R7 u- O
# v5 V: ^) `5 V& `( l0 o3 K
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);2 @% }2 q  r$ r  k5 f
//                IntEventClear(SYS_INT_ECAP2);- B) m6 D; V# E6 I" j! ^3 W
        }% g" g/ n' q2 D' ]8 z. e
        return frequency;; E  N. [! l, o
}
7 {5 u  g4 ~, m9 o8 R; Y9 D
回复 支持 反对

使用道具 举报

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/ g, A( V& {6 \& k

本帖子中包含更多资源

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

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, 2026-3-24 00:56 , Processed in 0.067740 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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