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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
& G3 I  ^# m/ a7 A/*                                                                          */
7 d4 x: J, D  {+ f  N/*              宏定义                                                      */
. p- N  {; V. v# f/ Q; w' O/*                                                                          */! B8 y1 N9 q) o- b7 O$ [
/****************************************************************************/' ^6 O" I6 F3 N  @6 p3 f
// 软件断点5 v0 @& i/ O% r" ?3 d/ L
#define SW_BREAKPOINT     asm(" SWBP 0 ");: K# Y- C( D3 a6 T' [! ~

- x6 ^+ w+ c! X; s- H  S* E% |// 时钟分频/ e- a. |- z# K5 s) @
#define CLOCK_DIV_VAL     228
+ t+ T0 H6 p) t$ K: H# E5 J+ f7 e4 H# ^2 S* [8 h" ]
/****************************************************************************/
) v" r! O; e, ]* q/*                                                                          */
8 S& u4 E; X' j8 H5 P. V/*              全局变量                                                    */- ]- S! x1 L& f, w
/*                                                                          */
8 b9 ^. V4 J9 I) m/****************************************************************************/8 d5 g. b2 ~* t
ECAPCONTEXT ECAPResult;
! [, z) D3 `8 S4 j% j% z: t' r* @- |
! a  l. U- w' J, y' Q/****************************************************************************/
! Z! y) U( n- j! ]- s' E/*                                                                          */
# O( m; F* |; O3 x" s3 X' k/*              函数声明                                                    */
& L& P8 J7 y9 c% H0 N: J$ K/*                                                                          */
4 [, F) I" B8 K8 Y6 A' E/****************************************************************************/
! g# d8 ~& e  i( L// 外设使能配置- K4 B: W$ G5 e$ `1 o$ M
void PSCInit(void);1 _  Q/ t( k0 @8 ^' o4 s! a" ]0 B4 [

0 ?( Y' T- D1 p: H" [6 k1 c// GPIO 管脚复用配置, u: E& E- {  ^8 v/ G$ P1 H
void GPIOBankPinMuxSet();
; r! y2 e+ R3 a& ~8 r+ l# q1 p. n* d. d; O$ R% u
// 产生波形* E7 M" ]5 n8 m( r2 o/ O/ l( m# v+ P
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
7 c. P% k- T9 P% [# j* n3 mvoid ChopperWaveform(void);
( A' r9 P+ M9 ~6 e2 @" E! x* X% t1 @' `/ y' k
// ECAP初始化和读函数
) o9 O6 J6 ~; I/ X8 h1 Tvoid ECAPInit(void);
! I5 o) E$ f6 c9 G8 I9 Kunsigned int ECAPRead(void);
: C6 I9 y8 a. y# f8 k% P5 q1 N. s' h, ?: N
//ARM 中断初始化; Q3 Z; S1 c6 O* R, q0 n3 s1 i& w
void InterruptInit(void);
8 x4 q  E1 U8 J* _7 m8 [
% y2 D( e1 W4 l. k// PWM 中断初始化
$ y: R" j+ _' R% l7 ^void PWMInterruptInit(void);
  @/ e- G0 o. N& Q: W5 r6 G// 中断服务函数7 p, b( ^) G. [( Z) G  x
// PWM 事件
+ T: X: f' o  Q* Y+ D( i0 [void PWMEventIsr(void);
$ i- |6 B9 u+ Q// PWM 错误控制事件
! W& U* M' }/ k# g1 U+ x8 tvoid PWMTZIsr(void);
  ^: b8 M+ g; e, R( Q$ Z* Z
& m: b9 n' u+ g) @- H1 I" Q/****************************************************************************/) Y! W' Q- q+ I* ?
/*                                                                          */! d0 m1 Y7 D1 h+ ^' C
/*              主函数                                                      */5 F+ x$ ?1 ]6 f0 C/ v6 K
/*                                                                          */
  v9 I- P- m4 R: a$ L/****************************************************************************/
4 \& B4 @+ l$ I. S# C4 @3 zint main(void)
. Y2 Q/ f* Y1 W" ~4 V{
4 v3 ^2 A. v3 Y9 I2 }& _        // 外设使能配置! O3 V$ I( r6 S2 O- i: q& {9 X$ h+ l+ R
        PSCInit();8 N, G+ E2 L/ ~/ i

9 Z( Y% X) W! d* q% p  b9 x% Q        // 初始化串口终端 使用串口2/ h6 `" A1 O# L: [* |$ e
        UARTStdioInit();% w, e8 ^+ e- w" f  t  B  V3 F
        : v% X" @3 V6 O8 P
        // GPIO 管脚复用配置
9 |1 }' _) _5 {% i- L        GPIOBankPinMuxSet();
8 W. S. V+ [. l7 L. r2 ]# }, G' I( ~$ ?( r8 M! q, G
        // ARM 中断初始化
% f+ v; U' N: z7 e# F2 X  E        InterruptInit();% C* {) E- i) q+ N$ X

' B& {+ }5 g7 v1 D+ t        // PWM 中断初始化$ ?: t: D0 m1 J& n+ M6 \
        PWMInterruptInit();3 m/ f2 w; e6 `3 `& R  g. ]
* E- g8 q5 w& n& W) f7 ?1 N; b
        unsigned char i;" U" r  p/ R+ s
        unsigned int j;0 j6 F4 v9 v# z  g% e1 q4 v
5 L$ b; l# r0 Z5 j+ E6 }( }
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
. s+ u6 L: W7 s" `5 o1 U        UARTPuts("------------------------------------------------------------\r\n", -1);
+ S, k- [7 K' m  H1 W# L) r2 B        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);% O$ u8 D# S3 a
        // 产生波形6 n) Z$ `% c, O: a& x
        PWM1ABasic(25000,50);9 a5 z/ r& M4 x/ m
6 _% r- s2 z6 M' D" k4 X
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
9 W7 s: J; V* f7 ~# _* T        UARTPuts("------------------------------------------------------------\r\n", -1);
9 R/ U8 Z# O6 ^! \6 Z- j  Y& |; E% x/ n
6 q7 @$ n" c) T
# B1 L, j8 S5 p$ P
        UARTPuts("------------------------------------------------------------\r\n", -1);
4 C. j9 {5 b) H- n        UARTPuts("                    C6748 ECAP Test\r\n", -1);- G' {: J& b/ \5 M
        // ECAP 捕获初始化2 E$ j7 k) U1 I% _( m
        ECAPInit();
' V' g+ _2 k/ r( \( N        UARTPuts("Initialize ECAP.......\r\n",-1);
2 |9 j9 A; W9 o6 Z4 s1 M        for(i=0;i<5;i++)
2 I; I4 s3 V' B        {
8 t" D( u  ?  U                    for(j=0x00FFFFFF;j>0;j--);            // 延时
& w+ ~5 o) y# b* M! F; p                    ECAPRead();$ b0 j1 q9 @5 W8 e! D$ ~& [
        }4 S& Q$ k, }1 J! w4 u
        UARTPuts("\r\n",-1);% ?. D% [+ ?9 s/ N
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);; F. u& F2 X) ]; t6 y) j: N. @% z# Q
        UARTPuts("------------------------------------------------------------\r\n", -1);- U" T5 Q) P! e+ {+ {  o3 A9 |

- b$ J( H. R  m        // 主循环' k! k7 Z  l8 T5 y
        for(;;)
$ {0 s1 T$ q! Z! c+ C! m        {2 Q4 `: `, p( o/ f3 _
% b; N8 C2 u: A7 v
        }/ c& n. Y9 L. f/ l6 J0 F% ]4 [7 M
}3 ]' x/ X+ n5 H: B, g' g- Z

% J; s+ h8 @) ?; o* t& o$ L/****************************************************************************/
8 V' c7 t2 Z' z/*                                                                          */
" c. v1 c8 R$ o! W/*              PSC 初始化                                                  */
4 l* u$ Q, ]. ^. j. R6 r# I/*                                                                          */
6 W; L9 N7 N, E9 |8 P0 Q/ x/****************************************************************************/2 V$ \" C5 }4 c- L4 S* E
void PSCInit(void)6 H# Z" {7 h  P& H1 r
{
4 \* R6 u$ V+ N% {, C  V        // 使能  EHRPWM 和 ECAP 模块
3 Y1 H# k3 ]( [& m* o) V        // 对相应外设模块的使能也可以在 BootLoader 中完成
! m5 U* l/ a' T0 j    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);3 p0 }! g5 Q" A
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);* E9 y- s7 f( C1 I& w& R) D
}
4 |! E" l  @2 h! J# O+ @7 L: c" W6 K% n/ h" c- k- Y0 A
/****************************************************************************/& M& X1 [# M6 H( k
/*                                                                          */( P; j% J8 a  K3 {
/*              GPIO 管脚复用配置                                           */
& K: R+ |, B4 F# x+ g  Q/ Y/*                                                                          */
* G, `$ b9 a4 o3 A8 A" O/****************************************************************************/
; D4 u  N3 I' L* q- X8 ~  T" Gvoid GPIOBankPinMuxSet(void)
2 v+ l; Z# ~; n) W) m( q{) s8 u- C- Y% d$ y9 i0 K) O) X
        EHRPWM1PinMuxSetup();
$ p1 e7 I! o. w; }, Y4 F! N( R
8 o5 S/ w1 }2 L        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
* u+ j  ~; W' O6 n5 G: S: u  L        // 作为捕获功能时管脚方向为输入
4 y2 P+ X* g! i" f* G6 H: o( p9 e7 `        // 作为辅助脉宽调制时管脚方向为输出2 \2 V8 ~* g3 G  }8 L! l, b
    // ECAP2 / APWM2
# y# F7 b. N6 P. c& ]) k8 ]        ECAPPinMuxSetup(2);
, H/ u: f' K, J- w! O
- X& \9 W# f8 w# _5 O5 A        // ECAP2 / APWM2方向设置为输入
# [' \- K4 Z/ L: Z        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
8 n. Z' Y% E8 B5 ^2 `# \8 y. N}
$ o" G0 P& @: J! u$ Z$ C: h; |6 N, A8 m
/****************************************************************************/7 |& f8 N+ f. Y+ Y1 X) A9 T
/*                                                                          */( [9 P: D+ m! w6 x( _+ m: V4 L
/*              PWM 输出波形                                                */: M+ \( F- o1 A) i/ M
/*                                                                          */
& V- e- I# Y0 T, a. G. A1 B) J/****************************************************************************/
+ Q% V6 `8 y0 Xvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)$ ]! u. R; P/ m( W3 x5 f
{
0 @9 h, m# f+ S4 T    // 时间基准配置  f: T% ~4 B( h* E
    // 时钟配置  u1 @% d! }7 A, l
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);" G4 e/ U* J9 t' r, I# K

; N6 K. n8 e$ a    // 配置周期
% I$ ~& \; o# S; j" f5 G3 P  {    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
/ F2 I( w9 z0 L4 p  l                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);, v5 N8 b) n) K( [3 ?- ~

" \9 U  a; Y5 D    // 禁用输入同步信号
" Q& E- G% E4 Y6 V  N$ R, ~+ j% Y    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);! B" L- o3 ]" m2 Q( p' n
/ R5 }5 l) A/ K6 ]" {
    // 禁用输出同步信号! b, {, d" ?% o
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);1 ^5 P* W( ?# r- J

2 b3 D( H5 [4 u# o' \* ?    // 仿真(DEBUG)模式行为配置: E8 {$ o' [" x$ x; A1 e* R3 c/ `
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);0 c3 C5 I# ]$ o1 _2 w% V- x8 z
0 v1 e) S( V# x2 ?& f
    // 配置计数比较器子模块- ]2 e$ H7 f+ b* z. _3 _
    // 加载比较器 A 值6 \2 z+ M- `3 `$ ]' F
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
1 V) l- G9 c4 u- c2 o5 F0 D0 R                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 b1 K# {' P9 z. Y+ ^2 `) t9 w( U% l+ H8 n: V
    // 加载比较器 B 值# y1 A* C6 {4 p; g1 y
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,$ w; X9 v' }! Q7 l6 L
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);# h7 o  e7 G" Y1 H  V

& @. }5 i' S1 u0 L% Y    // 功能限定配置(输出引脚触发方式设定)! f% H; A/ I: f, M
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
8 D0 _0 O5 [4 p    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
  z( @& g1 V$ C6 x                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,2 W" m, S, b5 m" t! w5 O6 X
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);. |7 e% `, n3 `7 f
0 D, t0 D. p, N* o- w7 H, D
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
. b7 q2 G0 Z) I% }' N    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);2 D. M+ c  p: T. x
! G+ Z/ Z! Y; ^4 m
    // 禁用斩波子模块
$ t8 ]3 k/ W8 {  Z    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
; b. j: A0 \  ^  z8 h6 t" I2 J
+ g& J+ q7 I* k# @) ^) r  w    // 禁用错误控制事件
% z6 r) J" L' z9 t; \    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
" t1 e$ C. a5 {) U: ~9 b) C    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);; H+ ~0 Y( ]2 `% L. D

# h$ q/ E, n& g  M    // 事件触发配置( ^" e- q+ _4 o% P* x/ X
    // 每三次事件发生产生中断' m* v9 B4 L/ l5 n3 k5 j
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);( O2 Z" `/ c. i  h0 b) k' O7 X
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
) r$ T2 i' s5 [: a' M    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);$ E+ s& v! V$ l% \7 f# i
    // 使能中断+ f! {! H9 d' B# E
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
9 i1 o# U: a8 ~' E& w& _' E  F7 Q
, |! }1 C. E9 j7 f    // 禁用高精度子模块- d8 ]0 A6 R/ G* P" Y: z
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
7 S. h" g4 {+ I5 t' N
( x  H( g# d1 i! m    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
7 f# ^- x. Y& A}
' g. J+ a  Y9 b8 ~4 f) }3 E" J; _6 o  \5 t/ H  T# L
void ChopperWaveform(void)
3 O) r) J  T( A% [! W4 y{
  ?6 r* s' L# j4 G" s" o9 m    // 50% 占空比  U7 I1 e" S8 `6 E. C
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);' f, ~8 ]& p+ \0 f
    // 4 分频+ v) d+ _( f% V$ n, _: P1 m( `, K
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
0 {8 x% @+ X3 z    // 单个脉冲宽度# |! j' O4 U4 y, k
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
/ r6 N$ T/ E$ w    // 使能斩波子模块
0 q3 o# j2 U0 b( y    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
! M( {% q% F. A* B}6 I. R; F6 Y0 E, s* Z

2 e( d5 G8 d4 s6 O+ M% j/****************************************************************************// K2 L0 |/ M* i( _& j
/*                                                                          */+ i# c+ [- u4 o$ e# b4 v+ Q0 Y
/*              PWM 中断初始化                                              */
) g3 |) f% Q" w/ N" M" I/*                                                                          */' N3 r, M" V6 n4 n$ a: n- u! l, w
/****************************************************************************/0 {) C+ S1 R) b! [: j9 k1 {$ }1 k3 T& F
void PWMInterruptInit(void)
5 O( h0 ?" |- Z{
7 D: n* i. q5 \& e        // 注册中断服务函数
6 A( h) b5 q- ~4 }: V        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
9 \% f9 G2 \/ u; t        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);) q! C2 Y& b3 F6 z
- [! C  B7 e, ^' K: m
        // 映射中断4 B! p6 O! j) }
        IntChannelSet(SYS_INT_EHRPWM1, 2);
* C) S/ x# z0 @3 K: I. G3 r        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);3 g7 }- p) M- Z2 Q: ~' \- o

" Y; {" ~' P! w# a% s        // 使能中断6 ~7 `# B- y; r
        IntSystemEnable(SYS_INT_EHRPWM1);
2 J4 d& F, X5 b( ]        IntSystemEnable(SYS_INT_EHRPWM1TZ);" Z7 M6 T7 ?0 U9 i
}
+ n8 N3 _% q4 A! ]
( I1 ^4 F0 T2 j$ `( b# u( |/****************************************************************************/7 J+ F6 X3 A" T! y$ L; a
/*                                                                          */
) ~, Q* I, S/ I$ k/*              ARM 中断初始化                                              */3 w3 R8 f( h$ `/ Q1 W. z3 p; W
/*                                                                          */. G1 ]5 H$ M8 |' t" M' t
/****************************************************************************/6 ?& q( D- Q- Q. S# ^
void InterruptInit(void)
/ X5 i& i; k8 c9 M8 W! J+ b, k{
7 V- a! \* R/ x5 I* `9 Z        // 初始化 ARM 中断控制器  j7 B; j5 f$ c* D; h
        IntAINTCInit();
9 n6 o9 N; J, [8 u3 d9 r. i: m! F( U' j
        // 使能 IRQ(CPSR)( ?. D- t  c5 x# S- ?/ X6 Q3 j% ~& ^
        IntMasterIRQEnable();+ R7 Q" a) D6 x& Q  h: Y- X
( v% D' l% L1 b. T
        // 使能中断(AINTC GER)( W9 V! O4 ]2 B& I- ]
        IntGlobalEnable();/ G3 ^. f( E( {$ g+ ]
9 |6 G6 `1 t% `
        // 使能中断(AINTC HIER)
, V( p: I) X+ l2 }# e+ X* T        IntIRQEnable();
' G* b  e1 l' s( f2 B}
; ]# Y  B3 Q8 z1 l
4 M" o/ F7 m0 o+ f  A7 C- N3 k7 _! f9 W2 o
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/; ]$ W! ^/ K- E' I9 n; Q
/*                                                                          */# _* d; t+ B4 D$ Q6 B, }; s6 C
/*              中断服务函数                                                */, k7 i2 C0 w. m* ]* s
/*                                                                          */1 Q' {8 |) I! y, \' a# D) |
/****************************************************************************/" R0 V$ u1 e" t. ]
void PWMEventIsr(void)
" u& t5 I+ w; C- `/ H{3 S" C. c4 v* g- H
        IntSystemStatusClear(SYS_INT_EHRPWM1);' h, u: r0 `6 ]5 `
' x: E5 F# f6 |! {7 e7 C( c4 L
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);/ {. I8 O( d8 y" d
}
% _! V  ]" X9 `$ {' j2 \
, M1 P1 p/ q% Y$ F  pvoid PWMTZIsr(void)
6 L/ K( K3 o8 w5 n3 F{
4 a& ~% x# b. a% t8 s        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
4 A: T4 i- x* Y' r& X( N/ v3 T) S" L+ D4 o! m
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);: P0 Z. u& A" g" K3 a6 D, j5 L
}
' h- ~; O! d5 t
$ T8 b1 T5 s' p/****************************************************************************/6 U6 x3 P# p: r  t  r1 n' r1 N
/*                                                                          */
( \- u( H0 B) f: F" ^/ T3 q/*              初始化捕获模块                                              */1 k5 G" Z1 X# h! R% ^: k- {! u
/*                                                                          */
; ?+ |' V% s* d: N" G/****************************************************************************/4 T- K8 [8 v0 h" j; y
void ECAPInit(void)- P& F$ ~7 _' V+ q2 X4 E
{: ?; j/ k: f- m  E' `
        /*-----设置 ECCTL1-----*/
5 A5 l- n5 u) U1 j6 |( S/ [        // 使能CAP寄存器装载
+ f& X$ n/ A1 U        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
$ f$ c% [. j  Y# z4 j        // 设置预分频值.
8 T2 @  y2 T% K        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);* C. e2 v1 K: L+ h6 ~, k
        // 上升沿触发捕获事件( N7 i* B& y, G  Q( Z& g
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
3 f& c% Y2 U# y        // 输入捕获后重新装载计数器值.
' j* G  I- h. X        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
  c8 N+ x2 l1 {0 w' B9 B2 q, L; [( S
        /*-----设置 ECCTL2-----*/5 H) ?1 P7 L# ]- I2 g+ l
        // 连续模式
8 z$ r4 ~# b* I5 X8 m        ECAPContinousModeConfig(SOC_ECAP_2_REGS);; B, n5 j# ^+ x9 v
        // ECAP计数器TSCTR持续计数! n$ _9 }$ c5 B' Z, B$ x
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
7 `) h# ?% e8 A' U        // 禁用同步输出和同步输入
1 m0 T8 Z0 a5 U& V        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);  ?  a! P$ H" |/ O  h: w8 U1 S6 d
        // 配置 ECAP 2 为 CAPTURE 模式, D# P5 Z& {, g: _/ `
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
* x3 `4 ?5 H: ?! d1 w: y/ n0 i
% x7 Y5 f- Q, K# {$ x/ K        // 使能中断* f2 H# I4 ^2 I/ @% b" K
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);! n' q* }+ i2 w9 b9 `5 C
}1 I" Q2 B" U( H6 O9 j- H+ f1 `& M

0 M+ y$ p5 S* b7 T4 E  m3 p9 m/****************************************************************************/
# Q3 K& |; T" {0 S/*                                                                          */
9 i% O  w: p6 I5 G0 q7 x5 x, L& h6 x/*              取得捕获结果                                                */$ @8 o: x% D; r. y
/*                                                                          */
+ j$ K/ b1 ]* x7 M4 V/****************************************************************************/3 F+ Y) l9 ~, n! U, t* D
unsigned int ECAPRead(void)' p. ]! p, ^  a. R; h1 S
{
! m6 E. ~! c  `: \4 S4 i        unsigned int capvalue;6 p& o: x/ e* i( x8 B  i0 Y
        unsigned long frequency;( b  c) A) B% D2 k% ?. N' M: S. f0 \! k" m

- J& H' X8 N3 `) \4 P5 n' h+ Q        // Event1 中断标志4 C" T5 b) @3 n
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
. I$ P  W2 r7 U; T; `        {
- T' y. [$ ~/ a                // 取得捕获计数0 z) V' S) @+ j4 i
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
/ s, S; C, N6 F6 ?* X                capvalue = ECAPResult.cap1;$ C  t/ I* o8 X. D, q
) o0 P5 p: S: d( G3 I9 X
                // CAPTRUE 模块 228M 时钟主频' z* O: O, @; j& m; I- k
                frequency  =  228000000/capvalue;
- Z, V0 V, l& u) z                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
3 D  [! e: D4 Y3 }4 k5 z5 }5 I
/ [8 c# s( U+ o3 K* K3 T" \- b                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);' N7 }/ H4 G, x# E
//                IntEventClear(SYS_INT_ECAP2);; L2 Z& q; ~# ]' W& O: n
        }; _; e4 h0 k7 C# m* q# r
        return frequency;
- C, l) W- H  a. f3 _}5 i) _1 l! n1 s$ M) M- G5 r1 y
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。' y1 m! \7 {4 v% w6 f. r- m$ g

本帖子中包含更多资源

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

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-2-21 22:49 , Processed in 0.045318 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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