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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/. F7 b- P0 ~3 I- l4 C
/*                                                                          */& y2 n0 E$ F$ L0 s
/*              宏定义                                                      */
* D  ^, f! }/ G/*                                                                          */
& ~( n+ @' ?: E- [* k3 _/****************************************************************************/: f% X, S% l7 l, [( P
// 软件断点
: W! T. e% ~2 Y5 _0 Y% L7 Y#define SW_BREAKPOINT     asm(" SWBP 0 ");6 L8 G- b1 x0 z) J0 A  i4 R
/ X+ q1 `8 {1 C  n7 }0 A
// 时钟分频' w. Z+ y; a' W* s, \9 x
#define CLOCK_DIV_VAL     228! \' A5 o7 b, M$ B  G6 Q' i
  g# s, M7 t; h0 ^" a
/****************************************************************************/7 b( {2 O# S! F! @
/*                                                                          */1 X# {' P+ `' E% y6 G& T- N$ b. B
/*              全局变量                                                    */) N- E( t+ Z9 Y3 z0 ], @' l  y- I% P
/*                                                                          */
& T% u3 z1 O, j4 e/****************************************************************************/
3 N! a% ?4 c7 a2 ?$ q0 s7 nECAPCONTEXT ECAPResult;
" q+ p* F: S& J" @) @9 M4 O; |) A* ]6 O/ K+ Z
/****************************************************************************/
. p8 {. e+ ~: i" |. U4 b7 {6 a( h/*                                                                          */1 v1 s' m- ^9 B' |! m
/*              函数声明                                                    */
- x3 q: J  G% ^( ]' Z/*                                                                          */* m. P! ~8 _$ D2 l: D6 f- g* u/ u
/****************************************************************************/' u4 f# @+ C# p0 I
// 外设使能配置
0 l/ j0 c( ]7 avoid PSCInit(void);% j4 h5 i) O$ p1 u
+ `6 y) U7 u# U
// GPIO 管脚复用配置4 a6 Y9 l0 f. o$ @; h6 K" Q
void GPIOBankPinMuxSet();( E2 c! t! Z: {6 w" _0 L

6 {7 {; \8 ^0 y5 N" z// 产生波形
( h) ^3 R, L% K# f, x3 C% rvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
6 f. o* u3 m; m& d) g; ]' Lvoid ChopperWaveform(void);" B4 D! t% j' y. |8 J+ i
1 u. y( R5 Q' f; F
// ECAP初始化和读函数
' _# V5 A  N8 j1 ?2 M- W# Kvoid ECAPInit(void);
; g" }) N% k" N+ t% Z& Xunsigned int ECAPRead(void);* b4 \0 k. b: z! l3 `7 s

' K; ^4 S$ k2 [' X3 S. I; M2 @//ARM 中断初始化
* X2 M6 h; l; \% D$ }void InterruptInit(void);5 p5 H0 D7 f! A

+ T/ d: P( n. \" A  ]0 z8 S// PWM 中断初始化
  U# Z  C# _' y+ s. lvoid PWMInterruptInit(void);
3 _: M% W) d) Z4 F6 B9 L1 R// 中断服务函数3 K. E9 b' c5 |0 Y6 l6 n4 v. b: [
// PWM 事件
$ ?4 @7 m7 ~( ]4 H/ r/ M$ E5 x& Bvoid PWMEventIsr(void);( \0 G8 F5 j5 H* a
// PWM 错误控制事件, f. l9 p* F9 H) j! c' J. f
void PWMTZIsr(void);
; u0 K, f. D$ @8 x1 @. j; G2 F7 n! J
/****************************************************************************/
8 |2 f$ D$ Q% A1 z) S4 Q' D/*                                                                          */
2 ?+ L. y( Q  p* P( Y/*              主函数                                                      */# m0 i( h: R- Y) e
/*                                                                          */5 X" U3 ~) F4 n) y' K4 X
/****************************************************************************/
/ U1 w% T8 ]# T/ @+ vint main(void)& H# c! G0 `" J$ q
{$ s9 w2 {/ Q" {# j* t3 x+ Q
        // 外设使能配置3 m" C. _# A6 {0 Y+ M" @% X
        PSCInit();
5 a, O9 f' e- V+ P/ ]; L$ j, A0 I' `  d8 L4 C, B* k1 _6 z
        // 初始化串口终端 使用串口2
6 T) U, N$ ^8 ~( j1 @$ U; g        UARTStdioInit();
* G( F( u) D. T! N9 p# r        * M1 J' g8 B( g% x1 a; T9 O0 g
        // GPIO 管脚复用配置$ y' N: c0 M9 Q* A+ z: ]' O: V# ^  W
        GPIOBankPinMuxSet();# }9 Y4 T7 X7 Q- w
: h% Q. n% `; C8 H; @  r. q: S  G
        // ARM 中断初始化
3 D8 f" Z3 @# N        InterruptInit();
) k# x& F8 d$ k% }% L$ Z) G" C4 c  D, A6 ^  Y& h$ B$ v2 P
        // PWM 中断初始化/ X+ x- W, p3 J$ A8 }1 G! x- ^
        PWMInterruptInit();
4 B7 Y; W5 W3 p" W" O
2 O- j7 M3 l  t0 ^3 g        unsigned char i;
$ ^7 E+ ~" H% H- [0 @+ H        unsigned int j;
( X% Y' T% a* w2 D- q: V1 D$ p3 G+ N- D6 p! @2 n
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);! N' Q9 m( @4 w% L
        UARTPuts("------------------------------------------------------------\r\n", -1);. ~9 O3 P' A2 q4 ~7 z
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
! w% {" `! \% H- ~3 H+ A        // 产生波形+ a/ v& E# ]' V8 c
        PWM1ABasic(25000,50);
; W  R; A. b& P- S, R, D. |2 _9 x3 r7 ?% E  p; X
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
( P9 S! d# c( Z1 C) [" Q6 ^        UARTPuts("------------------------------------------------------------\r\n", -1);
0 |" D, ^  O  G. A" A" i/ j/ i2 n
) c- B* q; I! _- p$ |# y
8 e2 V6 v. A+ x- @( q# `8 @5 X/ F, r; e. {; N) [2 q9 f2 @" [7 n" g
        UARTPuts("------------------------------------------------------------\r\n", -1);
! L6 g$ c3 j4 @- E+ b0 z) J        UARTPuts("                    C6748 ECAP Test\r\n", -1);! W6 \4 K6 Z: o8 J& D0 ~
        // ECAP 捕获初始化9 O% z) ~) c7 ^! ]
        ECAPInit();
+ I( A( T. w' ^! X$ n        UARTPuts("Initialize ECAP.......\r\n",-1);
7 M5 h8 M% C* B3 v& B6 k        for(i=0;i<5;i++)
; d/ c3 P2 o# A1 r( z. A        {" |; _4 I' E4 L3 [! H( ^
                    for(j=0x00FFFFFF;j>0;j--);            // 延时- z( y( _6 c$ Q
                    ECAPRead();
" r7 ^+ g- h' Z5 W: E' z        }
& _8 s" G! @1 d# r1 M        UARTPuts("\r\n",-1);
0 E% p3 h, A' |! s! r, l        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
/ R' J9 H, c2 w4 d/ s2 c6 c        UARTPuts("------------------------------------------------------------\r\n", -1);* Z' Z$ B) g) v' S1 h8 R/ t" L

. k, ~3 ^& P$ |) f( g5 ?- r        // 主循环) {; w8 n0 S# M' J' l/ d
        for(;;)5 P: Q: ^" g; K. Z
        {
: a/ \& p8 N: C. M: m8 t! I' T% Y' @1 H: S
        }
, q$ ~  ~8 q; O. v! S2 d/ V9 N}
3 t5 S( n+ h% `. Z; Q& y) l% i4 R6 r+ S  w: _, I; W* V
/****************************************************************************/
, d- ]" y- z3 V/*                                                                          */
( l9 h% R. Y# H) I& r3 K7 a/*              PSC 初始化                                                  */( `: f# u1 i2 R2 y3 E+ O( y4 s
/*                                                                          */$ @! D+ g" a! V2 c
/****************************************************************************/
! V4 k" N( }: ]' Y# X5 \2 W2 tvoid PSCInit(void)! e; n% A0 K: }  m/ T# J
{- @$ W) x# C& g2 M9 X' H$ U6 a
        // 使能  EHRPWM 和 ECAP 模块
- F: n* {2 X' M+ o+ n" A7 M        // 对相应外设模块的使能也可以在 BootLoader 中完成
0 Q; S5 M5 T3 S0 {    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);( G& b; Y6 B. Y7 e7 ~( ~
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);! T3 H$ y1 i: B% H! |6 X
}# u2 X. G1 s( R: a

' [  D0 k: w5 x. ?/****************************************************************************/
( |" J1 S* ?3 \) t  f0 D/*                                                                          */
3 c) u( {  X5 d; E4 ?& H$ P' G/*              GPIO 管脚复用配置                                           */
3 `, E0 O( ~1 H8 k1 R$ J) U/*                                                                          */* o7 L* b3 s7 R2 _) @
/****************************************************************************/3 o7 U! s" i( D1 A( A; u) Y
void GPIOBankPinMuxSet(void)
$ \0 Y; u) z9 s: j1 ^. y! d{
- y3 [& u0 s  B1 S/ _        EHRPWM1PinMuxSetup();* K1 M% j7 \% A# g$ G! Y

7 k+ t% i4 ^$ X6 A- [$ J        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
; k! ]" r9 ~1 M/ i" e. V- E        // 作为捕获功能时管脚方向为输入4 c* h' d! k& s* D
        // 作为辅助脉宽调制时管脚方向为输出2 c% v: _2 b2 |7 I9 [
    // ECAP2 / APWM2
" n* Z8 H$ C$ ~  i( n        ECAPPinMuxSetup(2);8 W8 [& {) H, J. e, F

2 Z: G* J/ B! i6 j        // ECAP2 / APWM2方向设置为输入7 x/ @. g4 N9 K% P% G
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]2 U3 H# h, ^6 S7 z
}
3 [  p. U$ D2 |8 p8 h) j/ q6 c/ I& T  j4 s2 D' i% r; r
/****************************************************************************/2 @; J, d! J2 A# x2 _  Z7 W
/*                                                                          */) f! }/ _! g) J0 |
/*              PWM 输出波形                                                */- Y7 b! ~6 D0 s% s# f
/*                                                                          */) K7 R, S- g+ M8 n7 v
/****************************************************************************/
& d6 d; x7 y4 }. Dvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)# e- f- C- {3 i! H# x1 U1 E
{
7 p& r$ g. }% N4 q$ r$ T& H    // 时间基准配置* q$ D, q) W7 E$ }! S% @
    // 时钟配置2 J7 D, J/ k) \
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);# _5 @4 G2 ^4 ~

% z. _: u- Y/ P6 R5 R& l+ ^    // 配置周期. F& Z3 E0 w" [' \. B' o6 O9 ]
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
. a- w$ |9 N$ j; B: f# j, [# D                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);8 Q& ]# \( W% F* G+ V/ [7 P

  }" [$ n" S8 I, ]6 A" S3 n) L1 x$ U) n    // 禁用输入同步信号: m, I0 C) p. c9 a  w
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);' P  G- j  u" i8 n9 r
" o: O& b" `8 v: v7 d
    // 禁用输出同步信号" b2 o/ R( m- w" m: M9 P) F8 I
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);+ ^2 F9 Q8 M5 G8 O1 w
' p: k/ M3 E7 E8 S1 l
    // 仿真(DEBUG)模式行为配置
# m9 Z! `% q# k/ k/ `    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
! l1 o5 b- v1 X5 z; e# i$ Z2 n1 ]5 t* h' f) X
    // 配置计数比较器子模块
5 _" z" v1 a& w    // 加载比较器 A 值/ c) L& j7 }( ^: Y
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
) ]6 H5 ]9 |, O$ P6 T# v                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
5 R+ }6 L9 U. E; e+ B& [' O
' M6 \: X; s8 g. t- U    // 加载比较器 B 值3 |8 P. I+ h7 w; V/ X9 p
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,/ }9 T5 k- R# Y$ p* G
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
4 u" c5 X  x) D$ v! ]. g/ ^
4 g7 G+ e" I' d7 \+ ^4 U    // 功能限定配置(输出引脚触发方式设定)
0 p% R$ `/ E- i    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出) V) }- m/ j$ }" ~% V- P9 w
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,/ F0 `7 p. a, u6 c
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,( S2 ?- L/ M3 e# c9 \  {
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
0 q- p  _4 H! o) R5 _$ s( T* W* T7 J0 w' [( q2 d$ W+ n$ w3 ~
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块8 `1 S- M0 t% t* u' n
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
' u# J% c5 W3 ?& j9 t( ^1 K" d
' c: E0 W9 O9 m1 s% K7 l& E    // 禁用斩波子模块% [0 {* T( V# r' I
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);8 X$ V$ |! x9 W: n  `
& t6 v: }  S+ S& O, l' _
    // 禁用错误控制事件
5 G) j' R0 T) Q    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);3 P; X- K7 ]# T0 I* W; V5 J
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
/ q9 g" U3 b' K+ L/ {5 {; l  I
    // 事件触发配置+ w5 O4 {( h- D7 s- y
    // 每三次事件发生产生中断
2 f2 ^8 s- q6 H9 d4 V9 j    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
; w1 }) ?* T- h4 A( J" ~6 p9 f    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
; d0 Y( v& z5 a6 [+ s+ F    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
) M& x  g: e) V  p% {' A$ f    // 使能中断
: v! b0 ?' C# E    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);/ h4 Q( T. Z! G" k9 @

- T/ ^( m2 v- q( g# @; M  \( Y    // 禁用高精度子模块
2 X# z" K9 p: ^: M. _    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);3 p, {8 g& p4 Y/ P

2 z) C9 i' B4 q    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
2 o  h" k' z& Y8 Y. N# G4 @3 K4 r}
0 ~, @2 I/ N( c) _
- h) ]9 V$ P; T2 L* hvoid ChopperWaveform(void)
2 x9 x* U9 P& L{
. R, G* ?% ]$ n9 ~    // 50% 占空比: c9 g2 D8 e8 O' Y5 E; p
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
; W' `6 T: u8 d# O6 i6 K7 |    // 4 分频+ M# V# u5 m+ W3 p' P# _
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
& K  [1 O# W6 c8 o; K6 I$ y- o    // 单个脉冲宽度& i) n4 i- L4 Y+ j9 M  S
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
$ w+ W4 w/ d. W    // 使能斩波子模块$ \: V9 m- w. ~
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);) P: m4 ]+ y& T) F) O
}- R3 [7 A) y) h& o
. C7 w3 [3 l/ F0 u, _" k
/****************************************************************************/) K! D& ^& ?* G' C; m1 v0 J1 j, E  u4 U5 N; F
/*                                                                          */
" `( c+ `1 ]' n3 z$ h/*              PWM 中断初始化                                              */% k' E  Z! w8 L5 K5 _
/*                                                                          */! T0 \" }+ {8 h7 ~% |& H
/****************************************************************************/- K% B: a- r) K. ]4 e  ~
void PWMInterruptInit(void)8 P8 z0 h% V( ]  [" w1 F0 Z
{2 ~- s8 B' A; `0 J4 I
        // 注册中断服务函数
: w2 Q; R. ?4 i8 K; S6 r2 p' U* q        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
3 P; v/ O6 v2 Y% ?8 z: G* S        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
- ^% ^4 i  I& z6 h
0 v0 U4 s! u4 a- v' f: Y0 L4 M8 b        // 映射中断1 Y3 _: n' J7 z
        IntChannelSet(SYS_INT_EHRPWM1, 2);
& I/ Y8 }7 J* ]7 }        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);6 A; m# i4 q, p& h3 r
/ x1 _4 J5 R& x: K& d/ |
        // 使能中断
; o# ~1 h" J! m        IntSystemEnable(SYS_INT_EHRPWM1);
  z# }+ `* j) @3 M$ E6 J        IntSystemEnable(SYS_INT_EHRPWM1TZ);
  }2 E% L: T8 Y}, Y: L& g$ [$ B% e* H

+ R$ H1 f: N. q) K. g/ [; P/****************************************************************************/7 J$ \+ v. @& a9 k+ m' Y% {3 U
/*                                                                          */
% R* i4 M5 d1 G% @! \/*              ARM 中断初始化                                              */1 J: e2 v2 q/ ?: _
/*                                                                          */
) y" h3 d7 `8 m; {8 O/****************************************************************************/
( s7 s) ^3 @9 F9 H3 ~/ Z5 K- mvoid InterruptInit(void)
& P# u7 V4 z0 m4 t2 h6 T0 n& T. K{
2 s6 G: g+ W1 G5 T3 o        // 初始化 ARM 中断控制器
2 v, F8 }) q7 @% U, u! H        IntAINTCInit();
: z$ p. F; c1 ~) e9 a
! y+ \, m! V% R. ?        // 使能 IRQ(CPSR)0 Q+ h2 G  D8 u* A' ^! C; I) K0 C
        IntMasterIRQEnable();
+ |* o8 w0 b7 B  H. l; A. g1 o) i0 ]& ?+ s: w/ X+ p
        // 使能中断(AINTC GER)
! \6 E* R3 \4 g4 n5 [' r        IntGlobalEnable();& y2 i# ^6 d/ @6 ^8 Z
) ]0 g. g; p8 R0 J
        // 使能中断(AINTC HIER)
0 f+ m$ g( G( v- \6 C        IntIRQEnable();3 q- `. ]) Y/ p/ }) n* m9 B
}& b7 B  Y$ z* ?' ~: I! j0 x" w

: V  v1 [3 @) Z
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/# B* G& w) m# l
/*                                                                          */! `$ i% B8 _: H4 v, L$ P5 ]' B% {
/*              中断服务函数                                                */
  O3 t6 S; R; t; @  q1 u/*                                                                          */
  |& F) {; Y; S/ r/ x/****************************************************************************/
: C% k  f2 T$ _, B6 ]void PWMEventIsr(void): D( X, R8 Q& J6 [+ g
{
& |0 L5 c( S: Q        IntSystemStatusClear(SYS_INT_EHRPWM1);
) L& b6 K, x% _6 U& `/ m5 B5 O. K/ U
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);$ P1 ^+ F/ r% I! S
}3 V, o' x3 P% m. X: p) E' P- ?

% X6 \6 i$ H/ `void PWMTZIsr(void)$ P+ C! B  B9 h8 k' @- H
{
8 e+ w9 N- G3 G/ q        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);6 Z5 _1 v2 O$ O  S, i
4 _) \, Y. z/ z; y  \. N- U
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
- O' v5 f8 q8 C! P. s) S4 z$ |}
/ n/ Z3 m- B: O' u% S% W
2 E1 X  o) ]1 p$ ~$ @8 D% {9 Z/****************************************************************************/; T1 d+ f) ^; {: t4 H
/*                                                                          */% q0 x5 D7 }! ~. Q' D9 G
/*              初始化捕获模块                                              */
3 W* M  l! S+ v- S( a2 R5 _5 j/*                                                                          */7 k9 `8 T1 i3 A* y' Z6 u9 K
/****************************************************************************/
3 b1 W2 Y3 |2 M* h8 I* W8 Fvoid ECAPInit(void)
* {2 u5 h' U8 P. Q" L{4 t: E* X  @. O  D
        /*-----设置 ECCTL1-----*/( H' g3 \) U# q& M
        // 使能CAP寄存器装载
+ F9 k: t; p& [# R- z3 \        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);8 j% i) F# Q" t1 E* f8 w4 R
        // 设置预分频值.
+ K, @, X: Z! J/ l8 C        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
  y, y: a/ _2 ^( O        // 上升沿触发捕获事件
  X! t: S& {' M5 v- G6 k0 q        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
  Y5 n2 z4 q+ |5 `2 Z( B        // 输入捕获后重新装载计数器值.5 a1 w, W' m+ Y, w7 k
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);) e( H0 {/ ?( M- Q8 u

1 z; W* m$ r; w% q' j        /*-----设置 ECCTL2-----*/
# i- ?" \' v# }: n. F2 N        // 连续模式3 {( l7 L8 K+ [- T
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
5 s( U- b/ `' |9 k% _% x        // ECAP计数器TSCTR持续计数
3 _8 [1 ?) v  n( e        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);7 f6 U* ]2 M8 ]
        // 禁用同步输出和同步输入
4 v" R# O' [- T' ]) X% X        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);  N2 m3 b) g# _- I
        // 配置 ECAP 2 为 CAPTURE 模式
, i$ z# L* ~# y5 j! K: L( }        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);: {: u1 b0 S$ q; y' Y8 B, l
9 S% k$ D1 X7 W# F8 s1 R+ B
        // 使能中断, C) L5 ]- }! p; V# h: `
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);4 W! Y. N- ~( U: \; s" P) U
}
% s5 ?& M  `) n$ o; f/ ]4 [8 Y% o5 n- D* F1 B
/****************************************************************************/! S# _9 {4 p! D3 q3 u6 k
/*                                                                          */* h- p9 u6 p9 z, Z+ ~5 h3 p
/*              取得捕获结果                                                */
9 V+ G  E% b. ~4 W* K" \/*                                                                          */
8 r  I2 `9 K2 M. @5 C3 |/****************************************************************************/
3 L' W5 g+ E' s$ Runsigned int ECAPRead(void)
. e/ [9 R$ K" P4 m8 v; q{
) B  @1 E9 ]1 s0 Q/ e3 t/ C2 n  m* d* y        unsigned int capvalue;
" }5 M" S) t* P4 z1 c, u, y1 Y        unsigned long frequency;
) ^( ^; {6 i; e0 ]8 g
" D9 ~2 ^: Y; O- A  \9 J        // Event1 中断标志
2 R  i& L( m0 H$ p        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))6 O2 K$ i( ?9 r5 o) E! t+ |  Q7 K
        {/ W% c& ?, l6 B+ d9 ]
                // 取得捕获计数9 B' \% c! z9 n( h. j2 G( |
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);0 ~/ m: K! q9 e+ A" X9 H3 C
                capvalue = ECAPResult.cap1;, |& b5 h& V5 Z8 U

. Y- C5 s  b  \                // CAPTRUE 模块 228M 时钟主频# e8 \: `+ e: u+ j5 E2 n- Q
                frequency  =  228000000/capvalue;/ X+ p1 E  T9 S1 L! S- F# F
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);( O5 I+ W! L, n1 c3 ^4 s" S

# ^( n& C2 t. N+ \% m                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);$ t! h: c& d2 i5 T" K# X2 W! o
//                IntEventClear(SYS_INT_ECAP2);
9 V8 G4 m# s) ~! j1 i  {9 a& o1 Z        }/ s! B  \: H1 p
        return frequency;
' y5 I" \/ m" K' u; @}
( g1 m' c: p- ~7 d; r
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
- C) N% E2 P  d

本帖子中包含更多资源

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

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-12-15 05:47 , Processed in 0.045545 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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