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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 显示全部楼层
/****************************************************************************/
3 d6 |# u/ @4 E. s/*                                                                          */
- W- }- `: z8 e' C% [; R8 V' d$ K/*              宏定义                                                      */( n5 o" ^6 J" O& p! N
/*                                                                          */  m  e+ A' e+ ?9 c9 \
/****************************************************************************/
' I$ s+ I6 v- l4 b2 [: F+ q// 软件断点
) j# x& H( [5 A4 P6 P- n$ M  R#define SW_BREAKPOINT     asm(" SWBP 0 ");+ b0 N  }5 O# X/ H% c3 l

- t7 B. T# z5 U7 E! W. i// 时钟分频" U9 X2 i. h" D2 P( ?
#define CLOCK_DIV_VAL     228  x6 C# B( Y4 |' u3 b/ |/ `
. a' o0 ~- M  B9 [) J3 G2 x
/****************************************************************************/
% x( Q) F1 M4 F5 ~. W/*                                                                          */* y: {  E& Q( B
/*              全局变量                                                    */- K# ~. \0 _* U8 ]1 c' |+ _, ]0 m
/*                                                                          */
6 h" _# F% I  ^3 d- k% I- _/****************************************************************************/
! ^: [8 F+ O& U: T1 nECAPCONTEXT ECAPResult;
* u2 a3 i" f' F% P5 ]  k* }1 {; ^$ w) L: t4 L
/****************************************************************************/
/ I1 T, |; [# y; H/*                                                                          */1 R+ ^+ s6 C3 E% |9 e. Y
/*              函数声明                                                    */
. o- q1 \# r9 f9 S# S" k* ^/*                                                                          */
2 {/ v+ R! |0 z* _2 h" f/****************************************************************************/# A: y2 u+ b2 [2 Q, r
// 外设使能配置
0 [" i" w9 Q. l( |- E3 Gvoid PSCInit(void);& V3 p: {- W! L- c# P0 l( P) G
8 Z) O. V7 y) A# ^; L2 p3 M8 }
// GPIO 管脚复用配置- N! u+ v+ j$ r) i5 t0 y. I
void GPIOBankPinMuxSet();
: U3 e( I3 m7 Y) L2 t
) ?8 F+ K1 @+ o* g5 Q" T4 s4 G$ ]$ S// 产生波形4 Y  _1 M  o9 F6 x5 ?; D& b9 c
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);7 x1 s3 J4 {# [, Q
void ChopperWaveform(void);
( Q$ \* B5 W( X' C) K! e/ O# A! X
// ECAP初始化和读函数# b) w  D9 j' I' _8 \
void ECAPInit(void);, c0 _; m$ U+ v  X
unsigned int ECAPRead(void);! i% R: z0 q" J, p  o+ u
. B+ _4 F( @+ k5 o8 l/ [6 I
//ARM 中断初始化: j  C4 k' h. _/ G) T+ v
void InterruptInit(void);, C4 O& u( t+ f

% o5 I* p0 C/ B/ v// PWM 中断初始化" o! A0 r' V/ K1 R( v) }
void PWMInterruptInit(void);, O3 s- J" P! `, d& \
// 中断服务函数
9 ?% n3 ~4 E$ O2 J3 F* m% u// PWM 事件
7 A+ j5 D3 G3 O9 d5 D% k! c! P' Hvoid PWMEventIsr(void);/ _3 i* P5 T0 B& n" X) s! r
// PWM 错误控制事件
5 L. C! E) |# b6 b: j( Y9 o) G* I+ avoid PWMTZIsr(void);
# D$ K  Q, A0 R) t2 D& |8 x6 Q/ X% `
/****************************************************************************/4 ~: p, z! D* O, }, l
/*                                                                          */
( m! e5 a$ ~% b; P" H+ S/*              主函数                                                      */
! h3 u) w- ~  L8 v) E2 }/*                                                                          */4 C3 A, e* G* q$ s$ ~, A+ }3 D+ j
/****************************************************************************/6 s& E2 |' E0 ~+ G& l4 [
int main(void). l) V+ L% `* g  K. D- i3 K  |
{$ o4 i6 ^3 M% b3 Z, Z. I
        // 外设使能配置. I6 c7 d; H( U" D
        PSCInit();; ?9 G! Z8 i( S5 ?% u
0 J* b% W1 c  A1 U' \% E6 Z
        // 初始化串口终端 使用串口2- C& [4 @" K% H0 Q
        UARTStdioInit();
) l: d6 l% N% P/ u9 K       
5 ~1 R& l$ ~( C$ \5 [6 s3 c        // GPIO 管脚复用配置0 G- m4 \4 X& w7 ?- {
        GPIOBankPinMuxSet();1 K2 b7 h9 @! [

% }+ K2 j4 O/ ]8 c1 \6 F        // ARM 中断初始化0 }4 R% ^+ g- n* `
        InterruptInit();' s( R4 w+ E; A) _# B
# g; y2 ^& T9 I
        // PWM 中断初始化% H0 ~; j4 u' w3 i  I; F
        PWMInterruptInit();9 M  g3 {. T1 B( T
/ g+ S6 ]' l/ N6 Z& Q
        unsigned char i;
. T0 L5 w6 x" N8 i/ V. S        unsigned int j;
, |# t- v+ r" A2 F" T" R
, C4 x( n) R6 a0 B/ I+ f        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
' {' u" @, d+ A1 B3 j        UARTPuts("------------------------------------------------------------\r\n", -1);( l) {: i% L3 g' C. D# E, A
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
, G* S: J# K6 y- ~" T+ x+ D        // 产生波形
* q7 p) H# [6 v! Q$ u% R+ y        PWM1ABasic(25000,50);
; B5 L2 P! k% P& w
% r+ S6 L$ ^( j( C        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
3 |3 K- e0 g" e0 w6 |        UARTPuts("------------------------------------------------------------\r\n", -1);7 M- p' H" M$ e

  ]/ a9 i' B9 r) r' x
4 t9 ~) i. s1 c, ~  Y+ A% Y- u# m
; ]' a% U# r; T        UARTPuts("------------------------------------------------------------\r\n", -1);( e. s  v. p0 U9 K3 D- I; l% c
        UARTPuts("                    C6748 ECAP Test\r\n", -1);. m4 a+ c1 d/ Z0 [- |, B' l
        // ECAP 捕获初始化* d8 I" ]3 u4 \
        ECAPInit();
3 r& h2 Q* g( W        UARTPuts("Initialize ECAP.......\r\n",-1);
9 y2 U! W" j9 w6 ?. a6 \9 `3 D        for(i=0;i<5;i++). o* S8 L# `+ {
        {" s6 R( v9 N' [
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
7 e0 r0 z) d3 F1 m1 ]9 {5 X, Z                    ECAPRead();- B) U# K! }1 C! h( N
        }" s( n  w' b2 S, O
        UARTPuts("\r\n",-1);
- {& L; n0 ]& m5 m0 B        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);4 Y- Y2 K* K( |( U6 n
        UARTPuts("------------------------------------------------------------\r\n", -1);6 x+ Y5 j  S- w( O: W

6 {$ G8 m8 K& L% V2 n) L        // 主循环$ Q; j" J6 M: k/ ], N4 d
        for(;;)7 M2 d4 C# @, c, s9 d
        {
: h! q  \$ u/ `0 q$ F0 b1 W. N( C
        }
! A8 c1 E# P6 d1 o9 E: }}
5 i4 a6 b' o; w- V
: a) |( u! N1 p* m' z( l/****************************************************************************/( P8 Y0 l  h6 r! W3 P
/*                                                                          */1 t# L* _: Z1 K1 t; s1 x8 X* ?
/*              PSC 初始化                                                  */( |% G1 Y& O8 Y, _( z
/*                                                                          */: ~, C& }9 A1 u) W# K/ I
/****************************************************************************/; G. [3 k) I) Q! R6 L* ^
void PSCInit(void)
! @' l# v  L( j+ z: c0 |# I2 [9 c{; N9 N% X% P  ]
        // 使能  EHRPWM 和 ECAP 模块% q+ `% U! R" q
        // 对相应外设模块的使能也可以在 BootLoader 中完成! ]: ]0 ~% M9 W, [: H& J, D7 c
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
9 P6 Z9 O% M, \  q" a    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
5 j4 K  U' i# N& N- m* I}
4 @) l- h% }) g( a! D7 N5 j0 \1 G3 l. ~* `7 r$ D. K1 q8 i' m
/****************************************************************************/
" E) B) M8 |1 P$ h/*                                                                          */6 V; F5 d4 m6 v/ c
/*              GPIO 管脚复用配置                                           */& y% L* p% g3 L3 V  a  ]
/*                                                                          */
0 U* E2 X$ i" }4 [! d' F/****************************************************************************/
: w) p. B3 W- o9 Z! D/ b( wvoid GPIOBankPinMuxSet(void)
9 k" p* _6 u  J0 Q# ~* n9 R" }{
" d* W' V2 _5 y" z0 E, Z        EHRPWM1PinMuxSetup();& E3 h/ u% ^& d9 b$ l  w6 h; _
/ U" {5 A% E2 V4 D) U0 [; A* X
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)  L6 U; s% I3 y. Y) g& c  m
        // 作为捕获功能时管脚方向为输入! s& f: h0 z" I- E. ?1 e
        // 作为辅助脉宽调制时管脚方向为输出
8 k& f* m( E6 o8 X    // ECAP2 / APWM2  u% \9 {6 v0 k
        ECAPPinMuxSetup(2);9 t% W* K5 E  {5 g
+ K8 ]: N5 g3 g7 N+ ~+ M; \- H
        // ECAP2 / APWM2方向设置为输入
- j0 z# p0 S- P& Z2 r! c        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]8 n/ E# [' r8 A, t5 ~
}
* n9 ]& J, K0 y% u' _3 L4 \( `5 y: Q/ j% W
/****************************************************************************/
$ Z9 B* p% \. D/*                                                                          */
! N! `/ u" e8 Y) k3 M. b+ L/ ^% ~- v/*              PWM 输出波形                                                */
1 r) L& C  ^) J0 Z% F; B% T/*                                                                          */, q3 [$ Y' N0 [* P8 j) b
/****************************************************************************/) l/ {+ g$ N5 W0 D7 u& H2 z1 }
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
$ h$ ^' ^7 [0 A& S) ^. E8 O{# {1 A2 t, q; g6 n8 \
    // 时间基准配置0 e% s) V: n- B. z! w3 O; k4 i
    // 时钟配置
# ~, M( R' q& ^" x8 d5 n- S    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
( _+ n/ r. o+ b( e
% P- j" W/ s  i/ P- M& X5 i& i  f/ G    // 配置周期
+ c$ `. S/ G* ?( `" s    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
! t- ~' P7 T1 \( }                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);$ U" B1 Q2 E: b( S  q
; r- \. j/ D  F6 [1 ?0 E
    // 禁用输入同步信号# P1 z/ k. B4 E; H
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
! s$ y. F, E! |2 F/ Y
8 |0 m2 N  ~0 x/ ~9 l4 ]    // 禁用输出同步信号4 {, ?, k4 M8 z& k: ?6 [
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);2 t( D$ Z/ M) S( q
3 C/ }  q. e' V- W
    // 仿真(DEBUG)模式行为配置: M% y5 E5 g# t
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);$ n; g. s* H% G

; q1 }9 V4 l" Y    // 配置计数比较器子模块
& T8 K. d  S4 F- ~    // 加载比较器 A 值' c* w5 U# O% C2 O* `+ F8 ~' R
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
- R; h$ g0 w2 E4 D) l                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);$ Q' W5 T' u$ B* b0 p4 a
' @  Q( d" b, m/ _/ d
    // 加载比较器 B 值
, L+ I" r" z) `4 u0 Z1 \' u  M    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE," ]4 N# h9 ?, K
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
# i$ ^- O: o/ H$ v! k& R# A8 m4 W& h3 D. e9 Y, Y
    // 功能限定配置(输出引脚触发方式设定)7 e4 W  O, D0 e% o$ f: S9 {) I
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
& k8 \' G7 S. J# W0 i& Z    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,) a" s5 q- N# h; [+ T. d
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
2 r3 G9 Y' K. c: U. X! x                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);$ K$ m3 q! i4 X2 _7 l0 o' g
& Q1 R- K% }3 j/ P2 X  ^
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
  b! {4 @, b+ d& k1 P. g    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);" h- w. j4 b4 p7 m$ }! `4 i

& |6 W! ^/ A5 P/ z. B/ |" @5 k    // 禁用斩波子模块. [4 g3 ?  _( M; w
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
5 y- x' P! u0 L; c) Q: F0 v: a2 k! G5 i. i2 P& b4 u: O3 x4 i% L
    // 禁用错误控制事件
* k, y7 }3 s+ w' s5 Y. G# v    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);0 y* `$ x9 `" M6 O2 R* Z
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
0 q  S2 k9 M! M" E3 w) T" y) U
( X) ~3 T% U& _- t4 L    // 事件触发配置1 Q  P- T& e1 a* w, Z. O4 t
    // 每三次事件发生产生中断6 ^1 j; ]5 m$ |& F3 n7 l
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);/ B# x- ^2 x: u
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件6 h, r( H) ?9 f- n! o
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
* S- t2 E/ r- V0 T0 `3 |6 ~    // 使能中断0 A" M+ E* K+ ~4 T
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
7 c( o# C+ m  L5 J9 z9 e* {$ c% ~  v9 E& L
    // 禁用高精度子模块
5 h. S5 w. M, n& G' u( y    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
2 j1 q* H, ?- @5 [8 w
/ j' v+ q2 c' ]0 J6 w; q  f* A1 j    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);0 b9 k+ B% l% O% S! `7 _! x. M' ?
}
' X: _4 \' X- D# ^. r
3 o& C' x  L& |7 {) D4 ]5 Evoid ChopperWaveform(void)+ D- d& I4 F! u3 [8 R0 a
{
1 K; r2 v. i7 c$ P3 c& R4 `    // 50% 占空比
3 N* U8 I+ `! K5 C    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
9 @/ E) z7 V5 A% z& C* m    // 4 分频
' @, F! p& I8 ?* ~    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
5 R% i/ d0 I2 v7 n2 s% L    // 单个脉冲宽度1 I. t: b# ~" P3 z! j: _) }9 D
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);  ?& f  \0 u. \3 N: \
    // 使能斩波子模块
9 p4 J2 F/ f: b9 F2 W    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
# k+ O& z" G( W, Q$ i* f4 D}5 b( T, f- r2 J8 q

0 R  y' E6 l1 Y( A* y/****************************************************************************/
$ {% C( I. ^8 X( i' v' p$ E& ?/*                                                                          */
) o4 ^: a8 y* y) ]7 }/*              PWM 中断初始化                                              */
7 X+ m( ~+ s  v6 _. V0 H+ O/*                                                                          */
/ [7 h8 ]- |( m' \8 j  Z* o0 k/****************************************************************************/( s+ `9 P9 x& o: C3 E9 w! L4 n
void PWMInterruptInit(void)) o; u/ Y8 I- j* ~# w8 }) x8 W- ]
{* \, R4 F, q+ P- V: X
        // 注册中断服务函数2 c' ]2 v$ u# o! Z
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);  f; [  a8 G$ R
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
# b- M: V3 a" _* X+ L4 O& ~5 s; w4 N
        // 映射中断
' Y0 ~& O! m- K0 H9 t        IntChannelSet(SYS_INT_EHRPWM1, 2);
* ^# g* u4 h* i+ X8 Q& k. y        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);1 v. y- t; Z+ l8 v/ n/ E+ i8 v3 @

$ _) K$ f+ Y0 `, u- [! }* S        // 使能中断5 R5 p; Q1 s( ~& S/ ?( m' a
        IntSystemEnable(SYS_INT_EHRPWM1);4 {3 [! X: ?0 g
        IntSystemEnable(SYS_INT_EHRPWM1TZ);) i% [, d$ |: l) E1 w% n: V5 W
}# q) Z: u& W$ j. x9 w
! B  C7 @  p6 n& E- X
/****************************************************************************/
$ ]! Y4 r( k) P  e4 y+ Z) @  F0 H/*                                                                          *// o$ j* c# h7 X6 p$ ~" h
/*              ARM 中断初始化                                              */
! e: |) w8 a4 [' f. O# g* t; ~/*                                                                          */! }& x. g, g, c% g6 a/ [
/****************************************************************************/2 Z$ s# A. L9 @# Y# Z
void InterruptInit(void)
' {9 r0 N$ e; D6 J1 J( @{
3 [9 k9 l1 ~, O        // 初始化 ARM 中断控制器
+ S0 @( z3 V2 R' J: H( t1 |        IntAINTCInit();
4 l) N; i/ @' a) V) A% W, d8 U. M3 E
        // 使能 IRQ(CPSR)  a' _/ V- ^1 J0 K( j
        IntMasterIRQEnable();( L& h* m9 s( C' w& g
6 \6 y, r+ ]# R3 A: d
        // 使能中断(AINTC GER)# |  K  x! X2 A1 X3 D8 n5 G
        IntGlobalEnable();0 Y) W9 `: }) M% V- y" P% [
8 C6 |( A$ r8 P3 L& K
        // 使能中断(AINTC HIER)9 W/ C/ k" l1 |2 n! ~1 ~) m
        IntIRQEnable();
" u) r7 L' ~4 R- |& s}
: s& f7 ]  ?7 V  K: n
+ N: Z, l2 b: `% U5 H' ?+ R& s
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 显示全部楼层
/****************************************************************************/4 w$ O4 w% \7 e) o
/*                                                                          */
. j, z% ?2 R6 ?' T- B: Q/*              中断服务函数                                                */+ t. M) d: `! X3 |  |. u8 o6 G, J
/*                                                                          */
, J( n3 h: f  L0 h+ B/****************************************************************************/; A4 z7 b( p; T
void PWMEventIsr(void)
& q/ g& c0 r, s! T1 o; ?{0 C0 A; R! B# x/ S7 q2 p" K
        IntSystemStatusClear(SYS_INT_EHRPWM1);
; J8 p+ M3 y' K9 w- {) X
4 Q+ z+ y0 p, }    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);' R/ p4 E3 n6 g* m% k
}
* U8 E% B9 y1 P+ b) I5 O" f. s' W& K7 a6 X: G2 x" E! P
void PWMTZIsr(void)
0 H' w! L: P( t$ m{
8 S! p, {3 k: [9 f5 ]        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);% F* l, b+ {  z$ D8 v
7 R# y# v* z5 |
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
( H+ R6 \4 s2 c1 X0 }. \! P}
3 `: \6 r! h9 R& k2 w  w" N3 ^1 ]6 k* L1 \0 T# N% j4 R
/****************************************************************************/% ]1 p  @. N( m6 F6 \
/*                                                                          */( e" Z$ j' k$ t8 _3 C( c7 v
/*              初始化捕获模块                                              */
2 |. m' a5 }, }. T/*                                                                          */- f9 ~5 f. i! O+ x  |( k
/****************************************************************************/
! [! P* ~& R$ kvoid ECAPInit(void)' w  C! b. A9 B5 C2 q1 P
{& c( C: k7 P3 H2 f. W
        /*-----设置 ECCTL1-----*/
. H3 B- l8 V& T9 w( }" W        // 使能CAP寄存器装载: a6 r. e2 [- d5 U7 e
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
7 ~3 e# Y3 G( U  b) n) [2 m        // 设置预分频值.
( G" S) m9 _2 m2 ?1 F        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);$ v0 A+ t2 E0 y9 _& v) e3 W
        // 上升沿触发捕获事件2 t# [$ {) C! i& @! W$ j
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);$ Y2 j# R% T! ~3 X6 I
        // 输入捕获后重新装载计数器值.' J/ o5 Z6 B8 U! W) Q! o4 W4 [, |
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
2 |- m, U5 d) c& K% Y9 E" y. l, p0 g) I
        /*-----设置 ECCTL2-----*/
6 H9 q; E6 X+ y$ ?2 h, E$ ]4 L* w        // 连续模式
5 k# d6 U( ^1 x! n2 f        ECAPContinousModeConfig(SOC_ECAP_2_REGS);( }& L6 ~3 o8 N! e- _$ G6 m
        // ECAP计数器TSCTR持续计数
4 u% X2 `" [1 \$ s* W        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
7 A3 N5 Z" y" u  z2 u8 g        // 禁用同步输出和同步输入
: t3 }6 x' P0 v        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);! }+ e3 s- z# b* j0 }1 c
        // 配置 ECAP 2 为 CAPTURE 模式4 s, \% Y! i; O, R/ j3 C
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; |+ d2 R' L- {4 B* ^# `6 f* e, X2 d+ D
        // 使能中断
+ B4 B+ d, V. Z4 M' I//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
3 a# s4 b7 D; ]1 p}
7 T2 |$ V" i; J* O( q7 @
" N9 j1 }( j4 i3 W. y" _; |0 W; R/****************************************************************************/5 b' ]5 _- l" [* m9 e& k' o
/*                                                                          */$ B5 y  B5 S7 B1 w% b
/*              取得捕获结果                                                */
; |' q. X9 ~2 K0 V$ L; Z& w/*                                                                          */1 j$ r. T. U& b* X. w  s. |/ i2 G
/****************************************************************************/- E9 m& J( ^& q: K& j1 J8 o
unsigned int ECAPRead(void)
7 L8 w$ T, N  h( h" ~{% T, R. k: L& \4 Z; v& n. u
        unsigned int capvalue;
4 S7 V0 [% N5 t  T* Y        unsigned long frequency;% U7 A6 k" R9 k) c3 e
; P, {, {# I9 D, i
        // Event1 中断标志
& F- K& M2 e+ ~) F        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
" E" N7 B- ?; L0 X& L5 q  c0 b) A* O        {7 T: O4 h# r& f7 h$ m" l" N$ E
                // 取得捕获计数
! B, ]) H& e% l" l* P) e8 O6 f5 m                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);( U* Z9 F" Z7 k( K4 v" \- z
                capvalue = ECAPResult.cap1;, q& P0 b" E9 z

2 _/ |2 {3 F9 R# Q                // CAPTRUE 模块 228M 时钟主频
: j8 h; @/ N2 k/ Y/ c- N8 f; h: A                frequency  =  228000000/capvalue;9 E  ~1 G3 b# w2 V2 k
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
/ H$ H7 }7 u2 O- X& M: \1 A! T  P, f3 A0 o) F! ?. c. ]; Z
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
; \7 Z- s/ F8 ?3 i4 F& @! h: a, E8 T//                IntEventClear(SYS_INT_ECAP2);2 ^2 Q2 [& S4 Z) C  ^
        }
) [: n2 j( v9 B8 M- J9 d' h  t# G        return frequency;) w; A% ?& @6 j- N
}4 U/ u' v% }9 g$ A
回复 支持 反对

使用道具 举报

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-6-6 08:40 , Processed in 0.045907 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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