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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 显示全部楼层
/****************************************************************************/# {- j) ]7 L' B+ U- i
/*                                                                          */! ~) [8 o/ a5 N# B: H2 G
/*              宏定义                                                      */, x( v) f) z! M& L; e- Z7 y
/*                                                                          */
  ~) X& G$ f- _  f8 y4 c/ D: d/****************************************************************************/
9 a1 p' Z* r- r! |, S3 f9 e  ?0 ~// 软件断点
! q2 k) E7 n  i% v2 Q) ^4 H8 _) K  d* T#define SW_BREAKPOINT     asm(" SWBP 0 ");/ W- ~- _  Y& ?  V, ~  |
: u! J* o9 m  ?$ D# |. j. ?
// 时钟分频
) [8 a0 }4 l; }#define CLOCK_DIV_VAL     228
0 S# k5 B5 F$ s1 e3 x9 z
, ~- f% X9 L) [: V. i7 V4 a/****************************************************************************/, m  a& U- Z8 h! X0 r; J
/*                                                                          */0 }/ ]- ]0 @. `/ ?  P
/*              全局变量                                                    */
# k3 o3 `# g9 ?2 H. i0 a2 S4 B/*                                                                          */8 M( D$ V& T1 N7 F
/****************************************************************************/" b) k6 ^" ~+ ~% w
ECAPCONTEXT ECAPResult;
! s3 u4 M8 m- q( G! _' k8 W! \7 v+ F  @; `+ l8 n) P
/****************************************************************************/
& J4 d; O# ^' M- E- P, J/*                                                                          */
2 |' ~' ?, b2 i2 N# J/*              函数声明                                                    */
3 h& m, L% k9 L/*                                                                          */# m2 e3 _8 @) a9 ~
/****************************************************************************/
  @, m- R) U  w2 x3 f, P, F// 外设使能配置- k% N  d3 ?4 Z2 a2 l7 p- r, Q
void PSCInit(void);7 w# y0 f5 x) d: u( Y9 ~! w( @

6 C7 s" l  H- z8 {. @& q& l// GPIO 管脚复用配置: \0 l; V9 J- N6 G; I7 ?* d
void GPIOBankPinMuxSet();2 n& _  v6 k/ @5 [6 E
- }+ ^( ^' T. F& }7 K7 t
// 产生波形' Q/ U: x' W$ w# {. @: o- b! ~
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);' a8 T/ f% x% V/ f1 |# R
void ChopperWaveform(void);
" v9 O& N# O2 E# I- N1 d
5 X1 M4 o1 y" S/ E* o// ECAP初始化和读函数
6 m7 r& m2 L; t: w1 k: m* yvoid ECAPInit(void);/ n  N% O: B6 i: E
unsigned int ECAPRead(void);4 {0 s# |5 K3 @  d. }+ X/ d: [
, J+ k; u1 p; s4 t
//ARM 中断初始化
6 ~8 A* U( S7 Avoid InterruptInit(void);
/ K; O9 i+ n: C8 I3 F) Q7 Q" c5 j& K
$ l- V1 F/ O- u! w$ c1 q! l// PWM 中断初始化
) x% c: n5 a7 Y. J& }! b* q& nvoid PWMInterruptInit(void);4 J% [8 ?: r; [& R: C4 V
// 中断服务函数
! k% n% l' l( J// PWM 事件, l. p  c# \8 Y; a5 U8 R4 D
void PWMEventIsr(void);
3 S/ C) `2 ]$ {' X1 Y2 k; G// PWM 错误控制事件
1 e* r( H) }% o. q, Hvoid PWMTZIsr(void);
: t% z$ K& r) G( |+ A+ i3 I: O
* x7 ^/ }& e9 w% `/****************************************************************************/  ^. T) f2 X: i, C4 q% Q: E3 w
/*                                                                          */
/ M2 s: U9 h1 w/*              主函数                                                      */
. c( T- U* @/ j6 |! e2 i6 i/*                                                                          */% E0 {3 ~' U8 V$ @8 l; ~6 B
/****************************************************************************/' L, f! x% N" C/ u: v* l( [. j5 y
int main(void)
: e& B1 x' t) Y2 H$ N{1 {& j7 o1 O, c/ G( H& ~) [4 p
        // 外设使能配置
! G7 m$ ]( T9 @        PSCInit();
* Z- E* q2 ]9 ]5 m# o4 T* M6 F& _
        // 初始化串口终端 使用串口2$ `! i+ j5 C  s
        UARTStdioInit();
  E; Y" \" K% o7 }9 }# w       
, i8 j% s* t0 J5 }3 }& P' w        // GPIO 管脚复用配置% H$ l& J- E6 J" ?
        GPIOBankPinMuxSet();
2 q( [2 k) M4 i% K# V
+ k! s) k! }+ h, Y. f        // ARM 中断初始化
, I+ k7 L/ X8 M7 B+ A) k* V3 V        InterruptInit();
, y8 O  C8 u% C& M0 N/ X4 ]- |; R
; k: Q, |* Q8 e) L0 r        // PWM 中断初始化
6 P+ m5 P% F% @6 z        PWMInterruptInit();* t1 i5 H/ o$ e* u& ?" a& i
5 J/ B1 P: F9 [* |  F8 ^
        unsigned char i;! u* p( d7 d$ |3 O
        unsigned int j;" t3 b& D4 [; ^
" p; S: m6 Q% I; x
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
  ^! C: c. K' O9 p6 h        UARTPuts("------------------------------------------------------------\r\n", -1);% O! w% @# O. L% ]* @# f
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
# h% A2 x: T% J' f7 w        // 产生波形
( E+ F2 j5 U& E: n  P        PWM1ABasic(25000,50);9 x) z9 Q! f9 R# @0 Z
- M6 `1 H* a3 ~( e  Z
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
. f7 p) Q4 q% M/ e, S) m        UARTPuts("------------------------------------------------------------\r\n", -1);
8 u) T$ l. A6 I0 E( h; t5 r! H  U7 [( I8 T! v! g1 r
/ [& ^8 f3 Z4 S
+ Z0 L6 L# `0 r9 O" o1 _
        UARTPuts("------------------------------------------------------------\r\n", -1);
5 I3 G6 m$ t: L; `% N0 |' f- G        UARTPuts("                    C6748 ECAP Test\r\n", -1);
% H( R3 \5 R$ t/ O        // ECAP 捕获初始化
  k5 d6 u0 o4 Y9 ~$ P/ c) V7 n! S4 R* l        ECAPInit();
2 ]% U" c2 H! X" Q        UARTPuts("Initialize ECAP.......\r\n",-1);/ f4 A! O1 y! t# T: y0 \9 G' a
        for(i=0;i<5;i++)
  y+ R5 r$ E$ q        {- O6 o  P& }. R3 v
                    for(j=0x00FFFFFF;j>0;j--);            // 延时- M# R) x7 ]8 |- r/ S' ]) S
                    ECAPRead();  u0 I: B1 j, E; d" U* E- c
        }, A) @# l& X, r: [1 f
        UARTPuts("\r\n",-1);
) i& w8 s% r  C2 g6 I        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
) D7 T; ~+ M3 m( J        UARTPuts("------------------------------------------------------------\r\n", -1);$ w* M4 [( K, V/ X' {$ ]
6 U1 F* c0 ^& E4 i4 Y* y
        // 主循环
: }* z! s+ _; c0 S& V  C) @9 ~        for(;;)
% J$ [& y( @. Q' T5 Q4 m/ Y4 a1 u        {
( `) x% g5 L- b, s1 o$ O/ x& k6 a  A! Y6 l0 `! H: q( r
        }' I% f/ M+ }! l- p
}
" n1 {- s% I) H2 y# F% r' q. w! f; ^% i. K( `6 Z; ]
/****************************************************************************/1 B* a8 p: u+ s; A% B5 h' M8 a2 N$ s9 z
/*                                                                          */* u( Q4 y: X+ s
/*              PSC 初始化                                                  */
& M/ q) q: |# }  t0 E& T/*                                                                          */- f0 G' Q7 _/ K
/****************************************************************************/
' e/ J! R) ]/ z1 V7 }% {void PSCInit(void)
$ `; M. G5 U3 W{
5 T8 R$ R) |; O        // 使能  EHRPWM 和 ECAP 模块; _7 s' c# c4 X4 T
        // 对相应外设模块的使能也可以在 BootLoader 中完成
5 E6 D" d9 v0 U3 }+ y/ \    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);: y  d  w7 B1 _. Z8 Z
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- \% D; |0 d6 \3 ~. H  h}. N5 c! M5 Z+ ~- h' B+ [9 V& U
# R$ Z+ p7 m, q+ [) _
/****************************************************************************/8 I8 R! `. M. V7 B' E
/*                                                                          */
* U) b8 ]" i8 g+ |/*              GPIO 管脚复用配置                                           */
3 X- [5 W! F+ O/*                                                                          */
" ^+ Y8 H4 {; A' c% {* f0 [/ u/****************************************************************************/
9 t! O" o* U$ mvoid GPIOBankPinMuxSet(void)
4 W- T3 Q3 T: ^3 e3 p4 a% F{3 D3 v6 x+ b) R2 c: u$ p' a5 s, x
        EHRPWM1PinMuxSetup();. s+ L: E0 o8 b- m4 \- N2 `9 b3 ~
* |: E- S" K! o7 }# x$ ~2 _
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP): j& ]- E; g# _) p# p* x9 W
        // 作为捕获功能时管脚方向为输入6 X, k+ }* a5 r; Q' c; h4 {5 H
        // 作为辅助脉宽调制时管脚方向为输出1 L" ^8 u# R) l- l3 D3 l
    // ECAP2 / APWM2
1 Z$ ]* ?: U  ~& ~% A6 M4 _        ECAPPinMuxSetup(2);
+ K. \+ A8 D. B  j9 Y; ?0 \+ q0 b: _# A: Y' `0 }
        // ECAP2 / APWM2方向设置为输入
+ r1 @5 h2 L5 P4 r: n( q5 ^. _        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]5 X# B0 S, C2 g- k; A
}
9 Y; F# P) @& T4 p: t3 z; E  L  w2 f3 D" Q/ u
/****************************************************************************/1 Z5 V% w- `% \& V' L1 s6 O0 a/ g
/*                                                                          */
! D- L+ l( t* z+ D$ A' C- }, l/*              PWM 输出波形                                                */: E5 T+ n$ f+ X' m
/*                                                                          */
- @- l6 b" a1 k3 A( C4 Z7 a/****************************************************************************/
( I+ Q; J. D( e! W5 ivoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
3 c+ \) ]+ [. {! {/ u) [{0 z: u# A  z1 y1 C
    // 时间基准配置
' l0 h& @  {/ k5 E! E$ k    // 时钟配置+ \" h/ G4 r/ N5 E, l* j0 _4 a5 _
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);( u' m0 s5 f! P" Q/ u8 z3 ]1 `
0 K) e  B2 w+ S
    // 配置周期) e  z+ Y# P) {4 y  l
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,; H" ]9 T: f! h! B& s' d  d4 w! W
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
3 [; S+ r- V+ x9 I( Q8 Q- a3 [: I) v
* l/ W4 Y' G) ]    // 禁用输入同步信号* L3 i$ b# R5 o% e
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
# ^) ?) X* {* X3 |- J( v# B" l. [) W8 U2 p' h; m$ i; K
    // 禁用输出同步信号
; H$ f2 S3 y' p* j; x# e5 q- `    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
  @3 [* l! p5 C4 ~8 g
! U9 {/ A7 V6 u0 s; \    // 仿真(DEBUG)模式行为配置
/ r( s: v. G8 D  H) s    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
6 Q% ^& e! L. [0 C; h: u
- s* c8 }% {- y7 \0 E    // 配置计数比较器子模块  a6 ~, l  q* y, A
    // 加载比较器 A 值& i. D1 c( g- x6 a! @3 A
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
4 x  d) c8 Z) o: B5 l& d' Y% s                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);3 t: R+ G' J8 G% X& s8 ^, x& ~

) T8 }: {5 Z, u6 q- \9 L, T4 k& h    // 加载比较器 B 值' a! ?3 y0 ~$ r( u8 V  A* \
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,7 x$ A$ d4 \( _4 p  _6 d* Z
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
  W9 j0 T2 k! N6 ^% c9 r% T
+ Q2 _& C' S5 r, [6 ?; i$ _    // 功能限定配置(输出引脚触发方式设定)
( p* L+ G' N% n' i    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出! d; P' t) |6 a, t$ c8 T$ v
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,) L7 _/ m. U8 }( s
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,; v# }1 v) X' i
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
/ y5 e4 T8 P; S2 t
: p4 Y  Y6 U6 [9 u1 r    // 禁用(旁路,信号直接输出到斩波子模块)死区模块5 y$ w. T7 A& W8 K
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);( r% ~7 J9 X. X% \
$ I9 h6 p  x. Z+ q8 z
    // 禁用斩波子模块
. ]' Y* Q( s$ F7 n' s    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);9 [6 h6 u* Y# ]

) o# j5 S6 w/ u$ e1 N    // 禁用错误控制事件3 S: M$ a* q! ^
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);8 b# z* @7 }  ~
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
2 R% B, {6 B+ V( d: o; \
1 e$ R# C# q) _3 C; V$ d  Z    // 事件触发配置2 }; T! W) G; s- b+ F2 }
    // 每三次事件发生产生中断
1 U, ^+ L" X& r1 B0 D    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);2 f' @8 i  F: M. r9 e- i
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
$ D' U4 T4 b5 R. o+ e2 \    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);' h6 i- `3 d) f$ r3 v
    // 使能中断3 w2 F+ k9 L+ @1 y
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
7 K6 j9 @3 F, ]3 X) ^- w: u
1 n2 x* N6 n7 X$ j    // 禁用高精度子模块6 n" s" k: M% ^7 ?9 p
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
/ ]  e4 }8 v# o9 g: I
& C, y8 k7 n+ c, N    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
. ]8 {( p4 D; @' C}
2 W# ~% Z+ k# V' z" e0 F8 t: t3 C
void ChopperWaveform(void)
. \; D# T) I# T1 o{" c3 j6 n4 a1 k! X' V
    // 50% 占空比
9 I) q. h1 t- k    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
  ~0 |# a5 w, \/ C4 @8 @    // 4 分频6 ]. [" ?$ `0 i7 c
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
/ R  P" i* o& O    // 单个脉冲宽度$ U4 p7 T* i" N: O+ d0 |* X
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
# M$ Z8 S, `0 y0 q; H4 @4 ~, I    // 使能斩波子模块! O+ r/ |+ K1 G) O. M+ O$ K' F+ F
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
8 e1 _9 h( k! s' D( o}
* G3 |5 l, \( g7 N* _2 m3 \
' {- c& G1 H6 `+ S" N/****************************************************************************/
) `  ~* b! L& p1 Z  K7 p/*                                                                          */
) b. g* g" q5 [/*              PWM 中断初始化                                              */
' y$ N  }0 h! Z2 @4 U/ C/*                                                                          */
0 l% k) ^+ k% M2 C* W% [, h2 {6 H8 k' u/****************************************************************************/& ?+ p" ~9 s: D7 U2 e8 |. ?% U
void PWMInterruptInit(void)
* @% H/ ~% a6 O+ r/ L/ \{
" r) R. N& K; d/ |2 {        // 注册中断服务函数
: d: `7 u9 V" b& I5 p        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);- m; p9 z$ ^3 K* D
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);* ~9 S: Z1 ^. l) Y

0 u/ Q4 x( b/ O3 h3 I% u  b        // 映射中断
+ F7 I! T$ W% {: x5 P        IntChannelSet(SYS_INT_EHRPWM1, 2);+ g# U$ f. I+ ]# L2 q
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);( k9 N# k5 S9 A- @

/ _; D4 s" l- v, W* c0 t* a& k# |        // 使能中断
7 Z) y9 ^( _. I' X3 K7 [        IntSystemEnable(SYS_INT_EHRPWM1);2 j- R$ Z1 h8 z+ M0 ~1 n$ t" D
        IntSystemEnable(SYS_INT_EHRPWM1TZ);% a2 X" r* K2 v1 k/ i% G0 M/ Q: F
}" M7 q7 H. o# X  \1 F% y) P) r

/ y. V$ S/ [. m7 u/****************************************************************************/* _: h1 g9 d) m$ S1 q1 d! y
/*                                                                          */6 i7 z6 F2 ^# f: _/ s7 {4 t
/*              ARM 中断初始化                                              */( [1 }8 p- G- G+ [& v7 [/ U
/*                                                                          */6 i) n) x3 \; R" r! o) B7 o
/****************************************************************************/
9 H- b: H/ |. q8 n; hvoid InterruptInit(void)6 V& {( N6 n( R- C+ [$ M* p
{. u: a- @. I" n9 q
        // 初始化 ARM 中断控制器
8 n" m( s% x/ d' }2 D        IntAINTCInit();* i$ S" G3 o  \, `
& l* a8 K: e$ p  s
        // 使能 IRQ(CPSR)
9 B* m, o) S, r7 m- f; A; H        IntMasterIRQEnable();7 H! _* G, U' U( ~

( r2 M, N5 Z' h& V  l  B        // 使能中断(AINTC GER)
: `9 c# M) K) F/ `3 j6 u4 C        IntGlobalEnable();/ f: A$ H; Z0 C
3 `' l& i$ F# f! W+ R
        // 使能中断(AINTC HIER)
2 k9 u" O+ g. P: p1 B$ X5 p/ d        IntIRQEnable();" C7 N2 v$ m$ N4 J# u% Z
}' K+ V6 V5 P; {

! r6 u. R2 F6 ^1 J! g2 h# |, x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 显示全部楼层
/****************************************************************************/
( g- U1 Z; K# y% J+ Z7 B, l/*                                                                          */% r1 j; }0 ]) W+ O0 p
/*              中断服务函数                                                */% Q. L6 S: l# [2 k/ V
/*                                                                          */% ~2 ]( k9 P8 B0 m( n
/****************************************************************************/
* v7 X* x1 a6 _1 e# {void PWMEventIsr(void)' M; |9 F5 Z9 D! a  A
{
7 Q3 r# T# Z7 z- e        IntSystemStatusClear(SYS_INT_EHRPWM1);( S* ]4 ~) x7 Y+ d' a
, W9 [  l4 |" ]' G
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
" _. K) V$ c. i: n, ~; K: E}
9 _' ^: ?% Y3 ~" M: X/ E' l. s- M+ v1 ~8 F7 r$ Z& \+ Q0 A! W, j1 b
void PWMTZIsr(void)
* e0 M2 A' S8 W; m' y  @6 U& m{
* x' C4 [) H& R        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
9 j9 J$ Y9 h$ H5 x2 M: O
2 {# x) u* h0 R+ N7 Y6 q    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
; R, J- Q  g$ W$ U}: Y- W0 q3 s5 p; K) V
, {/ i  P& q# r
/****************************************************************************/
( a& D9 z: r: H/*                                                                          */
" ?+ ^8 n5 j& ]; h* D% Q/*              初始化捕获模块                                              */# }. v6 c- P( r( j; }
/*                                                                          */
2 ?1 W5 I, j( V& @8 X$ e8 B/****************************************************************************/; @+ G7 ]- [% V7 j0 U* Z1 a8 n
void ECAPInit(void)9 T% v" l% I% b" _
{2 a" E9 ~8 M( U. L: V
        /*-----设置 ECCTL1-----*/
1 d; x2 `* z) E6 V        // 使能CAP寄存器装载: y& i7 A( r0 g  x; J" F
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);# R8 P  E# W9 S
        // 设置预分频值.
- {: K* `1 x0 V        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);* i. F% D+ k4 e& R! z: Y2 R6 A
        // 上升沿触发捕获事件
! S& l: U0 j+ g/ c        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
2 S. D& E9 _% S9 T8 G3 B        // 输入捕获后重新装载计数器值.8 w/ k4 L2 @/ ~% ]. Z& W5 u& S* m
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
: I: v  a8 i7 Z- {0 U5 f. s; H! G6 S( `
        /*-----设置 ECCTL2-----*/
$ Z8 g  d$ {1 c        // 连续模式
3 M' l+ C( q# r4 c7 [        ECAPContinousModeConfig(SOC_ECAP_2_REGS);8 _* [+ A1 A' F% i0 A, V% c1 _! C1 F
        // ECAP计数器TSCTR持续计数' p: J! Q$ a7 F6 w
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
5 l3 P( I- s4 s* G7 B        // 禁用同步输出和同步输入
( v6 J2 b6 ^' {% a$ F+ j" X  H% Q        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);& p$ t( F' o3 R1 n  S1 N
        // 配置 ECAP 2 为 CAPTURE 模式. K" b: }* s9 @" x# F6 ~
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
- R' R) M$ K2 s; i3 r6 O7 |4 U$ v3 u* `2 _
        // 使能中断
  ^# {4 u' M, @9 `0 e4 c1 N//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
$ @! }3 ]& j/ {}' b8 t( M6 }7 k/ D
: l% ]1 `' [# k/ [# l0 \5 p
/****************************************************************************/
/ F- h& @4 }, O/*                                                                          */9 \* c: q% d3 f' z& T3 j
/*              取得捕获结果                                                */
6 c( T+ ]- l: G% U! Z- ~1 h- M- L1 x6 S/*                                                                          */
# X4 }  ~' K4 b+ T  ]* o, x: r7 f/****************************************************************************/
( w6 l, G+ ~  z3 Yunsigned int ECAPRead(void)
8 I  c5 n: F* J{
: U' X: |5 o3 T) b        unsigned int capvalue;
7 ], g, r8 n9 M% t        unsigned long frequency;
* s" Q8 a5 b# a& T. T# P" B; V8 b8 c! j; C# E5 z& Y( }& B
        // Event1 中断标志+ r! ]1 s& p3 _2 m0 c
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
/ n' b  |5 x; y3 r; `        {6 p5 W. F5 A: ]& D( q
                // 取得捕获计数0 i/ s+ X( O  P/ S
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);. G0 V' Q3 B- Y6 X
                capvalue = ECAPResult.cap1;
/ J, Q& i! D- E/ Q2 ~9 w6 d% _/ k, x, r/ X. M" b8 |
                // CAPTRUE 模块 228M 时钟主频6 Z; X6 y% p6 q" W
                frequency  =  228000000/capvalue;7 {) L9 p; B& Z$ o
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);! T/ y( u: H' g# C5 }. H. n

3 t) C* O- o0 c/ C. d& A+ e, q  _                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);4 N( x* _0 d# @8 F. q3 n1 o
//                IntEventClear(SYS_INT_ECAP2);
" ?& ~- z* x/ o- \( g+ H        }1 _+ S. P+ c4 x& E8 a. f0 E
        return frequency;
4 Y6 x  G' \- |  X# Y% {}% h" N0 Z9 }7 ^" U/ w$ T
回复 支持 反对

使用道具 举报

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-11-1 06:46 , Processed in 0.043809 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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