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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家; X" B7 _9 g& N/ l  I7 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 显示全部楼层
/****************************************************************************/
- g: v# j/ a" s, e% O8 ^/*                                                                          */& \! p2 S; J5 @
/*              宏定义                                                      */9 U6 B$ r( K6 r5 z4 m
/*                                                                          */
. w* f$ F; B4 t4 n6 P' x1 P/****************************************************************************/
# c" m, [! s& P8 P' F- a// 软件断点+ R/ M2 Y& _0 D6 @
#define SW_BREAKPOINT     asm(" SWBP 0 ");
7 v- f& D5 g  ?: W+ l7 C3 c$ |) |. h' D" ~$ u$ I( z
// 时钟分频
! [; ]0 H$ s+ e& P#define CLOCK_DIV_VAL     228
* t6 O6 r# Y. H- C( B7 ?
: v; p' d/ g. k7 y- S/ b/****************************************************************************/: y& g- j7 z' s
/*                                                                          */
  Z2 E8 ?0 A- f. D/*              全局变量                                                    */
$ N: I; ?& J( F0 u9 b( W+ u/ @* x/*                                                                          */( R$ E. m$ r' u; N( z
/****************************************************************************/
" ~0 ]4 Z8 u+ G. v( F$ w4 |ECAPCONTEXT ECAPResult;
( I% X0 O# e% r% X# Y2 Y# F; q$ s
/****************************************************************************/6 O" f. R1 `+ a
/*                                                                          */  z& w2 Z' {' Z4 i& ]
/*              函数声明                                                    */" y0 l  p  z9 q! ]# o4 I" b
/*                                                                          */" n- u+ X7 c1 ^
/****************************************************************************/3 j: q' L6 L0 k6 W5 o/ e
// 外设使能配置& J' ?* S$ y# \; h( T
void PSCInit(void);
% A8 `* I' T: I" v* l% l6 }- m
9 @4 U; e5 t6 q// GPIO 管脚复用配置. h$ i/ f/ X* e. G) W) @
void GPIOBankPinMuxSet();
6 H+ x% M' d/ u3 @7 j( ^6 D# b7 K9 f0 X3 m
// 产生波形. c0 M; d  P( J& F7 D+ e
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);: F- H- ]% ]  G7 P
void ChopperWaveform(void);7 J1 r! @& D; i8 f7 r

, q0 m; Y3 M3 p" z// ECAP初始化和读函数" W- S; d8 f1 ?1 o
void ECAPInit(void);
" e8 H6 V3 {3 u0 Eunsigned int ECAPRead(void);1 L# h7 o, y2 @, S, P* x& @+ Q
6 [5 V& i+ |: ]% ?. `
//ARM 中断初始化& V; r% N/ s2 q* d. `* t, A6 p& v
void InterruptInit(void);6 G2 b" G9 W5 o/ Z

' B. {2 }. _, h// PWM 中断初始化
6 m6 i0 t/ i% V( a) R  i+ Svoid PWMInterruptInit(void);
  M, q7 G1 [' {+ H" D// 中断服务函数
) Z7 I* I3 h7 S// PWM 事件
3 V  N8 N; p; zvoid PWMEventIsr(void);
1 k* X. E! G9 K+ r, v1 Q// PWM 错误控制事件
& ^( O9 `! x2 {9 M0 R+ ]* {$ a6 }void PWMTZIsr(void);
! f: g& ?. n2 Y& n: m0 D
( [. f$ F* k$ [8 T/****************************************************************************/
) i- F4 a; T: \/*                                                                          */
% [) ^, E, R& Y3 W/ z$ u/*              主函数                                                      *// T2 d3 W' U4 M' U
/*                                                                          */
2 x. q8 l/ v/ ^2 G$ ^/****************************************************************************/8 Z: b2 e, p# [  g& R& [3 w
int main(void)3 Y+ f' r) M' M
{
/ M3 C, N' ]( Y7 Y! u0 q        // 外设使能配置
# G/ u' n" b9 i) t' X6 ]( s6 T8 K+ ]        PSCInit();8 I; p8 S( d" D: Z2 ~9 d

9 T% Z! h+ _/ l  A0 p9 l0 L( ^        // 初始化串口终端 使用串口2; s# K* q- |6 D  z& A
        UARTStdioInit();
1 ~) l7 _2 A: i9 R  s        ) L( K( @' ]$ _! X3 T. I  O3 f
        // GPIO 管脚复用配置% j) y- u7 o* N+ t, X
        GPIOBankPinMuxSet();9 p* A& l* P. k/ I% d8 u: h( q
* S  s# f) s& i& p
        // ARM 中断初始化
6 \+ K  g% u4 k  R. w( L7 h        InterruptInit();$ z# }! M& D: h% p  o7 ^) ^1 S

) V. N3 a1 {% N9 e% l6 K! D        // PWM 中断初始化
, O2 h- g! J0 a$ }# D$ _        PWMInterruptInit();
2 k. y2 u6 K0 P' B% g# D" G" u
; }/ l# C( Q2 p9 z1 r% j        unsigned char i;
$ w3 e! h+ N. f' V& s" f& R        unsigned int j;* w/ f2 t' y; N- K* _% D# i8 R/ L

7 R5 L6 I$ @7 H: r1 m        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);% z. ^) J# f0 E* q3 c* F
        UARTPuts("------------------------------------------------------------\r\n", -1);
& e, z9 K$ l) _7 T% e3 w        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);+ m' Z/ N6 [' \  @
        // 产生波形
9 f+ }8 _& ]' M- `* x- J6 ^! V5 Z        PWM1ABasic(25000,50);
& w7 c8 v  l, M+ |. Y* _. x$ Z
0 s! ?6 J! g6 W- b1 j7 r, }. {3 d        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
! M: ]/ _. |7 a$ ~6 J: i! Y2 f        UARTPuts("------------------------------------------------------------\r\n", -1);
4 ?; `* K1 X% X' n+ u$ g4 M. h) ]) m$ Y- u
( i$ g3 Q! x* F" r9 i

' b' V8 ~7 K) }$ b, @        UARTPuts("------------------------------------------------------------\r\n", -1);
8 x  E5 k# C% Z4 Z3 p6 h! U0 g' P. ?& o        UARTPuts("                    C6748 ECAP Test\r\n", -1);; M; ^% R. P5 L
        // ECAP 捕获初始化
( q+ ]6 b7 W/ c: j& ?! z% A        ECAPInit();
; z4 |+ ~& D( h* n        UARTPuts("Initialize ECAP.......\r\n",-1);+ }. Y& G2 F! Z: ~  H
        for(i=0;i<5;i++)6 l* E2 T3 ]' I+ R$ E  b2 o
        {
# i  w3 a6 U2 ]  b0 c: {                    for(j=0x00FFFFFF;j>0;j--);            // 延时: Q9 ^* k$ C- t6 I# o
                    ECAPRead();1 A6 D+ a. ~0 u+ N3 _$ C
        }
1 s7 g8 q+ I+ W3 T        UARTPuts("\r\n",-1);& o9 F( p* E6 ~* w$ k, W8 p
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);8 w" i$ l# I' g
        UARTPuts("------------------------------------------------------------\r\n", -1);
# E$ x: I& Z* W# k" Y& {' F5 E4 ?' H2 t" L# a+ k) Z
        // 主循环
, V: w$ f+ f5 S: S        for(;;)
3 i- `, z1 ]0 f, w% x8 V' M" P        {
" w+ i" h- p, n& f% ]; B! U9 a& r5 e! v3 k& W
        }# S  t, Y) l* s1 J) v
}
8 @# b' v$ d1 |. H% Z
' Y  e4 U* O/ J1 d$ t+ |- Q+ d; F/****************************************************************************/
$ F! R3 V4 Y& h4 G( f+ h8 v/*                                                                          */
) v2 _6 |* Q; ?/*              PSC 初始化                                                  */
) ]2 i* T! @/ b6 J7 X/*                                                                          */
  [& A5 R9 |: @/ ^* @/ T3 R/****************************************************************************/
% S9 N2 c6 D. }: g6 `' g2 Wvoid PSCInit(void)
# D8 R4 h. h+ `: P% e1 m0 D{' U* @# `: x  n2 b/ M8 \' v* ^6 T
        // 使能  EHRPWM 和 ECAP 模块# {7 n4 u8 M) I
        // 对相应外设模块的使能也可以在 BootLoader 中完成: [: B9 b/ ~1 E# @, C' T+ Y2 J
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% h$ d" V& u9 S; ~, Y  D/ Z    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
+ q( G$ h4 F: \}" W0 P: f- H2 G/ ~
7 |1 C" G- r7 \" ^
/****************************************************************************/
  b* w" G3 |& h! b0 b- R! M  r/*                                                                          */7 |1 ]2 O/ y3 `+ ~7 g1 j
/*              GPIO 管脚复用配置                                           */1 z/ H+ S5 p. Z7 a
/*                                                                          */
) X- {5 W8 |" p/****************************************************************************/, {8 k! b, [3 ]
void GPIOBankPinMuxSet(void)" {0 k& T8 b* M
{3 G" i5 E6 B7 @, L& x* v. H7 J
        EHRPWM1PinMuxSetup();
  q% h7 Q1 D; r5 o' T
% ^" d+ L0 t: s' u        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
3 [  `* ^" p; S- |0 V' ^        // 作为捕获功能时管脚方向为输入
+ J3 r* x+ V& K- J2 P5 I        // 作为辅助脉宽调制时管脚方向为输出
4 Z# F9 X- D5 ^; N1 H    // ECAP2 / APWM2' b# ?8 g9 R( n6 J, O
        ECAPPinMuxSetup(2);
8 R* p* f' y* H+ h$ p- M8 J
  A& _' i7 l" V        // ECAP2 / APWM2方向设置为输入& P' y0 u+ y6 X1 b8 ^6 K! C
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
" x8 I" O0 q6 l$ w( a( Y/ L0 c, n}
. J9 E& L$ G7 A5 D; u9 K/ t' p9 Y3 c) E
/****************************************************************************/
* E: @7 X/ Z9 r6 `' M/*                                                                          */
5 ?9 {( l/ Z, c: M! N8 y- n/*              PWM 输出波形                                                */( R% F; n  x0 {! @2 W6 R
/*                                                                          */+ x/ x8 S- W. g6 _  |/ h# r+ D
/****************************************************************************/
" X) X0 v0 Q+ p; U5 Yvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
! o* p  e+ @+ q! K  z{' U- M: y' D9 ?: D& m0 k! d
    // 时间基准配置
# l; b$ u2 b7 a$ l0 A    // 时钟配置
7 f" J0 b. ~9 q( {( D( f7 i5 u    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);* E2 `2 d( o/ c4 Q

! A$ ^( ^$ i+ U6 k% u8 H; D& T    // 配置周期
5 D! t$ M2 ^9 A' U$ }, i* p3 j    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,' f& e# l; h7 S- {+ E5 l
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);2 F5 A% j8 ?! O% Y8 x
( V( y6 |- L4 |7 S- @
    // 禁用输入同步信号
. T' K9 L9 d$ F# ~7 Y7 E; v( T    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
' W+ {0 L: P' i4 \( e4 R
2 C4 L2 N. q4 t6 N" f3 X  v- g    // 禁用输出同步信号/ f, H6 R& F1 O0 @- C
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);1 C& y  e& u8 P

* ?$ L( W( \, [4 w! o! V6 d    // 仿真(DEBUG)模式行为配置
! E) H9 \: d6 m- C6 j+ Z- l    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);1 }, y) v, h; ?9 @: [1 n$ Z
+ W! d/ _7 n3 l
    // 配置计数比较器子模块
- m8 Z8 l! f. C* d- N4 p    // 加载比较器 A 值
+ L4 c! }; N7 ?& t* }    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
# L# D! ~' e0 `2 ]9 W                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) S& ]7 a: ?5 ]9 m+ v* E
9 H) s9 \8 a# q. M$ g+ j2 o. ^/ u8 C
    // 加载比较器 B 值
. P; T' ?, y  P2 m7 ?+ E    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
/ s1 s7 B. f1 f7 [                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
! A- Q2 Z6 _  ^% t, C% i* z* X- c5 _! L1 u/ W8 c  U. S$ u6 V! _
    // 功能限定配置(输出引脚触发方式设定). ~, V8 E" M. L% b) E' Q8 w
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出) l9 I9 L) L" A/ @
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
0 g0 I( S% I7 m8 ]                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,$ F! Z) Z: q& I
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);# v0 T) ]6 [# q% G# \

3 r$ U; v$ O! J: \2 X" {6 I# K    // 禁用(旁路,信号直接输出到斩波子模块)死区模块. S( G8 K/ {3 j: @0 x5 R
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);. d, I9 ?- P6 |( v* e: H7 `2 d# Z0 [

# r8 [8 }3 p4 H& N* R8 E- Y    // 禁用斩波子模块9 R" g) s, d4 i2 S" v! |, q6 e
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);4 l4 b  k* q5 R
: ~" j6 G+ B! [, g: D
    // 禁用错误控制事件
* @5 K, d3 ?7 H/ {5 h" a7 o& `4 B3 N    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);7 n8 W9 Q: S! h0 e
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);1 K* t: }. L+ p- }4 X: N
/ S5 l9 S& A; z% ]
    // 事件触发配置+ b  \3 j8 \/ g& Y( D" ~/ `, E
    // 每三次事件发生产生中断1 H7 a8 r1 V. x0 F1 M8 O* z
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);* M5 ]. t- w- x) Y  Q) C
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
: v! ~1 ^, g' q8 f9 |9 `8 k    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);/ ~! f6 i& R& b* ~* B5 }
    // 使能中断' A0 z/ {2 `$ Z5 l
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
) Z$ {( Y/ a4 N/ t# A+ B( S: P/ {6 H8 j8 y! a
    // 禁用高精度子模块5 x; P- z2 S; ], w8 P$ v9 ^* Y' c5 R" s
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);1 b3 J/ `0 x6 {+ b& {$ O; y
. W9 \1 {) f6 ?
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
% D3 s  W; g* ~/ ~( W# g" |}; E* v9 [2 U! s+ l) p

" W$ ^5 ?; E7 L' l. w; yvoid ChopperWaveform(void)
4 X+ }$ w) u. C; F{
8 H: ?1 q, \8 q9 u! q    // 50% 占空比7 @9 b# `8 E5 I7 `# a# U! O
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);6 Q$ I+ t( A' l2 A
    // 4 分频
1 f' n/ v0 x, f4 t- b  t: Y0 t    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);  y* b4 o' O2 c' A3 ~: a3 a# w0 o
    // 单个脉冲宽度4 K7 Z6 m  I  J- M9 p& F0 f2 k0 N- c
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
, v5 J$ F' c! @3 }" q4 _5 b3 n1 \. n    // 使能斩波子模块
4 ?4 d, J* O' x) t: W& _) ^& k    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);7 k7 O4 B- M( m
}2 p, \- A, S4 E6 ^

8 |9 u" i" ^4 l5 m; Q% c* o, a/****************************************************************************/- `0 e- V/ a5 j4 i7 z. R2 z
/*                                                                          */
0 ^; M: D; {/ j3 u/*              PWM 中断初始化                                              */
9 r' y4 t# e  i7 I  i% _" u" b/*                                                                          */  y. B% f0 c2 [7 H$ {
/****************************************************************************/
# Z. R; F  Z2 H& {void PWMInterruptInit(void)3 g5 N5 k5 S/ x: w+ \
{) t- o$ b' P5 |( P" y
        // 注册中断服务函数( r0 c7 [/ J" X" x. T
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);) P! C) @) H5 s/ r# ~3 f! U
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);, z  f+ e" s0 O$ t7 P% n2 {

' S  V+ ~0 p7 f3 ~9 [% J        // 映射中断/ T4 b4 T( r" c. b* N/ U
        IntChannelSet(SYS_INT_EHRPWM1, 2);
. I, [) D/ N2 x. N- F        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);) J6 _/ Y- J2 A) A1 Z* v- L
4 E* c6 ]8 ~/ O: {& {# c3 Z
        // 使能中断# T$ O2 g! t! y9 z( S! i
        IntSystemEnable(SYS_INT_EHRPWM1);9 i$ J3 b( s1 e% G/ R2 L* |) R6 A; ^
        IntSystemEnable(SYS_INT_EHRPWM1TZ);  }  }& J. B0 s
}% X) r% v" v( f* ~3 g
+ X' s* ?! D0 x
/****************************************************************************/) s1 b. S$ ]5 M) k$ t9 @
/*                                                                          */
, h2 U. n* R' F; t+ f) `/*              ARM 中断初始化                                              */. M( O& J6 r! L" d/ u" U) ]5 X+ G9 H
/*                                                                          */& [7 i8 F3 m! r. ]: a9 v7 g
/****************************************************************************/
4 \1 L* M% k2 m; y6 Ovoid InterruptInit(void)) b+ k' b4 z  s8 D3 A
{$ E8 z8 X9 N! o1 w5 ?2 a
        // 初始化 ARM 中断控制器
4 Z( E0 C2 F/ @+ Z: l; T        IntAINTCInit();
* K  I) @. N  y# J
. b4 m& V) r3 m* u& _        // 使能 IRQ(CPSR)  t$ u1 g+ V9 j( c; ]% W% ~, \( C7 B9 L
        IntMasterIRQEnable();
6 W  U9 a' z& k4 B# h* V/ S: L( D- Y' I& w2 B$ Q
        // 使能中断(AINTC GER)
& C0 B, b2 N' Z) X' a$ P( C4 G        IntGlobalEnable();
+ A9 y, l7 w( r! {! v2 z+ X# g
" {% L" D- w$ n! Z        // 使能中断(AINTC HIER)! F- n. ?- O, J: t! q5 g7 N* X
        IntIRQEnable();8 ]+ k' }* p) I  u3 _
}
/ n& }. [+ G; u' m7 \
/ b8 ]: e" m7 L8 S  a! q1 D
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 显示全部楼层
/****************************************************************************/5 K: ]& r, p: y$ Q5 Y# j& c
/*                                                                          */- e1 a. _2 Q7 ?' e) n2 T
/*              中断服务函数                                                */
  {9 j; ]: ?9 H2 [, J/*                                                                          */
4 [$ i# c" u5 @; `$ A6 j/****************************************************************************/8 g; C! {$ D. c3 L0 A' ~/ Y
void PWMEventIsr(void)7 {9 ~- d5 Q# T5 I
{7 _) C7 F* R0 j! t) {1 C0 p
        IntSystemStatusClear(SYS_INT_EHRPWM1);
5 m  a2 g+ V8 L% B* g' L8 ]; n3 |& s: d' l# {8 O- e9 g, K
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);; z% |3 g2 \3 G3 [% s( `0 J! f
}) E2 T6 q; Y  m  N
+ |- d: |  |/ L- X0 I1 l
void PWMTZIsr(void)
/ S8 t# M7 ^$ s. N% ^- {{
% ^/ L) ?: |# j3 ^        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
/ }$ w- g# ?% `# O# }$ U4 P8 S& F5 ~0 M3 {. W8 O
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
8 y9 ]: H: J2 S}
: ^# B7 [1 B9 o0 ~6 R% \1 Q9 ]
/ J7 ]4 Y) u0 r  U: u+ |) I# T/****************************************************************************/# W% w0 C" W( n( }& i" |
/*                                                                          */
7 H" j. ^8 S$ R5 g! a8 A/*              初始化捕获模块                                              */
  u/ K1 }8 e8 k+ k' P3 p/*                                                                          */9 g& O7 s1 j1 X& z6 j: z5 V6 x
/****************************************************************************/
- ^2 R0 Z0 f2 tvoid ECAPInit(void)
5 W7 \! _& _+ k8 o  f9 Y{% a# e6 }0 |5 n1 Y  g& h
        /*-----设置 ECCTL1-----*/
+ l% \4 p2 e5 P$ _8 {. a, d        // 使能CAP寄存器装载$ A5 P' W  j3 R; J1 u7 u1 @6 U6 y
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);* G$ i$ ~) [9 z( B" ?, j* \
        // 设置预分频值.
  l; ]+ {* h* M7 Y) N        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
& H% O* k' B* ]2 e9 ^        // 上升沿触发捕获事件
% B1 Q  |# S* l. C7 ~2 H/ Z. B0 V2 [        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
3 g' q6 X, |% J! \4 N        // 输入捕获后重新装载计数器值.0 f, t; Y0 n+ c
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
9 t' B% j9 Y/ w& f2 _6 B8 s' F! j/ E
5 E9 K- c  t2 g0 @% x1 e        /*-----设置 ECCTL2-----*/
9 k8 U# L8 L8 U6 t4 p4 k        // 连续模式6 @, G& _, |+ R: ~! n
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
8 r( z* P, Q5 N1 Y0 s6 r8 ^' _( j+ O        // ECAP计数器TSCTR持续计数3 n, G4 J+ R* j
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
( F: d! _/ I- \9 t, s        // 禁用同步输出和同步输入0 W3 L$ a( Y/ b
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
! v# P5 S  X" Q4 O        // 配置 ECAP 2 为 CAPTURE 模式
" j7 I: C% ]  L3 ^% H9 Z3 V1 s1 g3 A        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
0 _. h' g1 c& s( E
4 @* L( B1 }5 d- s        // 使能中断1 @# [& i2 k. l; u: d4 k+ }8 t
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);5 \( w  J1 ?0 w1 K' ?' p
}1 r! V" N5 O$ w8 \7 ?* l- J
6 U5 r# Z9 j1 x; d( b$ |
/****************************************************************************/4 k# Q1 H! T8 J8 F- M7 c
/*                                                                          */2 Z: B6 t) o" }* d! U
/*              取得捕获结果                                                */
# k" W7 {, m8 S. P/*                                                                          */
) l! I: D0 R5 P# H8 W( w# w/****************************************************************************/
) U0 L9 Y/ q. @# D& E7 yunsigned int ECAPRead(void)# l- o! A: U8 Y7 b9 ^
{
% s8 B; V+ Y+ R! y! T        unsigned int capvalue;
+ d! r5 N4 c% z; `. x        unsigned long frequency;7 ~: i# c- |# k: K6 b0 A

4 f, K6 S+ m# I' a$ s+ h        // Event1 中断标志% B; s! ?& ]* {7 [: }" _
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))/ _& Z% _# g( z- s3 ?, W
        {
7 m7 h+ q" v8 J! y5 p                // 取得捕获计数; l0 [( M" E; Q) o5 y# F
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
1 s8 {; \$ j( e                capvalue = ECAPResult.cap1;
7 F# Z% [* j3 I# f$ r
' L3 T+ R! g2 W8 u2 j& t+ Z: y                // CAPTRUE 模块 228M 时钟主频' M5 \+ G- W$ A. N& Q! `
                frequency  =  228000000/capvalue;
  ]7 ~4 N2 l1 K) x                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
% u% r( w# x. t# a4 e. B. J  R# b+ ^5 K- Q  ]$ H; o
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);; o) E* Z- _$ h
//                IntEventClear(SYS_INT_ECAP2);* t$ `/ u4 Q* \  Q
        }' n7 \; Y3 @5 _- F6 N" k
        return frequency;
! `* k/ a4 ~; |9 z2 E% v: ^}
2 V& j7 ?$ P) M/ H
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
地板
 楼主| 发表于 2018-10-30 17:58:06 | 显示全部楼层
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
5#
 楼主| 发表于 2018-11-1 21:27:34 | 显示全部楼层
可以给我发一份吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-5 08:15 , Processed in 0.044608 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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