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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
! q) U' T8 R, h- f3 a/*                                                                          */
3 ?0 q) h) }4 z- |, q/*              宏定义                                                      */6 t; z; V: Q. X4 V' g4 o- ]
/*                                                                          */
0 @9 i  Y6 z/ Y! _% }4 n( K9 y* t/****************************************************************************/+ s% V# k3 K, h: K$ w3 a
// 软件断点
: ?) s7 i2 f' e9 D; W% m#define SW_BREAKPOINT     asm(" SWBP 0 ");: D+ }2 G3 S' p  v' k# k; O0 h5 Q

: _) U  x! e( e4 j6 m( Z8 Z: F/ t// 时钟分频" F/ \. R$ O6 P$ q, a3 M  D
#define CLOCK_DIV_VAL     228- f( J+ N$ h* H

) V, Y5 ]0 r" h7 D; o- F" z2 t/****************************************************************************/
) m" c& t  `, v: w  U1 K; x5 K5 |/*                                                                          */. r7 ~8 R, z" @  t+ r6 h% H
/*              全局变量                                                    */- C8 o: Z& L3 T" I
/*                                                                          */
9 G5 j! Y% C% J7 D+ m! o5 P/****************************************************************************/3 j# _6 h1 S/ j; s- j
ECAPCONTEXT ECAPResult;
  I* J6 m8 D* Z" C, J, ]8 K. P
3 t/ k% `4 ]; x$ N/****************************************************************************/
2 e' R& ?6 A  q( Z7 c) E) {) \/*                                                                          */' I' D( B+ R$ X3 e9 B$ b5 r' x# I% i
/*              函数声明                                                    */
& n- w, S: N2 O( u" o; ]/*                                                                          */8 e; r3 h& f) z6 ^- {( P
/****************************************************************************/
% W! V- ]5 x& @6 t9 p# M$ s// 外设使能配置
2 Z& R' Q: A0 F5 j  r* Mvoid PSCInit(void);) y7 G2 a2 ?- ^
& w" Q3 B4 W/ a+ _1 a3 L0 s6 p
// GPIO 管脚复用配置
( n5 u! H& f2 O$ Evoid GPIOBankPinMuxSet();
! q) o# j. g1 h' S5 H, z( p8 M" h* U( D5 d, V1 v) X) o* C' Y
// 产生波形
: A2 u2 J  ^  q/ evoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);; C: p# x$ X  R0 k$ B) K6 o1 k8 u
void ChopperWaveform(void);+ X' v0 y- i: @/ x& k4 {
! v3 w2 b2 W2 |2 F7 w/ p
// ECAP初始化和读函数
* _9 Q; H& j6 M% y2 gvoid ECAPInit(void);3 w6 `  S# X/ a) ]6 k) S
unsigned int ECAPRead(void);: n4 j* ~2 n5 |4 `" t( U2 f
6 T" o, B" k+ {1 \
//ARM 中断初始化
" L  k; J$ V1 a2 `" N; lvoid InterruptInit(void);
3 Q3 ?  ]: S3 ~2 V2 b, K3 E5 u4 h! w' X" W( T+ t' F0 k
// PWM 中断初始化
. j" F# A% |1 t& y$ S' Jvoid PWMInterruptInit(void);& \7 A- Q# f- F; n; S. Y
// 中断服务函数9 Y" Y  @/ E2 D
// PWM 事件
# |- J# g. \% Z/ m8 Ivoid PWMEventIsr(void);; m. \: ?" @/ G1 C& ~# _
// PWM 错误控制事件0 y2 s$ u4 c! t/ l+ z
void PWMTZIsr(void);
6 {! i# A: p. Q2 ]: |, K$ c+ f  `: e
# R6 q: k) F! y6 {/****************************************************************************/, f- {% F; |$ B5 g8 n9 u
/*                                                                          */
" g+ p/ P( x6 Q  ~/*              主函数                                                      */* w4 S9 p6 |/ y" ?4 @$ x/ J& n- p& y
/*                                                                          */
; Z; s7 {) A) b/****************************************************************************/; h* }4 c8 Z5 _* O& S/ I
int main(void)7 c# |0 a- I" s
{' F  g, C1 K- u- U( B8 N
        // 外设使能配置. u8 i" N1 g6 W6 |0 J& a, @8 _! L
        PSCInit();' ^. H. d- U" v3 ]. A, s

  b  D' |3 H5 g        // 初始化串口终端 使用串口2
3 f7 K( |/ k% r* B* c7 h" K        UARTStdioInit();  n8 M* y0 i9 [+ W$ u7 ]
       
! y0 v  {: n  }. U. f        // GPIO 管脚复用配置
( E8 I: B& r; C5 s& V8 L        GPIOBankPinMuxSet();# W- j# V8 K& u  e: O4 D1 P

' a3 g7 {4 D3 x8 h# L& p        // ARM 中断初始化# I4 x4 u: v2 V2 Q& E5 V6 _
        InterruptInit();' |; ]' G" D$ L5 r& W% i* _
7 U0 K9 ~" ~4 Y# C
        // PWM 中断初始化
0 k7 t# }7 Y; E8 \/ t) a3 A        PWMInterruptInit();* V6 t: ~# ]/ B) B

6 z0 O9 Y  t2 c  y5 I! k' B        unsigned char i;( s1 a. `5 g" c( @9 M! X& d
        unsigned int j;
3 d3 D' B/ z) f/ T0 g6 r5 H9 p% h) A* S: K4 e9 A9 l: ?
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);# Z9 {& R9 D" s  X* c$ j3 M# `: H
        UARTPuts("------------------------------------------------------------\r\n", -1);
% R, _" l+ i: I" f2 g        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);/ L) i6 v8 V" E9 @: U+ \# x
        // 产生波形- C+ `) D9 ~( \+ Q% l6 c% e
        PWM1ABasic(25000,50);
& O7 C: E8 E+ G% Q8 y
+ U' {! d; H+ W7 {        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);1 X% k( M  i$ w7 F0 o: H: S% h* _
        UARTPuts("------------------------------------------------------------\r\n", -1);
9 n7 Q6 v0 r; R# v5 l, ~& w& j5 S8 e8 r! V& X( n+ {* B8 n% T4 Q

9 p% C4 U$ M/ c3 ^. b+ B% d( F" D& h( X
        UARTPuts("------------------------------------------------------------\r\n", -1);) A+ `9 S9 r8 d
        UARTPuts("                    C6748 ECAP Test\r\n", -1);. z! S( {* Q9 \6 j9 U/ h6 _1 x
        // ECAP 捕获初始化% H% V( m) Q: C1 Z1 l) Z  ~8 ?: U
        ECAPInit();- y8 ~' o9 K2 ~/ f
        UARTPuts("Initialize ECAP.......\r\n",-1);
% {5 @! d3 f/ `% _        for(i=0;i<5;i++)
; C: g8 ~4 t- K% G5 G7 ]        {5 e) z# r' C, Y) S
                    for(j=0x00FFFFFF;j>0;j--);            // 延时- C9 q/ T6 g- P6 g3 Y/ i' y4 g
                    ECAPRead();* V3 ~4 @  X; K8 U  P
        }
% \1 N1 m" d# Y        UARTPuts("\r\n",-1);
7 u( L& g% I6 s9 f        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);$ B) o" \2 ~3 H+ J
        UARTPuts("------------------------------------------------------------\r\n", -1);5 }1 q6 x2 M+ d
  K& P( C! v6 x( A5 j! z* ~0 a
        // 主循环1 L! ?- r1 o. ?. z! u
        for(;;)
, P8 S9 u8 ^* W) `% P- {        {
% v/ C, k' o4 _2 M
! D$ B* K+ d' f8 S  j, v% q        }
1 }8 k- |+ I. r8 @" Y6 {}5 @0 {' _2 G  k* Z

: Q& n. _/ s) k5 A9 `' P% E/****************************************************************************/
/ r! d/ Y, O/ m/ K/*                                                                          */1 b9 h/ D$ j1 _" u# j% c/ l
/*              PSC 初始化                                                  */
* E  }. _2 u6 B, D$ k( c! S' U/*                                                                          */
: W5 C( `4 d) O3 i. @/****************************************************************************/
' C4 c. [- f: ^  d" V4 kvoid PSCInit(void)2 s* H: g! m! n( @. m5 P0 v2 j
{" c5 W: }0 T  O& g( ?" s& L0 @
        // 使能  EHRPWM 和 ECAP 模块& L! }! G4 H5 y+ B7 y: h/ q
        // 对相应外设模块的使能也可以在 BootLoader 中完成; p8 r3 A6 w9 I6 r. J# j/ f
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
4 z! J6 C3 T5 e5 J    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
2 D, p- p9 `* P5 Q}3 f6 Q$ A+ V4 C+ b( `. u# x

# I. A. l, u8 F: C8 ]# b/****************************************************************************/
, [1 w3 s6 ~& v3 \* n( W! K6 N/*                                                                          */& Q1 g  j0 W; K7 }2 `1 ~; f
/*              GPIO 管脚复用配置                                           */' L$ q* ]0 y# ]8 v
/*                                                                          */
( d- a- y) z, T/****************************************************************************/
$ E0 Q9 l$ @6 C) E% Vvoid GPIOBankPinMuxSet(void)
  w+ ?6 B- g) @{7 f- ~) I/ b0 C! ?% I9 S
        EHRPWM1PinMuxSetup();+ Z! X9 E; F3 q* |3 U+ U9 z

' Y# ^9 y7 S* s" j        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)# S! e& J7 q9 [
        // 作为捕获功能时管脚方向为输入5 c/ W" ?; V9 R- z, ^1 d
        // 作为辅助脉宽调制时管脚方向为输出' n$ U; u, V8 g
    // ECAP2 / APWM2& X& L2 _  G! S4 ~6 Q( t- }3 F
        ECAPPinMuxSetup(2);
. z9 I! `4 p* g/ a4 A1 j/ r1 `2 Z3 z* E& |9 c) j7 x0 i0 S
        // ECAP2 / APWM2方向设置为输入
& ?5 f% j3 n- `# B7 O: Z2 b# p        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
! ~7 |0 I' A9 o- |) A% \$ s}
# `5 f- r. C3 w0 T: o4 x* k; @8 `+ f- e1 H& m  e+ M
/****************************************************************************/
4 P$ v' h9 y' X( K. W" q/*                                                                          */# d1 @% B1 {; c7 q
/*              PWM 输出波形                                                */8 B% n: z/ @9 J- A6 \5 [, [
/*                                                                          */
2 r! y: ~* d0 i0 J4 G) q/****************************************************************************/
- v  ^4 [4 D$ S& C- R( K8 bvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
6 V( E4 R7 P" \7 c{
6 L' C9 M; Z1 G. ]5 s  Y+ }& t' K    // 时间基准配置
9 K# v* `' v% \0 G: q% [    // 时钟配置
9 A2 N' s! p$ U4 s7 J    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
2 t: G! `# o  d, j0 v* B8 d9 I( e
; ^* Y* z# ?( g7 l$ ]8 D1 `    // 配置周期
% X( s- Z9 Y9 W: Z* o    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
; j% i" Y# |2 D+ e                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
2 W- G, G1 h5 ~  R6 D7 ^/ t6 X  Z2 _: b* W
    // 禁用输入同步信号
6 m9 t# a5 P8 A    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);" C8 [3 z" B0 }
0 Q# o9 ?# Q/ h* q' I1 P- o$ w
    // 禁用输出同步信号
4 {7 J6 ~# Z3 U    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);3 A- {- Y+ Z' e# F, ~5 [9 V6 Y
' r: |# W4 ^" m: o
    // 仿真(DEBUG)模式行为配置6 e& p( e8 i/ E- ?' t6 W6 W
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
- @/ m, P6 C" Q& M* `! V
1 O1 d; ]9 x' P5 q: ?, I    // 配置计数比较器子模块
# k2 j1 a( n. Y- `9 L8 {7 e    // 加载比较器 A 值) A% n% X! H; |5 _3 ^& |* w. M
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,% w, L+ A) A$ A' M' H5 X
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);' P2 x3 E7 d; \( M7 X
$ `$ `5 y+ S9 r2 Q( p. m
    // 加载比较器 B 值6 h5 b3 M6 E! k, y5 i! h& u
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
1 R: X% C+ v1 K/ P: q/ v                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
, i) q2 d" h; ~2 Q% E1 a# ?: `2 U
    // 功能限定配置(输出引脚触发方式设定)' Y6 D) {- L2 m5 z) V
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出  I7 V9 ?: U; n8 w1 \2 H. l
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,8 o4 s1 F5 @% h* }: C
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,, `) Z5 S7 H5 m) O9 _# A3 O# K# ]
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
0 m3 J( V8 W  d% t) ~3 l, V! ~8 P7 n
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
; L% D+ }: i6 R0 O* h. E- ^3 P    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
# c! L5 z' s. `: t3 ?8 Q: F1 u; [* _* S6 s- n
    // 禁用斩波子模块& w, J3 R2 R: x0 [, }8 d
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
! J: L$ V$ d8 }: W" A) S+ d$ s3 v! o8 ]/ s* l! M; q
    // 禁用错误控制事件
' D# t( d4 K! ]7 P" D% C    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);2 S' R$ g6 k4 P" l- g2 m6 z
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
8 P. R4 B9 w; M: P/ {- O( C9 m4 _
    // 事件触发配置
9 j' e: t4 C! V1 {, @. U6 r0 E& N4 _    // 每三次事件发生产生中断$ A0 U3 O% R7 V. O2 a( N6 `0 s
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
% F3 Q+ T4 d8 q, t$ o% c1 y6 \" P    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
& q+ `8 a) Z: ~( e; M3 H/ K5 L) q7 x: h/ K    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);* N4 y( P: f3 i3 p/ T3 W
    // 使能中断7 X& H  _+ d$ }, X0 j( W
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);8 x  I$ U8 c3 s; G; }3 ], f

! z' b4 g5 A5 Y8 f5 `    // 禁用高精度子模块
- T9 O, o/ S) o  i6 @5 R    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);3 G2 w' q3 \( P- E2 y; W3 |
+ I4 ^1 W" A+ ^  @' z# ~+ F  @
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);! y, J* c) ?# H" ]
}
3 }6 f( _- z8 U9 a. J& T/ J% O) Q5 R' ^/ o. A8 {; Z3 p' u
void ChopperWaveform(void)% M7 c5 @# l* W5 y
{
$ G- D) U! r" ?, U8 s    // 50% 占空比( [8 J' r- I1 U: S" t
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
7 }+ O* |  O, e6 q+ w: V    // 4 分频. m& Z' J8 [% H+ n
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);7 r+ P( h; G; |: H
    // 单个脉冲宽度- k# N0 O! Z% |0 j1 k
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);  M  R, k# l% a- l( K; ]( v
    // 使能斩波子模块7 M- y7 J- x% L" K4 g$ v! `. X
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
/ R; S- k4 A2 O' z" [, F" a}
8 i* j$ _6 O( \1 y" f
; Y8 S( s( Y. l. h/****************************************************************************/# f  H5 V- l# Q5 ]: @8 s
/*                                                                          */4 d' p* x% U! @  b& q# Q* ~7 u
/*              PWM 中断初始化                                              *// H: b7 E) L9 j! u3 ~" {& e
/*                                                                          */
0 Y% D( a1 w& `0 G3 O' J/****************************************************************************/! g6 A8 {. X$ W, {/ l
void PWMInterruptInit(void)7 Q( x2 U' L2 }# R+ @
{
6 |  p' \& y/ Y$ m& N        // 注册中断服务函数
" B4 U5 m9 ~4 U( l# g4 x        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);! b; l6 \+ J6 l% D! C
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);5 j- r3 e$ G7 C6 @
. t6 |9 E# x1 r% V
        // 映射中断7 ^# V& x* j- E
        IntChannelSet(SYS_INT_EHRPWM1, 2);$ X- T; d; S& L0 M
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
, \% |2 u) @, n" [2 U, J
4 {. f/ F2 l" H3 I0 v% Q; Q" z2 {        // 使能中断7 ]' d. T1 V+ C* N
        IntSystemEnable(SYS_INT_EHRPWM1);8 S$ z$ P, O1 h9 L4 j" P
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
- ~( R9 J8 d/ |+ l}
, R, P# i7 W4 l/ I& q- q
8 W, L: y. r( |: l  N5 H* X/****************************************************************************/
$ J# M& B9 E) V3 x/*                                                                          */% S2 h, A" a9 F. e7 W9 c% r
/*              ARM 中断初始化                                              */
" z& G, d9 L+ j/*                                                                          */5 }0 U- i4 f. T" O
/****************************************************************************// D( l  G* L- h5 a$ d
void InterruptInit(void)1 [2 N9 \2 E, Q7 p' X7 V: Q7 n" K. X7 [
{8 V1 `- n' |% R9 A& F# F: }
        // 初始化 ARM 中断控制器
* R  |- e, l7 \4 S        IntAINTCInit();" B% ~/ C9 y# C6 q7 w2 p' l
+ u0 m/ w7 L/ D8 Q% q, E. O
        // 使能 IRQ(CPSR); y: C  g$ n: q! l
        IntMasterIRQEnable();+ S% `: X+ C6 b0 {/ p. C/ h

& D& e9 \; w- D; G8 y        // 使能中断(AINTC GER)5 V9 T, g9 @* w- `. l5 G- o- K
        IntGlobalEnable();
7 q9 Z% z4 g2 i8 L! ], @! S9 ^' F& R4 j- u9 Y$ A
        // 使能中断(AINTC HIER)
3 f3 o0 R2 d, e) j        IntIRQEnable();
, |8 V$ y& z: Z0 A3 ^+ M}* [3 B/ T0 y' t( D- b; N6 e

0 \+ n7 y6 q) B, |- c# @
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
; b5 _1 N$ C' [1 I0 x, o4 Q% W/*                                                                          */& K# ?# P3 V" A$ t- C
/*              中断服务函数                                                */- z1 a) w" s- v0 }6 E
/*                                                                          */
- h8 p+ c4 E3 N7 r" b7 p& W/****************************************************************************/
* W! q0 M" e! [5 ?; Qvoid PWMEventIsr(void). a3 W5 C1 h6 `0 O
{% q+ \* T: Y7 ], X: |6 o& e( D* i
        IntSystemStatusClear(SYS_INT_EHRPWM1);
0 P# j& l6 r/ t: E) g+ x) b) N0 k' N
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);* E$ O3 \7 {. q$ z
}9 y' {. m9 B4 r$ N1 ^
9 [0 d+ x: r* A$ E8 N
void PWMTZIsr(void)
+ a) h! i4 H8 \! H$ [  S) U{
2 y% ], I! l# v        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
; G7 T! \+ _4 Z" H2 o. K
: K5 t9 `0 @' U- {3 S& R7 f- c. {    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
# `7 s; u2 [1 g5 l}9 t: ^! D3 u) W4 m# E1 D9 J
# g4 [7 `( g$ E" j# r, U/ N' Q
/****************************************************************************/6 `& v$ Q/ I3 @0 K( w
/*                                                                          */
0 b/ {. Q% r( V; w2 A5 x/ X+ {/*              初始化捕获模块                                              */
2 V6 c7 j7 f: j2 I- {' {/*                                                                          */& Z9 ?7 [1 H' @1 M( K
/****************************************************************************/5 \! g2 A: b6 m0 P: i9 Y+ K: f
void ECAPInit(void)
+ k7 F" a$ ^. b  c2 d0 u{
% [+ P, a& X. v, _) [, D        /*-----设置 ECCTL1-----*/6 ?9 v/ v2 b+ z% `0 J! c
        // 使能CAP寄存器装载& C  Z& k- e" h% h/ Q* ~# b; y. H, S
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);. P9 M5 g/ C, }1 }2 b5 H7 K
        // 设置预分频值.
6 z* j% \. r7 M# g; [        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);. l$ s3 j6 e. `
        // 上升沿触发捕获事件( |1 V  h& V7 D& `  ~' y. b3 k: i
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);2 v6 o5 H( O/ [3 }) T
        // 输入捕获后重新装载计数器值.; ]( c; _# w5 v, }1 j1 Q" P
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
2 g- B) l4 p( k5 S$ R( _4 b
" M* n1 s5 _2 K. i) c% K) M& B        /*-----设置 ECCTL2-----*/  D# i, u( }$ F& \, G. N# J! J
        // 连续模式2 S# s. s1 W% w  J+ [" o, g: Y5 c
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);6 S! e3 o( I4 F5 N8 H2 s
        // ECAP计数器TSCTR持续计数
9 f3 W+ s, v( U        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);& |5 B* P, X) F& I( |+ M
        // 禁用同步输出和同步输入
$ t# L) u' O" _. a2 F# [7 u        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);+ U9 g4 E0 V9 @' i- z$ U
        // 配置 ECAP 2 为 CAPTURE 模式5 z/ {  S* e1 M, _+ P/ ?- @* w
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
, }4 u: P+ P1 f
" O' p. f& K2 s' Q        // 使能中断
5 J% F9 t6 l  J( i) _//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);  {9 p3 W+ \0 B* q
}: @& m5 N2 s8 f8 ?& p

; D  }: @4 v( L9 L. e/****************************************************************************/  I# R( Q  m1 A5 T! i/ v: S5 Z
/*                                                                          */
  O" V  m* N% b5 k2 r/*              取得捕获结果                                                */
9 |9 z5 B! D( E) @: _9 v- N/*                                                                          */* ~) D; e0 K; g$ H# M
/****************************************************************************/: ^% k1 z4 N" p) \6 @# `# q3 U
unsigned int ECAPRead(void)
' Y5 P- ^  q- W( s{& M6 `5 O/ x, |
        unsigned int capvalue;6 }% J6 q  ?- b: C
        unsigned long frequency;
( `' N5 S# {1 I6 g; m  F. v( b. d. X: n
        // Event1 中断标志* Z; r* H9 e2 [# n: i# A
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))6 r5 b" L9 V; V" m0 R" P8 P
        {8 S. P: E1 Q  G7 e0 l) f2 |" g( x
                // 取得捕获计数( L1 v) K6 q2 |: f4 z
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
. G5 l9 P9 t  K                capvalue = ECAPResult.cap1;: i4 O* ^6 j+ K* B' r/ i9 s
1 [7 c, a% C, @7 q3 i4 d. T  ~
                // CAPTRUE 模块 228M 时钟主频( J  ~' N( V5 x9 q/ L/ ^8 f4 {- {
                frequency  =  228000000/capvalue;# r- {0 u3 V2 n# n, z( d
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
& [- h7 B! L3 \9 ?, G+ ?3 n0 F- V7 K- b& Z! x/ {1 B
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);4 w+ y; E9 n$ g/ r+ W9 u7 Y
//                IntEventClear(SYS_INT_ECAP2);. q2 \+ x5 w- Z( k" V/ S1 F* K
        }
( r. Y9 t4 O9 M0 ?2 p        return frequency;/ ~. W8 h# k8 B7 E, x3 {
}
( l; E. B; ^$ D, [) F$ z" S& X
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
! r' X5 k" [# y. v& w3 G4 c" x

本帖子中包含更多资源

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

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 21:29 , Processed in 0.046662 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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