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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 显示全部楼层
/****************************************************************************/
7 d2 J% B/ k6 V; F$ _, O/*                                                                          */! N3 I+ q4 }. @2 _
/*              宏定义                                                      */  |# R& {  e) G3 b+ F
/*                                                                          */
. d' X) p! ^* N/****************************************************************************/7 g& G1 y, O9 x. e
// 软件断点
$ T5 O; w  D( ^; B; B#define SW_BREAKPOINT     asm(" SWBP 0 ");8 g* F+ i- V: c; n
1 m% j- j" z% F: U8 a
// 时钟分频
- b4 I; w/ z8 X! K) }#define CLOCK_DIV_VAL     2282 N/ l" _% r' u
* ?$ ?4 \- X4 v2 o2 k" }$ F
/****************************************************************************/
* ?6 C4 ^9 x1 u& Z; T/*                                                                          */: g! V2 B+ V5 E9 W. J
/*              全局变量                                                    */4 D0 J; e  M; K+ i8 C4 n
/*                                                                          */
6 s9 ]+ d% y+ _: A6 ]) C; U( E/****************************************************************************/
% u- M1 l* x( |& G$ TECAPCONTEXT ECAPResult;
' {$ j2 b1 r- x4 e6 W: W/ j# Q1 F0 T: o
/****************************************************************************/* j( z7 x" [0 a* b* Q
/*                                                                          */, Q; F* ~+ i3 t  P1 ^
/*              函数声明                                                    */# S$ W$ s& E5 G1 _) e% X
/*                                                                          */
( z: Q0 G5 B" S. J% x. b! w/****************************************************************************/+ `: j0 d* ?1 t7 T7 L2 o
// 外设使能配置1 J$ T! A* c9 H$ k' n; d
void PSCInit(void);
8 R4 U0 b# Q( ~- t  g0 @5 E. I! J& t$ }
// GPIO 管脚复用配置! c" R+ s0 f2 B" m0 P: ?  |
void GPIOBankPinMuxSet();
1 k8 e: m6 i( j, |& {, F  F0 S1 g8 r2 {% C! @7 o3 ]
// 产生波形7 U; m4 |" g3 w9 M. |
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);  j2 l/ d# i8 [1 m7 p  P6 G) j
void ChopperWaveform(void);
* [# u) \* ?' g% m& A* w7 `6 v) k( [" l, @
// ECAP初始化和读函数
7 p# v' F. b* Z# T( }; I9 O% c$ fvoid ECAPInit(void);0 I9 L/ ^. u% w
unsigned int ECAPRead(void);9 J2 Y5 J. _8 S* I. t6 P+ U
4 a! Q4 l9 |# x/ x  Q% B+ D
//ARM 中断初始化
" b8 y7 u' U# Q& dvoid InterruptInit(void);! \  B2 {5 k% u6 F
2 Y4 _+ r. e; w+ m- D: K0 `
// PWM 中断初始化
- }- I# I- [; y- i/ s1 Xvoid PWMInterruptInit(void);5 [' J( `$ Q+ H7 O# `( m# V+ t
// 中断服务函数$ a# e# R* v5 w  [
// PWM 事件; V# t1 _+ Z# s( l4 d2 K- V
void PWMEventIsr(void);
8 B! v: W1 T  f# W7 Y// PWM 错误控制事件, r7 ]5 y+ e6 x: a) N  b% M6 p
void PWMTZIsr(void);
3 d6 l% i8 E9 Q# {, l: i
- b' d( {: ?3 f6 S6 m( A, `. G/****************************************************************************/3 u7 W9 k; U8 G/ W! r
/*                                                                          */5 l* F- {" C0 P! Y! l& j  k7 h. W) r
/*              主函数                                                      */
4 N; Y% r$ m2 \. W/*                                                                          */
/ C& x& b2 i! ]/****************************************************************************/
/ N* ?  n8 X) [; M' ]9 `! ]3 g. Nint main(void)
* l, [  e0 w' Z5 V{
( L7 p+ ^3 F  S9 v; T4 @- P9 R8 a        // 外设使能配置' Y% ]. b7 c* J5 f4 x' G
        PSCInit();
7 u) T5 E: K1 `# l. c
7 W7 `8 K3 ^5 N  o        // 初始化串口终端 使用串口2! v3 ?: _& I  |  c( v6 `
        UARTStdioInit();
8 }& T% y: {/ s        . r5 L/ L% y4 x3 \' n
        // GPIO 管脚复用配置
( l% M, g; Z* J8 Y8 ^7 H6 r1 V        GPIOBankPinMuxSet();
( _( Y4 j9 P: J# b! l0 h$ q% |
- G) q. o8 R4 F$ M& G  `+ c0 N        // ARM 中断初始化; a* V; U0 j  w. K7 c# Y( f5 I
        InterruptInit();
8 D' K8 K" M* w: k5 i, L, ?$ n. @+ \* a8 W# }3 j' ]
        // PWM 中断初始化
9 [0 H- k$ G6 S, `        PWMInterruptInit();" Z! L' [: p2 M% x

8 x+ O) I5 Q/ C: h        unsigned char i;: w* C& V+ r1 L! g( U
        unsigned int j;0 e+ R7 L' g! b5 `% B) L

' ~) Q# J' ^2 _, ]        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);0 ~6 `4 C; {$ r; K2 A5 q, b6 n
        UARTPuts("------------------------------------------------------------\r\n", -1);  l; N! P2 ]: G4 ]8 n% w
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
0 p) w: {5 k; s9 O/ _        // 产生波形; `4 M2 l7 H. B
        PWM1ABasic(25000,50);3 z# ~: X7 h0 k$ C6 C
6 B& [/ M, I) P6 R
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);/ C% q# R6 i6 e% u3 K  I0 j
        UARTPuts("------------------------------------------------------------\r\n", -1);& J4 ?& B* d. f  @8 J
" S: V( d8 I" F4 p
1 e( `8 M; v" Q* i, X

" _! j  q9 q0 Y4 e! ^. ~        UARTPuts("------------------------------------------------------------\r\n", -1);
( f7 I9 X% N0 _        UARTPuts("                    C6748 ECAP Test\r\n", -1);/ K9 |! n! _) H" F
        // ECAP 捕获初始化  n, W, ?, N, g8 K8 @" R
        ECAPInit();1 e: V5 z, b& h1 P. A
        UARTPuts("Initialize ECAP.......\r\n",-1);9 p0 _2 A' l' F" G# k, t
        for(i=0;i<5;i++)
; v  }. E( W# Z9 J+ J. X9 Q* O8 k) j        {% G! }5 e$ v+ v0 U" z; R9 A
                    for(j=0x00FFFFFF;j>0;j--);            // 延时! Z, K, E* C! C3 n
                    ECAPRead();( }! ]! Z  P+ {- {
        }
' g  \8 A, l/ |/ n: Z' U) ]        UARTPuts("\r\n",-1);1 \3 g# c& u, U+ @
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);" G" b' _) x: \, f( L
        UARTPuts("------------------------------------------------------------\r\n", -1);
  |, O; S4 a3 N2 z* O# H, J  @) ~( j% n& W6 j
        // 主循环
3 O/ R6 k6 o: ~& j8 e9 z        for(;;)
4 {: @( m" }0 G, A        {
1 a9 h2 Y, ]% e% h6 z
! P! J, p0 m8 C7 c        }
% }  Q1 F0 e5 d3 O' Y' t9 Z}
0 \) D' V7 X7 O4 x: Q5 X# l- Y1 |* k% b2 j
/****************************************************************************/
/ g4 \0 m% C& `) `% `" B/*                                                                          */
8 i% q0 T1 k: F' |: B2 ]4 L/*              PSC 初始化                                                  */: y) v2 U' n7 O/ e2 @
/*                                                                          */" P8 }2 M+ o% D: \) m' N
/****************************************************************************/0 Q( u! Y5 j: r7 r6 }2 |/ K
void PSCInit(void)
+ i7 ^# I* h) M- z{8 {/ j, Q, W' z4 [
        // 使能  EHRPWM 和 ECAP 模块
- E8 E3 k% u1 n0 i        // 对相应外设模块的使能也可以在 BootLoader 中完成1 n; N/ g8 K% O
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ r& _  v1 P6 n# Y$ u- b* f* L    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
7 O0 u2 }% B% N7 F' ~( \$ e  \}; E5 G% r% k. z1 V

5 G; R2 I( s# i# A* j0 _5 q  s1 L7 ?/****************************************************************************/
, M! u. V& u' }. _4 y4 N$ I9 h! l/*                                                                          */
' o- t- f* ]9 i' W% N! \1 g/*              GPIO 管脚复用配置                                           */
" F. D# e$ v" r  q: {, X2 x/*                                                                          */5 L5 l3 \' r, L1 o9 b3 s5 }6 \
/****************************************************************************/% L/ t# u8 {% |4 p9 @
void GPIOBankPinMuxSet(void)
$ n4 j8 k5 @' q+ P9 m! ?% \{
3 X7 D3 P  E! C. [        EHRPWM1PinMuxSetup();
8 t/ ]& I6 J) M9 \6 g7 u0 ~
7 ?( f" k9 ^5 x        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)" b4 X! d1 r0 l7 o- g1 l( p2 q& {
        // 作为捕获功能时管脚方向为输入- o8 s8 [  g8 |# {+ m( }; ?1 S
        // 作为辅助脉宽调制时管脚方向为输出$ b4 E# G- v& ~. _6 c' S
    // ECAP2 / APWM2
7 c3 e# A# v# I% r$ Z$ d        ECAPPinMuxSetup(2);' P2 q$ `) |/ k: w2 K+ q
3 k3 G3 o  `! h
        // ECAP2 / APWM2方向设置为输入
2 b, J3 x/ J! h        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
; S7 E" M, W' y1 g}
! Q, V7 _+ ~) l6 E3 ?2 W7 j1 Q/ b; n& Q! [) L3 P
/****************************************************************************/7 A: ^5 J4 `. T5 o
/*                                                                          */. a  w. \! Y# ?
/*              PWM 输出波形                                                */7 E$ h0 t0 K% i- q$ Q* I# B7 i
/*                                                                          */+ F& N# O, B8 q
/****************************************************************************/
. w) K0 H* u$ w6 H+ ^void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
. g3 ]/ d6 x' s2 Z& g! E4 X{. n8 Q2 C4 t) m. b. V7 J- [0 g
    // 时间基准配置
3 _( l6 ]( L& v% s  s( I    // 时钟配置) W6 U- Q2 q  R4 K4 g/ h! e
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);. p4 g, L4 L% o5 D2 L9 H
6 b! U' a) ^( k" @* h  s6 S+ D- f
    // 配置周期5 f! \9 y) ?, Q* Y. }* @' B
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,- I2 h$ H; X& ?, b7 u
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
# e/ D$ B1 R  W8 @
" t% p9 f6 h6 l" x' _! }) ]    // 禁用输入同步信号  L( @+ [" R( `
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
" ~0 h% o" X& x9 w, F& P/ T; V' W
+ B1 o2 w) G6 b+ v" w    // 禁用输出同步信号
, Q! U0 z" z; @; W& p    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);- O& u- t# a9 \& U9 l

- [: ]* E, x" J4 w# @    // 仿真(DEBUG)模式行为配置* V& a8 j5 o1 j7 B1 B$ L9 D% j' c
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
# M4 o- _% s( L2 }/ Z/ F
2 \; y# @) V4 b4 m+ w    // 配置计数比较器子模块( E9 ~& L% X* v% M% x8 P  T; _
    // 加载比较器 A 值! S% r6 x0 d$ F0 |
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
# K& _' v9 q* o  }" p4 `                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
5 s  @) ^% I* a- y, y4 A% u# M- E
1 B+ Q' L8 B: N9 d! g( [0 m' c0 ~    // 加载比较器 B 值& g% D5 J3 S/ z% d0 z
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,9 R8 |" A; _5 O: w0 K
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
4 N* a- E9 q9 i2 k3 {/ C& S3 v
7 O4 I9 X' g* @) w; b: B2 ^    // 功能限定配置(输出引脚触发方式设定)
8 Y/ y+ Z+ u: ^    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
  h  x4 U' B2 o    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,$ M0 d0 y( `+ R( p, J0 V! A
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,9 }' C1 L1 N( e0 X
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
- g7 D- l$ x; T( `4 ~1 l+ `" Y$ F5 Y2 Y8 b
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
6 U$ h! P% E! d    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
) y( K3 y5 }( s" E0 O5 b$ y! w2 z! P$ G: G0 H8 o' M
    // 禁用斩波子模块
1 H/ y3 L( ~7 h( {1 w) P. H    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
( |: A7 V5 y1 W$ h+ z
6 U! z/ Y' l1 f    // 禁用错误控制事件3 [/ n! b  X8 E4 G! K! J
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
/ D( q' ^- V% x: i6 m- W* [" S    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
7 F5 d* ^4 l9 z7 F1 m# K
/ \9 b8 ]. s+ l: p8 O+ s    // 事件触发配置4 Q+ U) _- G0 H  j8 X; v
    // 每三次事件发生产生中断" F; h  h. c$ q9 N+ q
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- K$ Q# ]+ [( f/ n; |2 g4 J    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
( l$ C/ E" ]# }7 l    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);: K* i* X6 X% J) f
    // 使能中断
0 E8 w7 ~! `1 k# G* w6 ?: d6 m2 B( A    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);- P% n& K% p' `- N. c; Q
9 e' y. ?% L5 P8 R
    // 禁用高精度子模块
: N) G$ _0 g2 Q2 M% T    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);# T+ L6 z- i) p- |( ~$ N
  r' h7 Y( a1 V/ w4 K9 ~0 T
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
3 Y) w1 _  ~8 }* y# N}+ m' ~# }# {( M, r3 k1 |, Z
4 M; M: }! _1 t( F5 s- x" Z: Z% s! l
void ChopperWaveform(void)
% J) G9 G: [* ]6 V; u9 U{6 ]3 Q1 s% T2 {; g) ^% l1 m
    // 50% 占空比
7 v( H1 E7 P. W+ U) \    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);6 z) e/ ]0 s& k( I- f# V
    // 4 分频
2 `" F  U: c5 Y' a6 c4 o    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
: O/ ]4 x3 d9 z) a3 s" ^5 s) J  I    // 单个脉冲宽度9 n8 W4 G' C1 z! _
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
% m$ Y9 m8 f, l/ q8 E. r    // 使能斩波子模块- k: I# ]  u- [) g* E% X2 b6 Y8 {$ _
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);$ Y1 k5 u% Y! d5 {; B
}
" K: c8 A& J* @# Z3 L
* Q) t! q4 X: s+ E6 L( V$ u/****************************************************************************/' P& S. G' ^+ G7 A2 d
/*                                                                          */
2 U; [7 K. D2 z1 c* T9 U/*              PWM 中断初始化                                              */3 G$ J+ w$ j* m1 I* h
/*                                                                          */1 D% P2 p9 Z# M, g6 v
/****************************************************************************/+ V( u- T0 e1 O  P. i
void PWMInterruptInit(void). @; G, N2 p9 G. U
{
! s- J, [4 g% F        // 注册中断服务函数
# m8 Y; D' c- ^5 k        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
' ~1 c% f) l# E4 R" {7 j! a; s        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);6 z) K1 Q1 e* Y4 V5 S2 \: K
0 C1 j, _+ y* J  M$ E6 d
        // 映射中断
6 F( G$ `% S/ p6 M+ ?  O        IntChannelSet(SYS_INT_EHRPWM1, 2);
. C3 c, V; G) G        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);  v$ f2 B5 M1 A- f; T6 d$ V3 e4 Y
. U9 h. z# r9 r$ L6 z" E! h  @
        // 使能中断
  n5 V5 c1 P. p, R) K0 B" R, A, ]        IntSystemEnable(SYS_INT_EHRPWM1);# p( x, N: r7 p! \! @
        IntSystemEnable(SYS_INT_EHRPWM1TZ);% ?- W9 n$ Y9 x" S9 w% v
}1 n4 T( @6 u+ z% |% r! S& ^2 K

/ f6 j* q5 {$ P4 W0 i8 e3 Z1 A6 \! v/****************************************************************************/. K9 t- z& G9 E/ w7 F+ k6 \" \$ h& f
/*                                                                          */; [/ t+ W1 U) F2 ^3 }
/*              ARM 中断初始化                                              */
, y: {) D; v  U& G/*                                                                          */) ?$ m! H9 D1 V
/****************************************************************************/
8 k2 W- q) U0 h2 K, E% }( d! Vvoid InterruptInit(void)
  G% V) m( p7 H* O. v{. Z$ s4 n$ E+ |* Q. Z; e6 |
        // 初始化 ARM 中断控制器! I$ u2 R1 H9 a2 }" Z, ~
        IntAINTCInit();
+ F$ i  _/ {& v9 ?# I0 [3 }8 P& U; ~4 p3 k4 `, [
        // 使能 IRQ(CPSR)5 a  z- J, x( c; g8 H. c
        IntMasterIRQEnable();5 a$ m7 J) k4 t% F' @

% s" \" Y4 c6 g$ O$ v1 Q7 e* f. ?& {        // 使能中断(AINTC GER)
3 O+ `: W" G6 a; R/ m! q6 v        IntGlobalEnable();
* |$ `4 X* ?5 ]9 v+ {
5 f; N# p/ p) N9 y0 |6 B  y        // 使能中断(AINTC HIER)5 v9 N0 V' i. _, M7 k8 q; w9 u7 j: [
        IntIRQEnable();
' E' u1 _/ l4 p! D# a* l; p}
; Q% X) C4 X6 X/ r3 K9 d
4 E/ r4 P9 j! {8 l# o6 R$ }
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 显示全部楼层
/****************************************************************************/
; E& c  Q6 e1 I, ?& q/ \0 s/*                                                                          */
, c# E2 q5 p+ }. C( B/*              中断服务函数                                                */
8 [2 d! B3 @% d7 h8 b  ^/*                                                                          */: A& [1 u: j- y: V
/****************************************************************************/8 m6 R+ `( _* U/ t& j
void PWMEventIsr(void)
5 n8 i7 }! W4 o7 j* x{, k; Q7 j- O& N6 R8 h
        IntSystemStatusClear(SYS_INT_EHRPWM1);
& B2 ^- J$ p; t. x9 R9 v
+ p$ O5 k" t) m    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
8 e; K& R3 Z9 V" d( g/ W: L0 S}
1 Z5 F# _) C9 L, P% \+ Z
0 _. `4 D' Q! Q% b' bvoid PWMTZIsr(void)
! [% e* \# E+ p/ z0 J% R) ?{
- y+ h4 c. [  Y, U        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
/ ?9 O" ]  D% {$ v) b4 v5 E# o
1 `7 y  ]' ^) f& B    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
0 v2 S8 K6 s4 r+ [. `; U/ F# u}
7 n4 w) k; H: T
2 k9 g+ k: K. d: _7 q2 V/****************************************************************************/
* n0 m' d* ]8 r0 S9 l' }4 L/*                                                                          */
% o: O1 O2 C  O0 w: R/*              初始化捕获模块                                              */
+ Z; z- W: i6 P, E% l/*                                                                          */5 A$ m1 l$ Q" e( O; ~1 ]$ r
/****************************************************************************/: r, a$ [* R3 N, N" s) v4 T
void ECAPInit(void)/ x; I8 `& s6 g$ q* }
{
4 s9 _/ e: k$ Z/ p2 q8 F        /*-----设置 ECCTL1-----*// I- O5 e+ K3 W: |0 B
        // 使能CAP寄存器装载7 T9 {" c% l  Y% G  m
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
3 `- C$ F! T5 C# v6 s        // 设置预分频值.
9 i; u1 ]- l, }$ t5 s, K" C        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
6 U+ C  I  Z  H, s% |) C$ b  s        // 上升沿触发捕获事件" C: J: Z& X6 h6 H, C, G
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
; @% L: P, o7 y8 B9 m: p  ?0 m; }" q        // 输入捕获后重新装载计数器值.
8 K' M% e  |8 i) g        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);  N7 ?4 o) R' G) R* s

! [; g2 F/ f) b" d3 p- }+ @        /*-----设置 ECCTL2-----*/+ y3 y( k- \! ^
        // 连续模式
0 ^! h; c1 Y' Q' X/ n; W        ECAPContinousModeConfig(SOC_ECAP_2_REGS);" [8 c) R. C2 T
        // ECAP计数器TSCTR持续计数
1 \* q/ s. `' e" }+ n        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);% f+ q% N8 p% Q' X: _* L
        // 禁用同步输出和同步输入
$ ?* Z" y* ^+ ~* m- N$ l/ |        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);  E% {$ t2 o' S
        // 配置 ECAP 2 为 CAPTURE 模式0 q; {- d( @2 L  ]5 Q# ~  I$ N1 u
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);# a( p) s; t! k% p7 d+ L/ x( L2 F! W

, y4 R' F7 W6 @, Q* u        // 使能中断* m& |  F4 c4 e" {, j4 O! H
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);4 x( o* @2 R2 V: D1 d
}
  o$ r( i/ H5 Z, a2 S! y3 k# ^- e% t
/****************************************************************************/
0 R1 _2 b/ J) k6 `1 [/*                                                                          */
" W& [( m) }, Q( Q& T9 P/*              取得捕获结果                                                */
* q0 c* f( I1 {3 I. o! h# J! h/*                                                                          */
/ i) o% U% Z, ~9 m% [/****************************************************************************/* X3 q9 b8 G+ x, R2 u
unsigned int ECAPRead(void)! ~9 R( w; B$ f2 ]7 d4 n
{
. A# W' m; R4 J: a  I        unsigned int capvalue;/ `5 d* V5 k) I
        unsigned long frequency;
- d  x# {7 z: L9 [6 T" X' }) `3 E$ \7 w6 C( f6 T
        // Event1 中断标志0 s6 b5 E; u: L7 {7 Q
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
1 u; }/ W2 f4 f        {
) F* `6 M* z) d5 o4 L3 I; J                // 取得捕获计数. Z2 f* y+ ~+ X
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
0 g1 ], \7 y9 j8 p+ x0 j                capvalue = ECAPResult.cap1;9 p# C" {( t1 ^4 B& Y. v

  \) O7 P! [% y) T3 h( L                // CAPTRUE 模块 228M 时钟主频' M/ v! c. ?  Z
                frequency  =  228000000/capvalue;
* _7 O6 O  s: M6 V                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);  H9 S' i0 p; _: O( i# F4 H2 D
6 ]. [/ B+ r$ [% S, `* w
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
. @1 P* G" o/ b7 k4 u, H//                IntEventClear(SYS_INT_ECAP2);
8 O+ d" p' x. x! ]4 K        }3 Z2 ]# q1 V1 V* Q2 \* u( H9 E
        return frequency;
' e2 n7 u9 @9 l, }3 B& ^, I0 S& m}
) |4 ^( A  H( f$ @$ U. k
回复 支持 反对

使用道具 举报

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-21 01:28 , Processed in 0.051778 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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