嵌入式开发者社区

标题: 请问一下怎么产生PWM波 [打印本页]

作者: 浙江第一帅    时间: 2018-10-30 16:46
标题: 请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家0 D% d  T& A4 ^5 x

作者: 浙江第一帅    时间: 2018-10-30 17:00
/****************************************************************************/
3 L* ?4 p+ l- L$ K5 z2 T, d# z/ ~/*                                                                          */
) B$ D3 H( Z& I) C/*              宏定义                                                      *// F- s& r' _1 M+ f0 g1 R
/*                                                                          */
- X1 s) J+ a% @5 R" j! K. f+ \% _! D/****************************************************************************/
5 |" m6 S+ d5 f; b! Z4 X2 Y% h# G// 软件断点$ Y( q9 `8 B. Z
#define SW_BREAKPOINT     asm(" SWBP 0 ");0 H; M& Y- T1 c
/ }" f" _  z+ E$ l
// 时钟分频
; w+ f8 ~9 l, t- k4 d#define CLOCK_DIV_VAL     228
1 L+ P! g  e8 K2 n) r9 U+ F; a0 Z$ q
/****************************************************************************/
! h& b" y$ |3 j" X. g8 e/*                                                                          */6 T( E) C3 [4 D; m9 o! ]
/*              全局变量                                                    */
+ m6 e& l' b* T) A# `/*                                                                          */
* h5 j4 ~9 o5 Q# v/****************************************************************************/& `0 d/ Y1 g: K) h4 k) e" w: |4 o
ECAPCONTEXT ECAPResult;0 N+ D: Q4 @0 [1 t

) ], R" p! F  O# d% \/****************************************************************************/
- p3 F( I0 {' y; q- L# N0 c/*                                                                          */& B" T+ K" L* [: M0 G
/*              函数声明                                                    */
( H' I% ?. o# R$ V( O3 g7 `/*                                                                          */: Q" ~6 ?, k" u1 w. k' O0 ]
/****************************************************************************/. S) \5 o, y, B7 Q+ y1 l6 h9 j
// 外设使能配置2 p2 I$ l9 F: j3 N# M
void PSCInit(void);
% n2 C$ x$ W0 }& O! K" J3 m" N% `5 V/ k3 q! j9 O: s; c
// GPIO 管脚复用配置) I& `( y9 A6 y' r" ^. W
void GPIOBankPinMuxSet();
9 b5 N; w4 J: G0 L1 b$ G2 ]- n
// 产生波形
6 ?& e/ N" F+ Kvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
5 X  r& W+ J- K1 ovoid ChopperWaveform(void);5 L" |* _/ M' D( h6 P$ J

0 h" m$ u# B) r8 V( f! F$ D// ECAP初始化和读函数
/ K% R& ?1 ]9 o" [  vvoid ECAPInit(void);
; B. l% ~- e" O$ Cunsigned int ECAPRead(void);% |) k* ~( c% y: [
+ ]! d7 b& {5 s! Z; Y* F9 a( A
//ARM 中断初始化+ I9 t" m# ~  |; e: u; _" t
void InterruptInit(void);
8 B6 r- j) j+ m
) y/ N4 Q1 R: F' b; G6 L// PWM 中断初始化3 g+ T6 m" _+ n$ x4 s8 ]
void PWMInterruptInit(void);
6 }+ }) R+ z/ O) h8 n) Y' @// 中断服务函数
7 _9 ]2 Y/ H5 ^* x// PWM 事件
% A4 u( J2 G( }. R; y% f0 @. ]! Yvoid PWMEventIsr(void);+ h# t) H- l# Q/ F
// PWM 错误控制事件/ ]/ c! T1 f9 x4 m" ^3 T/ f8 @6 X7 _
void PWMTZIsr(void);. a  h" K+ [' k+ ?& _

, u$ b  d$ M' e0 `, y2 ]  R/****************************************************************************// i2 ]$ j' Y1 v  l6 u/ ]) v
/*                                                                          */
+ J/ h8 L" y9 m+ _6 m- q/*              主函数                                                      */% @# g% y5 J' u! Q6 K- ~
/*                                                                          */
' l( P' ~$ C2 Y7 Q/****************************************************************************/
# J7 a) G3 A# lint main(void)
, ?, F4 N  D+ _& `* @/ ^9 o7 v6 g{
: J" Z6 s/ g" Q7 q0 N" t" `        // 外设使能配置
+ O$ f" G8 @) W: R        PSCInit();
( G. B: n0 @& H1 U1 ^8 l4 H1 u8 L  m8 c- a4 i) B
        // 初始化串口终端 使用串口2: g) ^2 O3 N; C$ o3 J
        UARTStdioInit();
& i& d5 h! W9 }( Z        5 J. h! V; |; Q/ @& u: f' y
        // GPIO 管脚复用配置3 _0 f. L% T6 _, i
        GPIOBankPinMuxSet();7 ?* Y7 g  b0 i. X

: R3 M( _2 a* Q. r1 C4 i        // ARM 中断初始化
. M( L  l# a3 J! z2 y  i' f        InterruptInit();
& M  {& u% n2 i4 Q. r$ d8 Z. d" {- _5 \& Z7 p6 ~$ ^
        // PWM 中断初始化; J$ l4 c. W2 d- V
        PWMInterruptInit();, [/ o2 P* N0 n* {4 ^, p) l
$ B/ v3 W  k5 x6 r) ~  N
        unsigned char i;. }: Z% p; A5 U+ b8 r8 ~
        unsigned int j;) z5 b' o$ `7 o7 {1 s% g% J8 {
) [% ~" Z( D" w( X2 s% P
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);$ E% X! k* G' U
        UARTPuts("------------------------------------------------------------\r\n", -1);% d! V) F5 l# q9 h3 l/ {
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);; f9 d  {5 C# A* V% |
        // 产生波形
* @$ [1 Q* K) w7 F. j* @        PWM1ABasic(25000,50);% E. t+ }* c" O; C6 _0 H

8 q$ M# B, B- B  Y        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);& i2 s% n  U2 N0 C
        UARTPuts("------------------------------------------------------------\r\n", -1);" x  Z; N% x/ J! M- X+ x/ `( M7 [3 o7 y

7 d  u6 i, i/ A( z2 P) O
/ {0 I+ D. r! @0 X
, B# f' i: Z, X  H  W0 K4 D/ w( w; a        UARTPuts("------------------------------------------------------------\r\n", -1);
4 _* t. x$ ]" N3 C6 r        UARTPuts("                    C6748 ECAP Test\r\n", -1);
3 d! f% ^7 H; _. Y' }2 b" A        // ECAP 捕获初始化
* }6 F- x& s6 T$ y        ECAPInit();
/ s2 l7 V0 j, |  h9 J6 ]5 y        UARTPuts("Initialize ECAP.......\r\n",-1);! ^6 U4 ~3 B# [" E$ ?0 e/ f) p
        for(i=0;i<5;i++)9 y' }. R9 y$ B4 `- g1 H, z. |
        {1 b, G! K5 y: A9 X) t
                    for(j=0x00FFFFFF;j>0;j--);            // 延时0 {1 U3 X, W: T3 d0 x0 n
                    ECAPRead();
, @0 y( M/ @, ^- N* y" }' q) P$ o# L        }/ x: R/ d( ^! t  t2 J
        UARTPuts("\r\n",-1);
# W5 L# n- F! l; z        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);2 o. S8 r/ J/ k+ y
        UARTPuts("------------------------------------------------------------\r\n", -1);
7 X( o( L2 i% u; r7 y+ k* C8 ]# Z, w3 ~$ N+ L% }* C3 R" P
        // 主循环& p# L# x. x9 Z* h4 Q# @
        for(;;)% o! X) t4 d5 ?1 ^. `
        {
( \/ N3 Y0 y& Q1 E' C9 f6 A0 M* Z' M! J8 q* w* x5 u
        }9 A6 }/ Y+ |, L: z0 M
}" [# j) }2 W. r- d( n( l" G' [

- c! T: V# Y9 t; Z" h  D- `/****************************************************************************/( P+ }% Q7 y2 Q; ]
/*                                                                          */
4 W+ {' K- i* X* H' `/*              PSC 初始化                                                  */
" A  n0 w4 P* _" {: M/*                                                                          */
" J; f! }$ M5 k  L, b6 B: A# y! u/****************************************************************************/# O$ [: p( u/ Q4 u0 B3 Y8 {5 k0 P6 }0 k
void PSCInit(void)
7 V. w& v# S, Q: q0 k{. i5 t* J5 a% G# u5 H2 Y
        // 使能  EHRPWM 和 ECAP 模块& _# ~( {( t& n6 q: o+ ^  Y# j
        // 对相应外设模块的使能也可以在 BootLoader 中完成6 ^1 T/ Y' N/ i! _# X
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);0 O2 ]% W  \* S4 H9 O/ k
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);. |+ \7 o" r/ |; n- O. J. O' ]
}2 I* ^3 W. S" I/ U- ~! G) U4 x/ V
9 S" s5 |) O' d% j6 H; j2 C
/****************************************************************************/, e! }7 u$ g& R' n- I/ ]; ^
/*                                                                          */( V+ S* a- `) n# t# J: f
/*              GPIO 管脚复用配置                                           */
- N  v* N/ _8 H7 `9 z/ _! |/*                                                                          */! R9 Z" ~- v% F# i7 {1 D8 ]
/****************************************************************************/
% X6 X" ?. \! H1 A6 s8 N* fvoid GPIOBankPinMuxSet(void)
4 J  ]( }4 t" Y" X! d; R{0 s8 w+ N( s" p% k" V
        EHRPWM1PinMuxSetup();( B; I" y" y7 a- b  J  v

& S# v* V, u% p, W( y9 z        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
+ q& U2 r( L" z$ H' i7 `( W        // 作为捕获功能时管脚方向为输入- {$ y, Q0 C6 D) |8 w- l
        // 作为辅助脉宽调制时管脚方向为输出' H! ^: a1 t& m2 @
    // ECAP2 / APWM24 V2 q, O/ J9 T1 U) B
        ECAPPinMuxSetup(2);
: p! P: b- n3 _9 h% ^! D- o& o7 J# I( y$ Q# P0 c; d* t/ o
        // ECAP2 / APWM2方向设置为输入
4 u7 G. C& c6 j        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
# n* `4 @1 n/ Z9 I: A( C1 X8 i}
+ W, L- ~/ p( b+ F
3 F6 c7 @6 y4 I- J0 z2 |/****************************************************************************/: t4 P) I' W) y# J% R: R! A
/*                                                                          */. v9 t. s7 \5 v: ?2 b
/*              PWM 输出波形                                                */
7 w% v  W# v! W7 j% [/*                                                                          */
1 @* g# @# r" ~6 w/ o, o/****************************************************************************/
; J5 p5 E5 r' ]& v% I- Hvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)& A! A, b' h' L  o6 s6 H0 D
{! B( E) ]6 F$ t; E4 `
    // 时间基准配置
) w. @4 k/ g, Q4 z    // 时钟配置
( v# U4 |' [) e' {! B. D1 o! V( \    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
2 x$ ?8 M) _8 O. g) ~' Q. ~& T5 s& e$ J6 F# i- x1 G
    // 配置周期( L! R* h) g) y* \$ A  b
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,, q+ u+ {2 O& m' ~
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
' g8 R" _% k+ e; J8 f# W, P2 ?2 `, ~, ]/ e3 p, x; W6 @
    // 禁用输入同步信号
8 R2 U/ i, y  i    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);5 `- d& L" I4 P' q

0 `9 O- H+ N3 r0 F) I5 K    // 禁用输出同步信号+ |; B. l/ w+ G0 f! e( L" l. |( z
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
# A& n& v* k4 i
# Q* g4 I# s  v    // 仿真(DEBUG)模式行为配置, y4 c1 S" C4 |% E; |
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
: L0 u' o, K0 l% f( Y6 ~8 K6 o1 @. T- O
    // 配置计数比较器子模块3 O) c% \# E7 h* f% s2 l: X
    // 加载比较器 A 值
' j! M3 e' ]3 ]% \6 H    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
8 g& Y5 u5 i* [+ {                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);! Y5 {! e: w- v* D8 N3 K1 [+ X
# ~1 B; u& N1 b  ^& ]9 N
    // 加载比较器 B 值0 k- X  o5 D, D- }( @4 `
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,+ u  P$ S" \/ E0 b  D
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);9 p7 s: I. O4 k6 [* U4 f

$ Z* R3 F' h, I1 A' l    // 功能限定配置(输出引脚触发方式设定)& s7 {) b- l% e- q3 t' o
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出' N# o; H; `5 g; L/ M
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
& V  g( m6 k* U5 V# U2 y( I                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
- Y: Z" d% y2 x5 T- R$ R                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);$ [8 j. F7 g8 a5 T2 R$ e
8 @5 J$ B, {$ Z/ B& T8 S+ K7 b
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
5 y2 w2 q0 y+ ?& f2 i    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
9 N- J" {" g; R2 N
1 h' f; n* I$ d, D    // 禁用斩波子模块
) x2 k! l  j& {8 ^  q: s    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
2 n1 Q" M8 I& L- `2 v* d! Q" D) q9 ]- G
    // 禁用错误控制事件
0 t* Q& T; e$ q9 Z7 I" K3 W# p! c    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);5 r6 M$ B! K: \) J  o: q
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
( K/ g) ~+ m. \- @
% L# v( J6 y9 t5 e2 Z    // 事件触发配置* }5 d  Y! T! V) |4 n# E
    // 每三次事件发生产生中断
% E) f+ v' b! e) ?9 S  y5 {    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
& X( Z+ }+ \" s  V    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件0 M+ h' h2 s4 W& y# U  z
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
# I% a4 t% d+ j    // 使能中断2 J" `/ g0 Z" h
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);& q/ C: }! e: X' k
" T' i( K& A& t  w) `" P
    // 禁用高精度子模块# ]! O6 Y/ t: L: J; v# R: a3 K+ X
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);- f/ d+ V9 t# ~& H1 y

) Y0 Z3 K; R& Y4 d0 R    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);; s9 e7 S1 s" q+ x
}
3 I8 ?6 y2 J9 T, j, N
- H0 K5 E  \0 evoid ChopperWaveform(void)- a( D8 {; [2 E7 a$ v. Q7 |( [* m
{) R) ?7 g8 A: a, o; b
    // 50% 占空比! z" i. K# C: a. n
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);: W1 t; d; u5 ^; U1 P/ r
    // 4 分频- J( r' l: T. f! g5 S# a) D$ U5 ^
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
8 I) @) ~+ d" N8 b$ v    // 单个脉冲宽度6 [# q1 }5 X% _( Q
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);7 J) D* ~- p1 R
    // 使能斩波子模块' f5 h: j, k/ ]+ g
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
# S9 Y5 G, A3 H' k; M. l+ k8 [}
8 f( L$ d3 c' }( b# l1 Y
4 v, O; R0 l1 n! B+ r/****************************************************************************/
& X/ U  `2 `$ n/*                                                                          */) j( K; f5 ?! F" B3 U
/*              PWM 中断初始化                                              */; S4 ~8 R9 R1 @# A
/*                                                                          */# j5 V2 c- S: V  u; e. ^
/****************************************************************************/
- k- I; a% h6 y: x. x7 wvoid PWMInterruptInit(void)7 G# B+ ]% l3 r! t7 I( l
{
6 I, b5 z1 ?7 U        // 注册中断服务函数
4 {! L, t2 \: O+ B+ j        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);$ X/ n. h1 @' V( ^4 q0 b7 ~& d
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);- {2 c$ }# g, B" D0 C6 Q! p$ @

' M* V' J* H$ ^" Z- t! X6 e        // 映射中断
2 f( @) X, t9 D        IntChannelSet(SYS_INT_EHRPWM1, 2);4 a; X2 h- S$ o, x" l: m6 F/ m
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);) s3 g5 u9 D# K" `( G: W
8 J7 a9 k% s- V* |, y8 l
        // 使能中断
" b- p0 b2 Y* i6 Z( {        IntSystemEnable(SYS_INT_EHRPWM1);7 m3 o  `/ w2 K; h8 n
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
; ]1 s/ T$ J2 `) ^" \}
: v5 r% k6 N# Y/ c9 Y9 b+ a( j. ]* i8 |" X5 I5 C  [
/****************************************************************************/
' e: [8 L* u, l/*                                                                          */
! F" L- S6 I  }9 Y# ^6 t: K$ W/*              ARM 中断初始化                                              */
2 F. s" W- F7 i/ @/*                                                                          */. a' H' r7 x% @/ t/ X
/****************************************************************************/
3 g8 L6 u' U9 q/ M9 Q; hvoid InterruptInit(void)0 _/ E2 k3 I7 l& M8 Q1 ~
{
" b+ [" M3 f4 W. E9 v+ I        // 初始化 ARM 中断控制器
' o) M7 E2 {9 u3 g' P        IntAINTCInit();8 O& I9 E6 Z3 j1 S& @5 p

  Q7 e# J% E" b( t' `        // 使能 IRQ(CPSR)9 X3 J; i7 w" k) i+ l
        IntMasterIRQEnable();
9 t/ d0 ?/ ]& I- m5 \
, m7 A! N6 {5 p# H        // 使能中断(AINTC GER)
9 S9 h% s( S5 g8 S        IntGlobalEnable();
! L! J5 g# `* l5 z5 `" Z
( m8 W1 N* P5 e( z' H7 }        // 使能中断(AINTC HIER)
9 A% @1 \* A9 L% V        IntIRQEnable();6 w& ~; M! J8 c
}2 ~' d1 l) S4 p. `: w

3 n; g5 ?+ j, [2 k+ I$ \) t, _
作者: 浙江第一帅    时间: 2018-10-30 17:03
/****************************************************************************/' v6 k' j: X& }2 `9 i0 ^9 K
/*                                                                          */
; D! [8 F0 q! S- v9 H/*              中断服务函数                                                *// A) U# W! v! Z' Z- T2 J
/*                                                                          */
! V" u7 @, {- L( R# @/****************************************************************************/# \. z: G3 s$ V, Y
void PWMEventIsr(void)1 N5 K7 |4 Q2 K& C$ b; b8 V2 Z
{
- q' ]( b' L( c0 U        IntSystemStatusClear(SYS_INT_EHRPWM1);
: a6 }  N8 J7 f/ d% c
0 H7 R; {7 i6 S    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);' n8 T3 p$ c* b3 P8 }
}' D3 u5 @( N; [

4 |/ T9 r5 b- l4 `4 ]: L1 ]8 Mvoid PWMTZIsr(void), m+ Y; b6 k& \0 C- S8 J
{
6 B5 Z' S4 m: O7 \. G: i- g        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
* U: {8 x0 |" ^; S( {+ }) Z+ _7 J5 x( k; d8 O% U( V
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
) M) O0 V1 j, M5 N' l0 `2 q}  n% G1 W5 @' e- ]

/ w3 J. u5 f1 c. R+ c2 C/****************************************************************************/* ~3 H5 h4 u* e- j
/*                                                                          */
$ _- q. m2 V7 y) f2 `/*              初始化捕获模块                                              */
' j" r4 w; c! N3 ?/*                                                                          */
4 B* X! h1 V! ]2 j: F, y# P/****************************************************************************/
7 F2 b  y- O2 Bvoid ECAPInit(void)
9 b6 F$ j. h, a! Y* X' S' g{
  N' J" K" P& W5 ^        /*-----设置 ECCTL1-----*/- I5 U, i2 |0 T7 {
        // 使能CAP寄存器装载
' g* F; H& Y! |5 |+ F( g2 i+ E        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
! H. O/ O4 q1 [! L# R' A9 P& k        // 设置预分频值.3 w2 B" F0 s+ m+ a/ Y# B
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
- L% K- c$ U/ b* @* f# e6 a8 T' P        // 上升沿触发捕获事件
( a. F  M- Y0 C9 r- g0 a1 l        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);8 S( B! C- _. {( j; @% i
        // 输入捕获后重新装载计数器值.: k- F( k1 g3 u
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
  f( M2 t; n- Y
* V! I0 x; |- U; N; g        /*-----设置 ECCTL2-----*/
0 z* y$ j5 x; j8 K, n; F        // 连续模式
& b- k/ r4 w) G) N- r* B        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
3 j/ ?$ L# ]5 ~' f. k        // ECAP计数器TSCTR持续计数! P* F$ E5 f" [5 b8 n; w  n
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);3 H  E) Z( T6 k$ R3 f& k6 x( l
        // 禁用同步输出和同步输入8 p4 g( N5 s3 }
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);& i% T* G" H$ G; V+ H: x
        // 配置 ECAP 2 为 CAPTURE 模式  A+ Q9 ~' C5 ?3 j1 ]
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
! M6 J" f' q1 E* C9 n% h
7 r4 g: D6 j- f. X        // 使能中断! V! e; K" p4 G$ a5 I9 @' a3 Q1 k
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);5 O2 D% n$ K( x3 a5 x
}4 c* k2 A- W+ {& `  s6 `, I

- m" |: b. `0 {/****************************************************************************/
3 e- L' B0 {! H( j6 s4 k' r# X" T/*                                                                          */. L# B" F2 @8 U% ^5 I9 E
/*              取得捕获结果                                                */
, A6 s: K( D# F# W2 v/*                                                                          */. z4 f. U( r7 L! d, r- ]( A
/****************************************************************************/
3 s, }7 A# R* u" a" @/ D" R3 l: U, _unsigned int ECAPRead(void)
: |6 L4 R% H# ~* ]4 z+ P{. [3 X9 _' p+ Y
        unsigned int capvalue;6 M  u6 U4 @7 i) \1 m) ^
        unsigned long frequency;# L" \0 S; f' w1 u  e
9 f9 V( I, Y, D
        // Event1 中断标志
% X# g4 x$ S3 Q# p        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))% h* m0 q4 A/ G
        {
8 a/ H; S$ I% E2 T6 q  C                // 取得捕获计数
( H1 m& B1 b0 J! v2 {' \" B                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
0 @- g! @( `- Z6 E" p: [$ R; K                capvalue = ECAPResult.cap1;
- H4 l( Q) x# r, W5 D# y  j4 Q) S
" }5 q' k  U! v4 q5 I                // CAPTRUE 模块 228M 时钟主频7 z5 e2 y9 W- M8 v; r5 @
                frequency  =  228000000/capvalue;
! a8 T* ^6 o8 ]1 Z) }                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);5 C: A7 V) v/ W0 B9 c, j4 I

. G" s" S# B4 d: y                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);! o  _+ f  w0 R- `6 Z
//                IntEventClear(SYS_INT_ECAP2);
! \  |- t& B8 c( E5 r: M0 `) z        }
: _/ ~% F2 t9 x! I2 [        return frequency;8 C' p: Z, z# q1 |
}
1 k: s" l7 r3 P, s+ u/ }& u: B4 j# j
作者: 浙江第一帅    时间: 2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者: 广州创龙莫工    时间: 2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
4 X/ V9 G! D7 c[attach]4202[/attach]
作者: 浙江第一帅    时间: 2018-11-1 21:27
可以给我发一份吗
作者: 广州创龙莫工    时间: 2018-11-2 08:51
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4