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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/6 _  u. z! c0 [$ }( v
/*                                                                          */
  a% l3 A$ m7 ^3 N8 ^/ V/*              宏定义                                                      */, n+ v' a8 H  y; d
/*                                                                          */
$ d3 E( Q/ d0 E% |! |4 Y1 T/****************************************************************************/
. l. [$ ^9 k$ p7 ~9 ]# J7 `// 软件断点9 d- t# T2 l/ J/ ?
#define SW_BREAKPOINT     asm(" SWBP 0 ");; [. g! m% D  I8 b  d

/ J2 a- R: N+ \// 时钟分频; ?1 b4 }5 K! u( G) z4 |
#define CLOCK_DIV_VAL     228% L2 \( Z6 T1 U) I8 Y
: ]  v8 F# W5 c# A" t! d/ M% l: l
/****************************************************************************/0 X: ~/ i) M+ A4 M
/*                                                                          */
+ U* Q+ K! y# r; [. z$ G9 q* _/*              全局变量                                                    */
9 d0 t6 ?8 W6 y* ?+ {0 s/*                                                                          */
  W1 k0 S0 l" @! d9 |, X/****************************************************************************/
2 J7 w4 l' r! I9 o+ H4 y3 hECAPCONTEXT ECAPResult;3 ]1 E, @* b7 V

( W0 i/ s& S! p3 Z/ i1 ]4 {! O9 h2 G/****************************************************************************/+ J; j: x( Z% O( O5 s" o" K6 P
/*                                                                          */; k& K- K+ _  |7 U- u2 C
/*              函数声明                                                    */5 c# D. I0 k! q8 x" D( i
/*                                                                          */9 y( @. w' i/ B3 U" B& h- A
/****************************************************************************/
+ I4 J( k9 v# t// 外设使能配置# U& I. @. E* J" T
void PSCInit(void);
- O" N% }: C% g+ M+ p: o1 z, o* c' R* b5 W% \& f
// GPIO 管脚复用配置  }* Y9 i/ u! g0 a+ T8 h- v6 f% u
void GPIOBankPinMuxSet();
1 f% N# K% B; @0 V7 c$ l7 h1 u" k
// 产生波形* W# r4 J6 J2 F6 z% o% P
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
, J: Y/ a1 K. t0 ]0 W4 d: c% gvoid ChopperWaveform(void);; k& s( p4 D0 z0 Z0 v3 X, U

* s4 ^! T) f8 ?// ECAP初始化和读函数' Z1 ]2 t+ I0 h
void ECAPInit(void);  a; ?- h) E7 r; k
unsigned int ECAPRead(void);/ Y3 \2 }# K  W/ ?# k
4 C  H3 s4 P6 l! [1 R* n
//ARM 中断初始化
$ c7 x. h* b) ~( K. ]: uvoid InterruptInit(void);
% `; ?) o1 A5 I  k( U3 r! E% W- u; L  T
// PWM 中断初始化4 K" a& l2 ^: O9 a
void PWMInterruptInit(void);$ G" m. b/ w( I
// 中断服务函数
' {8 g. C, N. S; r$ J$ M+ L9 t// PWM 事件' H/ h3 r  a7 Y# m/ b1 ~) S1 j
void PWMEventIsr(void);
+ |# P; r+ E# p* L7 l// PWM 错误控制事件
' W* y5 I9 F8 u2 Hvoid PWMTZIsr(void);1 {3 _0 X; S+ ~0 j- a
" }: L7 t- v7 _" A. D0 @- F5 R$ Q$ Y7 @
/****************************************************************************/, c+ |) Z5 v- y6 s5 C9 g
/*                                                                          */0 F1 }* {, e8 n+ f
/*              主函数                                                      */# B% P3 ?8 l, i! ~. U4 {2 v* k2 k
/*                                                                          */% I6 Z6 c, N, i+ g1 f1 [
/****************************************************************************/
; T% D: u2 f- x3 n4 uint main(void)
/ b& X3 H! q& C, G( d( h{" v3 i5 G' `7 A7 ?/ k4 D: \+ x% |
        // 外设使能配置! H5 Q% T4 ^. c; Q) }$ n
        PSCInit();6 J' {) B# I6 c
0 |8 `+ D. N0 N8 s; @) v
        // 初始化串口终端 使用串口2
& d1 j8 Z* @4 X0 X0 Q7 o3 e        UARTStdioInit();/ v. O* V& t' I+ m( D6 p9 J7 w
       
+ I: G1 J' z! ?% @9 v/ y/ [2 J8 \        // GPIO 管脚复用配置$ W/ C/ x% W6 }9 q' l( X
        GPIOBankPinMuxSet();3 L+ c. u! {7 S0 @

$ u6 T3 U7 L& Y- }1 _        // ARM 中断初始化
* c0 T) f& C$ J8 C        InterruptInit();4 ~2 C$ ~: L& J. s# [0 m

  c2 V2 e& {9 a: D5 |        // PWM 中断初始化
  i  O: K& v. Y& L4 D1 o$ H        PWMInterruptInit();
1 b- R1 K. x/ _8 u$ b( Q* I  Y& t. l' i+ o- `! R
        unsigned char i;) `1 {  x! m# N! D
        unsigned int j;. x+ E; I& d. f* O! ?

( R. @7 V- q4 |. r- S4 ~* U        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
5 `1 I$ _- ~# u6 J" h* \        UARTPuts("------------------------------------------------------------\r\n", -1);) m( p! _$ ~8 U2 F- \2 A6 O  u0 H
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);- V8 R" N6 ^; O9 ?3 S4 ^
        // 产生波形! P  d6 R& i3 ]- I2 y- S
        PWM1ABasic(25000,50);  L3 \5 @$ d% d. s5 Z  o
2 N! g- P* j. b  y' T
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
" A& J1 A# Q$ _7 b8 X( ]        UARTPuts("------------------------------------------------------------\r\n", -1);7 N/ ]& z- r% o: I/ ^8 N! L

+ s0 Y: F5 v8 x( D/ R
& K0 P- |$ h# t3 E0 N% v& K1 L. M; t) p1 F
        UARTPuts("------------------------------------------------------------\r\n", -1);
/ t4 m2 h8 k3 D$ o6 d8 }" v2 j0 _; K        UARTPuts("                    C6748 ECAP Test\r\n", -1);
! ~2 r( c5 U9 Q8 H, G& H        // ECAP 捕获初始化
9 }4 y" o: _7 K) n( O7 ~! F        ECAPInit();
0 s9 R8 }4 _& t% G        UARTPuts("Initialize ECAP.......\r\n",-1);/ p! {9 h+ U; I# p/ @, R
        for(i=0;i<5;i++)& L. H- Q. B" s3 Z
        {1 D7 u( @8 ~7 M2 ]5 i- B
                    for(j=0x00FFFFFF;j>0;j--);            // 延时2 d7 k" }0 i' K8 R+ ?! t
                    ECAPRead();3 i9 j* v) W# R! w
        }
4 x, ]3 a( S3 N* j+ e        UARTPuts("\r\n",-1);
% x. t" A# F* y0 f; {$ N6 B6 Y. }1 ^1 o6 M4 }        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
( @/ m* m& D6 o3 Q& `: e- s/ @: j4 i        UARTPuts("------------------------------------------------------------\r\n", -1);
" M7 j" n5 H# @
! n9 j' Q0 b8 z        // 主循环
7 V- g9 [. z3 M. y/ z# R, J% s& R        for(;;)5 {( }4 M+ P& I/ g1 ?
        {
! F! C2 W- ]+ p9 ^# R7 }$ s' g/ o% b$ S" A) T& L$ h
        }5 M5 S: q( x7 I8 s+ X
}
+ t9 E( |; p* B" {* d, e
1 R3 z- v% X7 l2 x  Q9 H# ^/****************************************************************************/
! I- Y1 }" a& r8 a/*                                                                          */
) y- A. c0 C8 j2 u/*              PSC 初始化                                                  */
2 a2 x2 @3 `* X0 f0 g' {* p/*                                                                          */6 Q! M$ T. N1 O6 ^
/****************************************************************************/
+ ]: q' B7 d' b6 K$ g9 L) U. Avoid PSCInit(void)
" z) m: f% c. [1 U{* O2 z: f6 ~6 {4 p* K* q$ M
        // 使能  EHRPWM 和 ECAP 模块" m  V% v, f- Z& e
        // 对相应外设模块的使能也可以在 BootLoader 中完成
3 D& E- ?7 F3 P( ]% y- @6 u2 k    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
$ B; B- R6 r2 ?6 w' v5 {    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% w: W# G- W) W$ N! X0 Y+ f}
8 Y5 F$ O% b; k
+ R1 T% [. O% f/****************************************************************************/% B# w% c, q' ]0 i
/*                                                                          */
1 {  g' k/ {0 [) _' |2 Z$ a9 f/*              GPIO 管脚复用配置                                           */
8 s" j+ [3 Z. P( p/ _2 s' ~; }- P) d/*                                                                          */
7 L0 f) j6 V" u+ L* }7 ^0 ^/****************************************************************************/, @0 Z3 G2 n/ I
void GPIOBankPinMuxSet(void)* @8 a, [  q4 ~5 L/ r& S. B
{
' Z% }9 f+ N" Q        EHRPWM1PinMuxSetup();
) I) @1 ]: b; s( W2 R
4 _3 [9 \7 [8 n! U2 X7 q$ ^( U        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
  F$ `8 d" K" l3 H) f7 g+ `        // 作为捕获功能时管脚方向为输入
  n# ]5 O% @" J9 e        // 作为辅助脉宽调制时管脚方向为输出, G) S8 M8 [8 R. f, b- w
    // ECAP2 / APWM2
8 Y0 d# R2 F7 g        ECAPPinMuxSetup(2);' y" q8 m) ]: l1 U

# W+ {6 N5 ^0 V( j& A        // ECAP2 / APWM2方向设置为输入* Q' M- @9 J) O: ~
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]! t- i8 f# o  Q
}6 s, R3 C9 ^3 p/ Z- W9 F

* Q, ^* H% Y& |- a$ U- a+ q/****************************************************************************/8 ?& V+ n$ r0 l+ n0 O
/*                                                                          */8 C  o0 r9 Q& V2 H
/*              PWM 输出波形                                                *// r% X: }4 h" Y' V& c$ m, q
/*                                                                          */
) D: D- ]9 O4 x% A4 N( p, y7 s+ d/****************************************************************************/
1 ?" ~. g2 m( J4 c1 Hvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
9 i+ P* F" y- q' O{
/ b! r& t9 p5 V7 u3 `4 c7 r6 B: o    // 时间基准配置2 [6 W! l/ U6 b" E% l
    // 时钟配置) n" j! A5 k/ ?' w% E
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
" e3 P$ G1 c2 s. A1 z+ t
( z$ V# z* u5 Q) ~7 @3 S  R" ]5 s    // 配置周期
- {! x" u" |/ E' `1 m0 ^3 ^    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
$ j: T8 V$ c5 l/ o* H  S1 l                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);$ Y, x" o! O) X% a; ?/ q; n- I% M& i" ]

( R4 p% V( \. a- U: H" T    // 禁用输入同步信号
5 @2 G- r  C+ V    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);/ X: J6 X* P0 W* q% @8 B
/ O+ Y4 {1 E3 G* e/ B  s6 }
    // 禁用输出同步信号
8 m' F" u1 t9 Z1 _, }' K- |& o    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
4 v1 m( ]" v/ d: U1 m4 y1 j, u& t9 \
# v% k6 {" P- a( g+ s" F    // 仿真(DEBUG)模式行为配置0 p" O0 ?: [* q9 L+ A
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);& ?$ V7 e6 M3 v) r
' I( q* a  I+ B) I! H
    // 配置计数比较器子模块/ Q+ M3 ^) N8 i& S* U9 a3 d4 Y% d
    // 加载比较器 A 值9 {  Z( j( ]) p# K
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,$ s9 D* \" G; y& Z4 q. D; D
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);. q% E) A4 d& B! a
/ P& [- o( T. w& c% e  o; U
    // 加载比较器 B 值# {4 i! D% c, N$ S  t
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,+ T; o9 P8 v! I' ?( r' T1 E
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
$ g) A6 m2 A- l9 K  }: I) y- N: T; o
    // 功能限定配置(输出引脚触发方式设定)
" I3 r0 V. s. S9 a: D" l: R    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出: E4 o# ^2 p0 E1 M$ t! X& r1 M
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,# E4 Y9 q/ ]1 r- L" Y! _
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
& L' B, P! s9 y) d1 m                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
' \( b- p0 C! ]$ F! e
' Y1 ~. g$ Z& B$ F3 L  H    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
( j' |) P( O2 `6 @7 ~5 x0 e    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
5 @) C, ~. R2 g" u# @8 e3 I" n9 |2 a; L" q7 J  i, \
    // 禁用斩波子模块0 q4 V& f6 v$ M( T3 H8 |
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);2 Z! H5 w& |5 V$ ]4 i/ v+ w
7 |* h) W  R' D( A  v
    // 禁用错误控制事件# P* @  r$ g$ ^, o9 W
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);& u# f2 g( j6 h. ?6 x
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);; m' G, W2 P! o2 [

3 J# W; N4 x0 \    // 事件触发配置! K9 Q5 A+ P3 P7 B1 V9 B
    // 每三次事件发生产生中断
/ W% w* G/ B; \; G) L3 K6 V8 i    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);: z9 w5 @6 [/ C/ J! R1 J9 \/ y
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件4 b. h! z& o1 h) Y. |! n6 ^
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);7 b" S! V) w. F1 C% t; P7 C
    // 使能中断
, h7 `$ [# O) L    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);8 Z/ ?& q8 C, s- ]  N
( }5 B3 i; B7 F0 x4 r: J! P' N
    // 禁用高精度子模块; d0 T. I/ p; t3 C4 U7 M6 S
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
! R7 e/ i% k2 a1 b1 |) o5 [! k- T
: G: O+ b- k$ l8 D* y    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);7 P9 @. r' h6 b; ]
}: r2 q( D8 k3 @% P9 V$ C7 X, s

9 f* g9 S9 y/ i7 P' p! W& Avoid ChopperWaveform(void)- U6 A% I6 c% F% k, ?3 {
{
) ?$ p+ ~3 y; K! O    // 50% 占空比) b: B8 x. ~0 L$ S" @$ l1 v
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
" o" T) M' o9 _9 r7 d( y* x. Y    // 4 分频
" Q/ @( ]9 `& ^" t4 Y4 j    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);+ G9 O9 n0 U. ~
    // 单个脉冲宽度
% q2 p5 q9 R. {) G$ ]3 O8 j    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);+ t0 c5 i* a. C4 u
    // 使能斩波子模块
, C0 Q/ x8 ?' C; \3 C    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
! ?; o2 c3 y9 S2 f* C1 E}
$ j" ?; p2 P9 }0 P( v2 ^8 }, E# l* }4 A; A
/****************************************************************************/
& l/ {9 J2 v1 U3 y/*                                                                          */- s9 i+ l3 Y5 E2 \7 G7 |
/*              PWM 中断初始化                                              */
# o, q2 E" p& W) p. B/*                                                                          */; @! L# q) x' }2 p/ c
/****************************************************************************/( I% U- _% w: c; i& c" f: s% B
void PWMInterruptInit(void)
7 i; B& V) N6 r* i{/ `, C# p# J9 }9 B8 q9 D( _" V0 U1 _6 _
        // 注册中断服务函数
( n6 v4 \( M" a# U        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
) q8 @5 Q! v# u! u        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
$ @* ]# z1 s/ L- ?3 T3 v2 a& i
* v/ L0 i! q5 j9 }6 g+ c        // 映射中断" M; M: ^. e5 b
        IntChannelSet(SYS_INT_EHRPWM1, 2);/ E5 {1 w" p3 o+ `
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);6 W" p) X$ u) ^) T: |- T* ~9 \+ \5 {

" @" ?1 @  q3 y$ E3 U  k+ u        // 使能中断9 ^1 @# F3 F; z5 z1 h
        IntSystemEnable(SYS_INT_EHRPWM1);
  P: S* v8 r! k& Q1 v- [/ J        IntSystemEnable(SYS_INT_EHRPWM1TZ);' \0 F) D$ K* ?! j! O4 U. E3 b0 G* v1 i
}. [' t1 q9 I$ J* Z& @/ l# H

" o! l# G/ j5 S( {# \$ z/****************************************************************************/
# \, A/ V7 ^& o& G% Q- f% [/*                                                                          */+ X- k/ f( K6 E% E8 T4 Q/ E
/*              ARM 中断初始化                                              */+ a9 m" V2 R6 O+ y* r! ~: H3 I* z
/*                                                                          */
: `: m4 B/ R. r8 l- _/****************************************************************************/: k/ [9 |  y- w$ l. t1 O1 p
void InterruptInit(void)
6 Z/ }3 ]& S; r; e7 D9 }5 e4 a! y0 \{
- p* q  m+ }, D% f4 k        // 初始化 ARM 中断控制器
) g0 h: {9 s% }: {: _' J. m        IntAINTCInit();
& M6 s$ x* I, s" ~
% {7 P( M! m; W  R7 K" V0 e0 T        // 使能 IRQ(CPSR)
2 e$ J* U) K) J3 [        IntMasterIRQEnable();7 \/ P) y! m! x: A5 O2 }
; J) a  s; K& A5 g
        // 使能中断(AINTC GER)' S# e$ k+ x7 z7 F" O/ b
        IntGlobalEnable();$ C7 p1 q2 q( d0 ]& Q( E6 U. h* J3 @
) Q3 ]) }7 |% T3 n5 T  D3 [2 E! I
        // 使能中断(AINTC HIER): Y( p2 o/ H5 `/ N
        IntIRQEnable();( d; ~8 \  d% Y: f: X/ p
}
5 l) `+ r* o" ?7 d1 t
) x8 I4 J  s8 I1 c" ^
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/1 Q9 |& c8 _. e8 E% r
/*                                                                          */3 }6 L* P- _* ~# K
/*              中断服务函数                                                */9 j. \# h* q) Q, A3 Y  O! ^# m
/*                                                                          */
0 `3 t1 O) W: @% A; u/****************************************************************************/
% ]& U6 ?; n# kvoid PWMEventIsr(void)
4 f  Z6 O/ q3 q{- A( a) J/ X$ n! w' n4 ~
        IntSystemStatusClear(SYS_INT_EHRPWM1);- o: X, w4 y5 K1 n2 d7 L& Q5 K

8 v. u) r2 ^: U- P1 H" u$ H( h2 S4 M    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
$ [7 e& e% X# D2 b( j}
- Q/ v# m, Z$ P* D0 V
- ]$ Y- t% p4 ?, U# @void PWMTZIsr(void)( X- P8 Z9 D# @. Q( D9 f
{6 k8 O4 E1 a: I3 r2 q
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);8 i5 W$ ^* g7 n2 H

5 r9 R& r" U+ v& w7 Z3 R+ X& F    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
0 o* c& ^" P, Z5 w3 K8 o! ]}
' {/ c" m! _' ^0 [9 l: w* n) z' y6 G* [$ Q
/****************************************************************************/
5 ]7 x+ l- l' T/*                                                                          */
! j2 ?7 Z$ z. C+ L: W0 V7 E/*              初始化捕获模块                                              */$ W6 c( w3 c3 z/ \: g
/*                                                                          */! M$ L0 t  x! n) N" ^
/****************************************************************************/( J4 |) l2 i6 E- i0 k
void ECAPInit(void)
' ]. w7 [* j2 }0 @. L' I* p{
) `# D$ }4 M, `  q; S7 n. C        /*-----设置 ECCTL1-----*/, c5 K8 C, a, o: b5 W, n! L
        // 使能CAP寄存器装载- M" c5 {3 j: t& r+ T
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);5 `4 i' U9 O* t" P" F. P( G4 M
        // 设置预分频值.
2 f# O3 {; K9 M2 ?# q        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
/ G  v, Q) {% i$ [4 @        // 上升沿触发捕获事件( h; C" L/ N% a, d
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
/ o$ c8 _4 I+ s, n0 `        // 输入捕获后重新装载计数器值.8 ^: I, U# P8 j& g; C
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);) t# V# g" J8 A4 i/ V: |9 w
7 t- l3 m1 n9 y8 |/ l" U4 k
        /*-----设置 ECCTL2-----*/
  L) k$ {2 Y0 F/ h. \        // 连续模式
3 c$ ]9 u, _1 E6 W: O6 M        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
- ]2 J: ~: P0 w        // ECAP计数器TSCTR持续计数
5 ~$ T" m  y* X" F+ r: r        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);* L" n9 L+ B/ b& I7 B9 [  s
        // 禁用同步输出和同步输入1 ?) t0 b' Z, ~$ r5 w: j. t& m
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);: Z) _# S7 y- |4 P) h4 @1 G
        // 配置 ECAP 2 为 CAPTURE 模式
. J- N5 [; H$ y5 g) b1 o6 C3 X        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
$ C* m3 A( y$ k- W& R: r7 |0 b/ H" j7 G& `8 d  x; @( `
        // 使能中断8 z2 N( {. l) x( q  G5 T
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
/ c  y5 y7 n- Q% T' h7 J}
% L: x9 h8 j- h% y1 Y! S2 w4 P. s- ~6 @
/ D) w! G/ F# V0 r/****************************************************************************/
2 ~2 d' [/ t& B' f% g/*                                                                          */
0 K2 r" i0 s/ O* {" ?4 U/*              取得捕获结果                                                */
( Q5 p8 Y4 u  ~# |. y/*                                                                          */
- L; O: E* U- U( x- L% d/****************************************************************************/" M" [+ a9 B! z' P
unsigned int ECAPRead(void)6 c: G; e3 [3 G& E! S& n/ F2 V3 Q. [& }
{
- w0 Z+ p; q, C* l  C        unsigned int capvalue;' [# |2 w, x; o  K, h
        unsigned long frequency;! M  K6 h- n5 L0 k. a1 |8 S
6 r7 Z6 O7 g  t# J- c4 C
        // Event1 中断标志2 c+ W9 w: K0 q# h: b) w
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
" z. I6 u- e  l" ]2 s7 b        {
) _& e5 A' b6 U7 F2 H* v* \) c                // 取得捕获计数1 R+ S! d. C" Z  u. x
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);1 s- p0 s5 D4 A2 H$ l. G" `
                capvalue = ECAPResult.cap1;
' J, y0 \1 Y* s! }& L% h9 C. Y3 t- Y* [$ p4 W) k
                // CAPTRUE 模块 228M 时钟主频& [# [) h4 x; Q: `
                frequency  =  228000000/capvalue;
8 `/ g+ [4 |3 z: b; e0 O$ p                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);0 T( r: G- s4 @8 j$ Z& L
+ {* q4 x: _3 q$ Z# o9 v5 m
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);- |# `  q/ c$ m( i4 o# _& V% F
//                IntEventClear(SYS_INT_ECAP2);
! ^3 N. l6 ?$ h- U4 y' @* C        }
% t0 Z5 e( [/ ^) m7 {; Z0 ]        return frequency;
# Q4 R1 t1 x3 Z# }5 x; G; k}/ N9 W3 W, T2 F4 x: _& ?' P
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。" G9 o9 K& [. m# n. |( k; ]& C% \

本帖子中包含更多资源

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

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:30 , Processed in 0.053806 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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