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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 显示全部楼层
/****************************************************************************/
* L4 j1 O  F4 F* J  m4 H# f/*                                                                          */
9 R) z" v6 R8 i/*              宏定义                                                      */
" ^0 c4 m! d, V5 L, x4 Y4 t/*                                                                          */
  V4 D0 X, z, G8 B- k+ ?- a/****************************************************************************/% v+ b- `- f! `+ i8 V
// 软件断点$ i/ U: q+ ]" I" P- Y
#define SW_BREAKPOINT     asm(" SWBP 0 ");+ z% L5 l  B' ^2 l: l5 W  T

* X* H1 M# @% Y1 Y3 D5 u// 时钟分频
8 H5 c. A" }7 s6 |#define CLOCK_DIV_VAL     228
# M6 y( _/ t# j$ M5 d/ {7 d* U! O3 E. p2 B" x% |% B0 A
/****************************************************************************/
2 d/ K1 Y. q! l" t/*                                                                          */
; F: A! z# [' k% S5 K1 `/*              全局变量                                                    */
; `6 x1 r9 H  R6 F* i/*                                                                          */
; g  `5 U3 D8 d( v/****************************************************************************/
& @# {9 J7 b2 |: r/ b9 F$ iECAPCONTEXT ECAPResult;5 e% q# q. @' {; F8 ]
2 m, W; W. k6 f8 p- p6 p
/****************************************************************************/
# Q5 K0 ?% F0 d5 Y1 m# j/*                                                                          */
* Q0 N/ K& F- \& g5 w/*              函数声明                                                    */$ z9 D5 ~' P7 f9 c4 ~0 ]( O- |
/*                                                                          */: J4 E: U+ o9 l! B" H
/****************************************************************************/
: u9 Y, J" v" K0 a// 外设使能配置
. H9 r5 H6 v0 f, m& o* Xvoid PSCInit(void);" T1 X( x6 Y* p# F

! L, `% p5 z$ e# y- G// GPIO 管脚复用配置
; h# w4 }& h% j: f7 svoid GPIOBankPinMuxSet();
! _; _: ]* h6 |. p, C5 N4 C4 Q
9 X6 ~0 p9 L7 F+ ?, w5 @// 产生波形: M5 Y) j$ p3 I+ [& I/ X
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);3 ?8 d5 G1 ]* m2 K4 [
void ChopperWaveform(void);( {& N) N* N3 M2 D7 _
! a  W7 @% j' M4 T& ]$ ^! n+ m
// ECAP初始化和读函数1 t. f8 G. o, ^: o
void ECAPInit(void);# E1 {8 i: T8 n
unsigned int ECAPRead(void);
2 N0 |* w- N: i
$ l! ^; [" b7 A# X4 I//ARM 中断初始化7 T6 }9 l# O7 P, z! _, X! }
void InterruptInit(void);% a3 \6 j, V! R/ X- t9 ]8 H$ o* `  g
9 Z, @% P+ z8 y# a: v% L4 V; @
// PWM 中断初始化
, S2 B5 {3 d7 {" C+ S# G" t) ^void PWMInterruptInit(void);
0 B: n3 X: \% u// 中断服务函数
3 z8 ]; U' v, f/ F// PWM 事件# @8 ]8 S! z; _* [1 ~
void PWMEventIsr(void);6 e( f" m6 X5 A. b: ~8 F
// PWM 错误控制事件
" t8 g5 r4 v9 |. a+ vvoid PWMTZIsr(void);
7 b% Y6 O# z% Z/ ^/ \( N
0 U& Y# S/ D7 `, n0 U/****************************************************************************/
5 `/ W( q4 m1 I4 P7 }1 [4 B  s# d/*                                                                          */
6 L! e' v+ Y6 o( k# V9 u8 s- e+ ?/*              主函数                                                      */  U* \1 C4 Z8 f8 V$ J; L! {& f
/*                                                                          */
( F# `% U" g* }7 G" c4 c/****************************************************************************/
/ C3 @2 y$ t' d( M9 R3 [! |int main(void)
& H* I; e! e' g. x: Y{2 |  c8 ]' ?1 f+ }5 t, u3 |1 e
        // 外设使能配置: r& b/ k+ G1 U, D2 h
        PSCInit();: T8 S# f, N% q/ j9 |7 p2 p' G

3 k# D. a1 `6 D/ l% C        // 初始化串口终端 使用串口2
/ X+ E( v+ F% b$ ]        UARTStdioInit();
& n* t7 W5 h, p' x$ G  `. c: _       
% y* \3 ~& P4 C8 M% s6 F; v* Z4 `        // GPIO 管脚复用配置) L2 |4 x' n) {6 Y7 o9 A
        GPIOBankPinMuxSet();  k/ G% y$ S" g$ x1 x- r
6 L* q  Z8 m6 _/ ~
        // ARM 中断初始化+ `/ R* u2 r9 E/ M
        InterruptInit();* x/ J9 d* ~4 z2 |6 q' @- ~
4 b& e/ K4 n1 r* N! p4 m$ N
        // PWM 中断初始化% Z  d" K* w0 @7 R
        PWMInterruptInit();
* }2 i4 g4 l, G: _' i1 {
8 [& u8 ]0 w0 R+ \9 m. \3 H        unsigned char i;
2 d5 `, K- Q0 P; j6 m4 N        unsigned int j;# q0 @' n3 _9 m$ R" |" O- T* r
" J. i" P% {0 `- @3 L6 m
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
# K0 ]0 n+ v  R$ W  l        UARTPuts("------------------------------------------------------------\r\n", -1);; j; ~9 c4 v2 m" D  }
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);' d5 e# _  X9 k5 o
        // 产生波形
8 ]$ W! u/ P& H        PWM1ABasic(25000,50);# y6 p; O; K. m5 x2 a4 G
) d2 e# k8 \0 U4 Q7 e6 f
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
+ Y9 \/ _+ f  \7 s4 o. a- g  M: i# i0 F        UARTPuts("------------------------------------------------------------\r\n", -1);6 ?* [! r! `. q* C4 ]# {) ^

$ x, e! k' k# y8 M& E) ^6 W' E0 c7 z, w0 g7 T7 g
; B0 U; [. _8 i# p7 n: Z) Y
        UARTPuts("------------------------------------------------------------\r\n", -1);
4 G% `7 Q4 Q+ j* z1 }        UARTPuts("                    C6748 ECAP Test\r\n", -1);' k+ j/ b- }6 \0 L. U- d' D4 B
        // ECAP 捕获初始化
, y5 v9 {2 }: \        ECAPInit();
$ a6 m) N% H& j( Q) [2 |5 R2 s        UARTPuts("Initialize ECAP.......\r\n",-1);
: s% l7 Q3 x" ?6 q# p8 M        for(i=0;i<5;i++)
3 [& Q; K4 i8 `* ?1 D, [        {
& m0 X, s* o+ P9 P. I/ G                    for(j=0x00FFFFFF;j>0;j--);            // 延时
' \+ N. n) B& l& w5 N, K* r: A6 d                    ECAPRead();
4 r9 M+ h; w$ F) Q/ k5 e9 ?        }
+ p/ M9 A* Q7 \: \( _& N5 R        UARTPuts("\r\n",-1);7 W2 {9 i$ T# P7 T  }2 _
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
8 R; [' y3 E/ |- J- t) \        UARTPuts("------------------------------------------------------------\r\n", -1);  A5 ?# V! E# w% ]2 [
* \# a) ?9 i2 Z0 I& v
        // 主循环  w. \. W, w: E. u0 d" i
        for(;;)) r: c/ P" b+ U. q7 {  V! Y
        {( c: ^, D! A8 `4 ?% Z
/ J  ?2 Z& h5 p6 V
        }
: t; [3 ?5 x! ]% Q* Y. ^}
7 X% a9 S1 Z1 ?$ V
; n8 z  k* @5 A8 H8 m) r  j& X) p/****************************************************************************/' h4 a. A9 Z2 t+ d
/*                                                                          */  F  P0 X, ?( u8 M4 |/ T. ?. a
/*              PSC 初始化                                                  */
6 d4 `7 E, e( `# ]0 H0 I& P/*                                                                          */
* ^" l5 T+ F3 i/****************************************************************************/) f* G' }" L2 O9 x& h) z8 v3 d% Y" V& o
void PSCInit(void)
* L9 D5 T$ x/ p6 l% P# I& v1 t$ Q{
1 v* {9 s* k3 i  R9 T9 i: h; w        // 使能  EHRPWM 和 ECAP 模块9 B1 e' L. `4 A2 |) o
        // 对相应外设模块的使能也可以在 BootLoader 中完成8 P) t! }2 D  D4 \) t3 Z' Y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);& m$ w* h& N% }" r3 v+ r' b" [! T
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);+ L6 S9 l2 m$ n. U. w: L
}
& W2 Q/ T5 K! B+ {1 X# c' b4 c
: C/ s4 a" I/ x0 ^0 t/****************************************************************************/
! P2 e' e$ S# g) B1 K. Y8 K/*                                                                          */
  V' `. ?0 X+ ?6 L' @/ z5 h* {/*              GPIO 管脚复用配置                                           */
! s8 v' `$ p' z: e/*                                                                          */" Y, ]. F* d) |. d! q& J4 Y" t- C
/****************************************************************************/+ H/ n0 ?3 x+ P8 r8 ?
void GPIOBankPinMuxSet(void)
5 h5 {; d( L% A' k; k{6 X4 o( F) H2 [* @& t$ c
        EHRPWM1PinMuxSetup();
4 E7 @& i, G$ d/ D/ P1 p( x% E0 M' d
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)  \7 I, U( L" X$ X0 b8 e
        // 作为捕获功能时管脚方向为输入, \+ v  W/ M- J( z6 _( d5 B
        // 作为辅助脉宽调制时管脚方向为输出
6 C6 [# A4 ]' @7 K, o    // ECAP2 / APWM2. B5 d) g$ q, t5 i0 S( N' ]
        ECAPPinMuxSetup(2);2 p# K7 Y' L4 Q% y. X3 W( @6 }' J

. C2 F$ T; [' Y! V3 a: T        // ECAP2 / APWM2方向设置为输入0 |) d5 E' k0 Q2 h+ I
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
1 a: r' O; R" ]3 @}( [1 G! S( |3 F4 T+ C3 C

' e$ `. N2 b3 c7 u/****************************************************************************/
) U9 y. i1 O) M" c& F/*                                                                          */
  ]6 A/ ^, o+ ?& m1 |2 c2 t) v. \/*              PWM 输出波形                                                */  k, F# N$ [2 J- G6 A) }4 I
/*                                                                          */
" M+ _; j( y+ Y7 P0 {8 h5 O/****************************************************************************/
: p( r& y+ S/ R2 vvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
1 o( _9 q% o. e" a3 h% `: `{
3 ?. E2 B% j& @9 F/ |    // 时间基准配置
$ z( h# ~5 h5 m# O9 x    // 时钟配置+ E3 U- j& n+ ^: A$ t
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
3 j9 O. H) ?5 ?/ T3 Y  U% V1 T( Z8 X, e: E
    // 配置周期& a$ ^6 v, d) h9 x+ S( g
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
0 E/ C' x* z$ i# o4 m) n9 j                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);( G- s# e  k: n7 _1 a7 `" z

: L* A: k2 p4 v/ u& r8 Y' G' A5 ~    // 禁用输入同步信号
: n% E" \% [: Z7 P: L1 O5 X: j8 d    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
# X, N2 E9 }* f- F& L4 R( A
- A8 I5 X4 k6 ]! _, ]6 L( l    // 禁用输出同步信号
0 R- G  f8 I! m( p4 s    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);8 Y2 q, l6 J0 B) J% T, m* U
5 P/ Z: r! I8 c8 Z
    // 仿真(DEBUG)模式行为配置
6 H6 ^* y' B  [/ p  j/ |    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
: G' v, n+ G- h; F; z: {4 y& v
7 F: }5 G7 E8 y8 G: Y    // 配置计数比较器子模块
' ]! s) V. c3 S    // 加载比较器 A 值
0 i" U) w6 b% w+ h    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,9 R* N/ S) m) l/ X; r
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);( ~  Q' v6 O5 G/ D/ z5 U
1 o+ v3 }: E$ V- d$ Y  E! y/ ~, m- u
    // 加载比较器 B 值8 B# |/ z9 Q# M3 y; L7 b
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
& q7 ~  b: m) n# S0 l) u: b* A                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);0 ^" {' @; U) D- G6 v
) K& ^. s9 y+ y
    // 功能限定配置(输出引脚触发方式设定)  M7 a. j, ]& x+ h  j
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出/ D+ l. I; l% x  L3 G8 V2 f
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,6 B! s$ n' ~5 b' Z- w$ I
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
- P3 v0 ~( E4 z$ A, e/ A" w                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);9 B7 D8 g: J6 k6 F% `

+ S- `" P7 g, T/ a2 L* a' M8 y    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
7 c9 P) B# Y0 x2 f) W    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
! Y% ?2 O) }) s2 O9 `' p  O2 L# Y' F3 a' b3 }8 w
    // 禁用斩波子模块+ m* E) P& a& \& O% i% B0 h
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
& u# s! H0 ~' {" d+ Y, U! ]# L3 o
    // 禁用错误控制事件
) ^5 z, S- J! @/ ~    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);+ a) b3 Q# W! |7 s4 T) H
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
# U+ m. l, u. E, Z
& h5 ^$ `2 y" O4 I3 i    // 事件触发配置
2 z8 q! X$ l8 j8 y    // 每三次事件发生产生中断6 W2 `5 G7 E1 e9 P. N
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);3 r; Q0 h: x0 Q
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件' }: X/ I" L7 G, z
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
: A1 f' i# D' Q. f    // 使能中断* D8 Y  S. `0 s2 a
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
* r: c! @9 X$ @) H7 y/ w
! e) A. i/ a0 e9 S' b    // 禁用高精度子模块
+ r& Z# s3 \) K    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
) }" [9 w4 T# `: E- o; P1 _
9 m+ _: H/ |% p# J; X* y1 m# x" L    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
  r2 O( N9 A1 {: |/ W2 `; J# d}
9 a9 t, R% ]- g' T4 @5 v8 s9 r3 j
2 n1 J7 C; K, Y- v9 X2 kvoid ChopperWaveform(void)# G0 B, r- I- g! ^# X0 ^
{
1 ~4 ~1 z* c: l; E0 ]    // 50% 占空比
6 p& S9 j4 i$ G# U& B( N' k    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
, d9 @1 D# b+ k6 D% U& z    // 4 分频3 X5 e# }4 Y1 P4 R% r3 R" n
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
" Z+ l4 _* V% L  y! E    // 单个脉冲宽度( j6 g& Y. _* l( x, c# T9 `/ Q
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
8 i, O' Q+ ?3 Z' u9 r( W    // 使能斩波子模块8 o, c7 G, Y0 ]2 E' m' M, u
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);9 J& a1 S# h" E  E- N: z0 @; \
}7 X/ x* t" P. t2 v9 V
  }3 \* t2 ~" i3 l5 \- F9 d
/****************************************************************************/
: j. o' A- ^' Z, k/ |/*                                                                          */, I2 E2 ~9 r% r4 x& f3 T
/*              PWM 中断初始化                                              */: M' T! h1 M! i0 [0 A4 R! D6 e
/*                                                                          */) p! V) \, t" {6 g6 k
/****************************************************************************/
- h/ h' j0 O3 u( X" b( ^void PWMInterruptInit(void)9 b5 @: V( r/ q0 l. A
{
/ M' y& q" @: n7 g# U        // 注册中断服务函数
+ S! F, ]/ [2 X& i9 m. n' W        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);' J( W% A( o  [! P# ^' B* p
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);5 K. v* @# V/ w4 u/ u7 s/ H7 I
" @/ A# B. j; E+ A
        // 映射中断
$ C+ C( M3 w8 s- P1 c5 P        IntChannelSet(SYS_INT_EHRPWM1, 2);% ]4 B9 t0 P6 _7 e! o2 T$ h2 i
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 M- M* J' s1 G; m2 v( K* E2 U9 q1 [* H6 n* ?
        // 使能中断
. ^3 q- w/ P2 q        IntSystemEnable(SYS_INT_EHRPWM1);
/ F& E# U9 ^2 ~& n4 N        IntSystemEnable(SYS_INT_EHRPWM1TZ);7 X  D5 J1 N: @$ K
}0 [# x1 t5 G; b# ^) I( F8 `9 Y/ w

( k0 }6 C% n! ]$ q9 X. q/****************************************************************************/
/ o7 z5 J% s. R1 {. u# n/*                                                                          */8 N- ?" U7 z+ C; k7 E# y
/*              ARM 中断初始化                                              */2 Q/ @+ E$ w0 ~5 Y
/*                                                                          */
2 l8 ]. c# U4 {( y/****************************************************************************/
0 o- Y2 k: @* bvoid InterruptInit(void)- c* F$ l, p! ~. t4 \4 u# e
{, P7 Y; v1 q+ A
        // 初始化 ARM 中断控制器, ^9 C$ s1 j/ M9 ^7 ?% f
        IntAINTCInit();" l+ f8 P2 l' a5 u; M/ ^- Q
3 v7 A' d7 |+ H9 k& J& `" X
        // 使能 IRQ(CPSR)
- j& d5 a# A( |% A8 Y        IntMasterIRQEnable();1 j! ?/ [. A  h6 [, |& h

- T  o2 M! H5 M$ Z% g* u        // 使能中断(AINTC GER)# @; p/ }) B! k, F6 f
        IntGlobalEnable();+ Y9 Q& W; c) h4 ^6 j7 n! c% \" p
, u$ h2 @- u% f- s( {
        // 使能中断(AINTC HIER)
  {$ z! s4 g6 E# N3 v9 R        IntIRQEnable();" `/ e; Y: _$ e' l) M$ o3 R- @
}7 f4 ?: m' ^; b

4 _  L4 J$ u( t/ k
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 显示全部楼层
/****************************************************************************/
; O7 z6 }8 `/ l& m- l9 D/*                                                                          */) O* r  \. `9 i0 a3 f) {( i
/*              中断服务函数                                                */# l8 F  E& A& T7 k+ i; W4 n
/*                                                                          */, H8 M- V* p6 G+ h# A% Y
/****************************************************************************/
' U" m- P  |! G: ~) H# Evoid PWMEventIsr(void); C6 M! M% a; A  [1 o% L
{* e; D! c2 y9 I$ W1 U3 }! R6 a
        IntSystemStatusClear(SYS_INT_EHRPWM1);- S0 ?) }8 P) i- }8 T7 d# V& |
; t0 P! K+ R! f$ o9 z% A, a% ]% W
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
. x2 }# W6 k! q( E  G}1 g* Z% Y, a% ?

' U, [) q2 ^. dvoid PWMTZIsr(void)
/ \0 H1 O* w! @: T# a{
, R; Q, Q8 L: p; [: Q/ H        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
/ T, ~8 J* F- ?  z# l0 ?
9 L1 K4 a5 v* ^2 E    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);! P- L' y- S, U/ L
}' u; i9 a. M3 X! ~1 X( q  N
9 J5 C$ o1 [1 |" D7 @
/****************************************************************************/
% Y$ _* W1 F" H: E/*                                                                          */
- D' z+ V2 ?8 {3 o/*              初始化捕获模块                                              */! }! L* @& E6 u
/*                                                                          */
0 I9 B  c" N' a1 G3 k. l8 u7 ~/****************************************************************************/4 }! [6 m3 l, w. u8 u9 C
void ECAPInit(void)
/ m. d  q1 Y) v# {{
" @. Y  F# A) w+ _  t0 y6 L* `0 p        /*-----设置 ECCTL1-----*/  p% ~; ]5 {; p% n5 D
        // 使能CAP寄存器装载
+ b/ H/ @5 f: }  d+ y/ d        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
: f+ q  Z" q1 i% G5 T: J        // 设置预分频值.+ f) y" ^% _; j4 |% b2 C5 @9 Z
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);9 D  o3 B. W( e( d. m: s$ _
        // 上升沿触发捕获事件
- r3 e; e# c; m( J        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
/ R$ ]3 s, G' k2 t+ x        // 输入捕获后重新装载计数器值.
! {$ @; Q' f# d7 Z" c0 h        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
* c4 y9 ?7 P% S3 P& E1 E! M6 r# e# y9 ^7 {, ?( V' i  {( j5 e+ y
        /*-----设置 ECCTL2-----*/
) @9 F! X2 v' h  @6 b- B* x        // 连续模式
2 D" u5 s9 K  S3 j+ N3 a# n/ }        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
; j/ ^( j6 V2 }3 B2 p        // ECAP计数器TSCTR持续计数
5 G* Q1 O- \: {7 ~! n        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);6 D9 s9 ?1 w9 _" B( c& d
        // 禁用同步输出和同步输入% [. M; N! C/ G
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
1 y$ s3 \8 A8 c5 i8 o* f        // 配置 ECAP 2 为 CAPTURE 模式
. v! O& `0 ~2 H' N8 V' s" i  c        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
1 e; W! w* T! M0 l: I- Q  g# |% L% A; v3 \
        // 使能中断
1 w$ D7 B( G( [; L) L//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
( o! s$ D6 W# v* Y2 o- u4 J8 {}
# u/ ^9 Z) ]- A  r$ P0 \# ]. u2 P
/****************************************************************************/
( o2 g5 D. X2 w3 x( [/*                                                                          */
- L, O+ z2 @, T. @! m5 A/*              取得捕获结果                                                */' Q1 j; j+ U7 W( m
/*                                                                          */
* b, P7 `0 N' J/****************************************************************************/' V' q" ~" q+ Z, I  `. Z  \. K  P
unsigned int ECAPRead(void)
! v: g8 Y  F+ Z" l{
* B) x+ ^6 D8 B2 y' Y( o3 q: [        unsigned int capvalue;9 l) [; d: ^2 }3 i& s: @
        unsigned long frequency;  B' ^: U& w7 p" F# n

7 X4 T" A9 U9 w0 Y! F        // Event1 中断标志
' ]5 @. Y6 ]* x" }: y        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
( k5 m/ E0 s* D2 r6 Z5 L" W        {" w4 ~0 Q& t+ S0 o
                // 取得捕获计数3 w6 D3 X2 C: ]0 z3 \& h5 S
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);" C& n* D- V1 c' |, K1 }
                capvalue = ECAPResult.cap1;
. N6 K( n- G, [1 S8 F0 _* T
4 O2 J+ }5 {7 E+ C+ L- |                // CAPTRUE 模块 228M 时钟主频
0 C4 W& j  c* N/ w9 _# W                frequency  =  228000000/capvalue;
$ M  z. b8 a. }- ^                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);& ?+ U# ~, _: W3 @
( L4 j  {& p  v1 L
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
* d6 x* H! O3 ^% ~7 A4 _; G: E! b//                IntEventClear(SYS_INT_ECAP2);) ~0 |. \, y( G9 T6 t' A) h1 j! ~
        }/ A- A) }* ^' i" L* J, G6 Z8 _
        return frequency;
, a9 q- a( }! R}6 ]# ]8 d; G* o5 q$ j2 Y
回复 支持 反对

使用道具 举报

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-6 21:49 , Processed in 0.044254 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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