嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
" m$ D0 }/ |1 P5 l. v# y& L: l' I
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
# g2 F, Q: `+ s8 J
/* */
2 n9 c+ X/ o2 t$ a" E
/* 宏定义 */
: H/ a Q2 l3 v2 H& C; Q) Y
/* */
F8 U c( ?1 `+ G
/****************************************************************************/
" r* {) }7 C9 \2 \- L
// 软件断点
9 k5 O9 \4 ?5 N6 \
#define SW_BREAKPOINT asm(" SWBP 0 ");
" G# _8 a2 s" T0 o: O+ n
0 x, B, f! \1 v1 H0 {+ h+ j
// 时钟分频
# a2 ?/ D9 l8 G, h& J4 n. o0 Q- B
#define CLOCK_DIV_VAL 228
7 h1 H( w4 G) l# `" g+ S" @9 B m
' `. k# ]2 H- h: f0 K% l$ y1 G) ^
/****************************************************************************/
2 M. L/ A) o$ y) c
/* */
; ~0 R" Y) V' V, C1 a- S4 J
/* 全局变量 */
7 V! A. e1 C( q# V
/* */
! x3 W9 V+ n) e2 A C) y8 e& m2 {4 x
/****************************************************************************/
* G# }- v$ t% N
ECAPCONTEXT ECAPResult;
. h+ W3 _1 D; G& Q. b9 j
7 Y7 o; \' Q# z+ g5 @
/****************************************************************************/
% N/ H# j9 h: L+ a: a# U) J% A
/* */
5 B4 H5 I; `. A( ~0 {% _; d1 q
/* 函数声明 */
! g5 Q( N+ W N+ L
/* */
; W! E, X+ L+ d0 U- g& x( Y
/****************************************************************************/
- O( T- m" z9 Y6 |7 R
// 外设使能配置
" Y/ f/ b, n9 g! h0 A; K8 f
void PSCInit(void);
, \! x, I! C0 A0 ?$ [* ?
! w4 c4 W$ {, v6 N9 j" b5 j
// GPIO 管脚复用配置
2 C7 l/ c# } h7 a
void GPIOBankPinMuxSet();
- j+ \0 N$ w- {
6 I" n* q# s# a/ u1 ?
// 产生波形
6 {" `2 E& _0 A
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
9 n& L& Q, v0 G1 B _3 B: C5 Y
void ChopperWaveform(void);
k' Z3 \6 ~* C+ Y4 o6 n, @! {, }
0 z4 y7 B$ n8 a- w& f) e9 H1 _+ n
// ECAP初始化和读函数
) ~7 C, _. o {/ y: G
void ECAPInit(void);
5 X) X1 N% C* b
unsigned int ECAPRead(void);
' ~& S: G9 J; v7 _: s/ Z
Q4 L2 I; E3 D$ A
//ARM 中断初始化
" Y0 X* ?5 o. [: c* m% N
void InterruptInit(void);
' `1 b/ U$ n% @( E% }! Q
; f" Z8 F- ?' n; n$ F0 {
// PWM 中断初始化
* f4 {% V1 v& \# W9 Q! K) ?
void PWMInterruptInit(void);
) z: l- a8 g! V& O( G9 C
// 中断服务函数
4 D: b1 j- `+ D( ?3 l
// PWM 事件
- i5 i4 J3 n2 R7 F+ i( W+ S/ r
void PWMEventIsr(void);
9 w, G" W% _! w- s
// PWM 错误控制事件
4 O2 D O2 Q$ S) Z3 I0 W' l
void PWMTZIsr(void);
2 k1 L6 [# q, p
! L, |/ p3 s! o9 V ^: O/ V
/****************************************************************************/
! L, c+ U4 m* K$ k2 `( V( C7 s
/* */
7 ]* g1 V+ U7 T9 p! i0 K2 v
/* 主函数 */
/ g; `/ X3 M9 [
/* */
2 a5 L- S- {; c; ^7 q
/****************************************************************************/
' _" x4 Y" J2 G
int main(void)
, F0 `, N5 B) r. r* h$ U/ f" D
{
2 |9 B4 o; D# U8 i C P0 L
// 外设使能配置
. }! w: E2 c5 B9 ~" q
PSCInit();
9 F K5 E3 ?" O( C6 q) Z
1 S, K0 Q3 K" n
// 初始化串口终端 使用串口2
& j6 E6 W( C5 U0 V. [- N
UARTStdioInit();
, M8 Q8 s* R& s' E* I. p
! ]+ j7 ~0 U. f3 v; o
// GPIO 管脚复用配置
1 L: M5 \! v8 f2 A5 s( Z! E2 Y
GPIOBankPinMuxSet();
1 T% P" V8 C$ q& j5 ^ s
6 E! `4 s" }* x& C; [
// ARM 中断初始化
/ o2 j1 ^2 |8 Y8 F; D
InterruptInit();
! y( Z. F# m% K" ^
. [- y- e4 _/ s6 ~
// PWM 中断初始化
# P( K z- c& N5 Y# N: ]) E9 M
PWMInterruptInit();
3 u$ ^* `) a% S; h; ]: s
1 U/ L- R1 G: ?* M4 g! N* ~
unsigned char i;
( m* ]8 C" W& W$ _7 K
unsigned int j;
9 t2 l8 M2 f) f- P$ X! a7 M" @/ p
, S' ] K- e0 R/ z: A3 P ]" g
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
/ V0 F Q# I1 ^& ]
UARTPuts("------------------------------------------------------------\r\n", -1);
7 x. n* c) E* a3 C/ C
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
4 T" _. e6 R$ E, |( Y9 s8 t
// 产生波形
4 d$ p% ]7 Y6 W) Y* j5 v( @
PWM1ABasic(25000,50);
4 B9 F* C% G3 q# @
: t; v1 j n6 }8 `
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
' T# C+ F! X! x
UARTPuts("------------------------------------------------------------\r\n", -1);
- q) X7 Z: f+ [8 D
" v1 s$ G4 o. \# D4 o4 |
0 R. @) w3 l& C
; ^7 Q' I( d) l
UARTPuts("------------------------------------------------------------\r\n", -1);
7 U3 `6 f! r# S0 U) e T
UARTPuts(" C6748 ECAP Test\r\n", -1);
1 _: G9 }9 S% ?! z
// ECAP 捕获初始化
- L' ?4 J f& V& X
ECAPInit();
5 q2 P, E* i% R5 f# I' \2 y Q, U
UARTPuts("Initialize ECAP.......\r\n",-1);
1 T! g6 a. y% F# f# X
for(i=0;i<5;i++)
2 S7 S4 t" T; ?0 F/ s
{
: ^6 p ~' a P
for(j=0x00FFFFFF;j>0;j--); // 延时
9 s& v1 k3 M U1 L
ECAPRead();
% c7 C+ h: a$ ]7 Z/ }7 K
}
) r% P3 c8 D2 O5 J4 v
UARTPuts("\r\n",-1);
3 @2 v2 @0 H& z2 S: l H
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
: V9 C1 }9 j' \+ _, F! p% E
UARTPuts("------------------------------------------------------------\r\n", -1);
$ r, f: f" e6 ^# _8 \* ^
s9 y7 w; I J. D( ?( J1 h
// 主循环
4 I# z/ o6 M( b: [2 j/ V: V
for(;;)
' U, ]; H- J) {/ r4 W+ @
{
2 ]+ |: M1 ^0 F3 J' D: w) w
" \ E8 t9 ^0 N
}
R, Y& {9 ^8 K3 F# r4 s
}
; u9 \' c7 B- b3 Q( O( E7 P
7 D- k4 z+ G9 ?, z6 [
/****************************************************************************/
1 \; n$ G! E, d( C& W; I# [+ [( l
/* */
% g9 o( P5 U2 \0 y. [
/* PSC 初始化 */
; R1 L: m# {# L8 \# Y
/* */
, \$ o8 N2 T" ^+ W
/****************************************************************************/
' q2 W; [" u& @+ }
void PSCInit(void)
# X3 I# b# D6 n9 f: f, n8 l
{
. Y: b$ V9 V, l/ o$ L
// 使能 EHRPWM 和 ECAP 模块
4 g# w' c' f, y
// 对相应外设模块的使能也可以在 BootLoader 中完成
, X& N% j& a8 [+ c
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; S) t0 t6 g: k& X2 L8 j
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- b) v7 t0 I7 c- w
}
) b: [# e1 q0 i# x6 Y1 _+ T
" R8 b( P$ g* F6 N! q* I
/****************************************************************************/
8 k' P8 J( q$ Q2 o5 g7 N J
/* */
3 `7 a! I0 d0 c: t% d! Y
/* GPIO 管脚复用配置 */
" E2 P ^2 p K* I9 D: j8 U+ m1 m
/* */
, z' e! Y& S) |
/****************************************************************************/
4 G6 W: z1 S8 g( Y
void GPIOBankPinMuxSet(void)
( |+ v) Q$ l' B# L- U* \
{
+ n" o, L+ C1 B) B1 o4 s0 q% h
EHRPWM1PinMuxSetup();
' _# [% w7 P- `
) t- i9 |% X* d' |8 \ O2 l
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
9 K3 I" \, c# o- y7 J# m8 k
// 作为捕获功能时管脚方向为输入
' A" ~1 z5 k, z; G9 R
// 作为辅助脉宽调制时管脚方向为输出
1 ?6 X" F( B2 B" v Y. g
// ECAP2 / APWM2
3 i/ @0 a; g' v8 @2 u
ECAPPinMuxSetup(2);
: o" J. @ i/ a" J* b
' G6 T4 K0 P! U
// ECAP2 / APWM2方向设置为输入
; a. c3 P! R0 ]5 Q6 i7 E+ }3 p
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
4 d: U! `, ~2 L& N- H; S. S
}
9 K+ g# R( x* w* \
+ Q1 A6 P5 ~/ L* s y
/****************************************************************************/
" q1 _- o% k! \6 @
/* */
6 E0 y( K, `4 c: J+ o0 Z
/* PWM 输出波形 */
. a* J* b7 X: e9 @
/* */
1 y- ]* r( f, x* j% T8 ^
/****************************************************************************/
. C' F& q: s9 z2 I! W. A
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
- j- K4 F2 |+ o
{
0 m/ R3 @! t- @8 X0 |
// 时间基准配置
7 x& x& q3 r" D' R
// 时钟配置
* t4 B6 h* f7 \5 V$ F
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
. m, ?# _3 K: \* J# B G
( n/ ^* x Q8 y3 Y5 ~% D. C
// 配置周期
$ Z" D: F4 R& ^' W0 K, B- j; J2 e
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
" F) x$ F% _! E3 @8 y3 F
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
/ ? y1 h/ P% {) I2 [
; v3 o5 ]. K1 Y
// 禁用输入同步信号
6 f% _, a5 o7 I! b, S; r3 _& ~* J
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
) x/ m- X( B: l C4 w# }: b7 i9 y7 Z3 _3 K
) F9 k4 ]+ p0 z
// 禁用输出同步信号
9 c' v7 f) f2 I4 l% Y9 |! \! A
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
# Z; w/ o! W* h& Z* @5 e
8 P/ M+ z: A+ v/ B4 i
// 仿真(DEBUG)模式行为配置
4 X0 U7 I$ l6 l7 _1 ]: ]
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
5 P! R4 N$ f: M& ?; L( A( B' a
4 K4 R/ Z, k& G. `4 R, @
// 配置计数比较器子模块
" j# r A5 B* v) ~+ B/ I. A
// 加载比较器 A 值
$ c: C5 p' D/ O- F3 {0 T l5 t/ o
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
8 F7 s. [9 r) H
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
3 E9 ^+ w- i0 h5 |
) O! g) Y: V; t4 P- u
// 加载比较器 B 值
% J t3 H) n2 A0 f* H4 N
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
7 C2 c. w3 R- x0 Z) }
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
2 n3 v$ M7 }6 S$ k5 l
2 O# n8 h; z9 K' Y. [
// 功能限定配置(输出引脚触发方式设定)
% z% u& A: j" P. [
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
7 ~7 z& p! ]2 O# v
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
9 L5 t _- g8 X% Q
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
; v( _ x3 I$ V! E
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
* q% Z/ K ^3 r7 R+ X7 @8 |
" H1 \* M% L( b" L
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
7 r& J" ^/ R3 p& C. c
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
3 N }: W1 r. y$ K7 B6 @
6 j2 N. A% |! c( K
// 禁用斩波子模块
1 }+ d7 _- Y5 O
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
7 e9 ^5 {4 S/ Q' i7 G% R$ g4 Z
8 n. X( U& h( ? O# p+ ^' B. J
// 禁用错误控制事件
% d- O( h( U [7 ~; z- c( M
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
. n3 o. i4 m0 P% ^* v5 Q
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
9 v0 L0 o' ~# ]4 b
8 r1 m0 i2 W. s% C) R O J
// 事件触发配置
! x7 }& `% `/ \: ~9 a& s; {
// 每三次事件发生产生中断
# F! a9 j, U- D
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
* E/ M- { @3 a3 x, S
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
4 R2 h m+ `, \* ^& q
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
) b" ]8 n* Z6 f+ T1 p, q! Q+ E
// 使能中断
7 Q9 N6 K+ i/ h
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
5 I$ O( d7 u) x. W# H+ y9 \' X( h
! l: ] y0 K2 z! }+ O
// 禁用高精度子模块
% K# e/ s! [3 x3 w
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
' }9 D. G' O, t' c, _
9 ~( N( a) q# ~& p }5 m; e6 E! F
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
3 t& D' l# n1 O2 x9 d& Y
}
- P V* x4 m" {8 n! w" ~6 N
8 m6 W( T) E( s8 K; d
void ChopperWaveform(void)
0 R1 S% D$ s5 d& _0 B
{
% v& W# L P$ C. m4 ^; A
// 50% 占空比
" X3 x* R0 T* p. [& k7 c+ g& ~
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
7 Y5 B! g! K5 `+ x4 P
// 4 分频
5 S. ~: D. p6 o% f7 Q
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
w! K. z7 n7 c7 M3 p2 i
// 单个脉冲宽度
9 f/ I& L; V3 R& I1 T7 v( J% Q% r
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
) ^% }/ e+ Z8 U4 ]% G$ \
// 使能斩波子模块
/ D* u: U; h) e+ R4 U
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
, H v" z0 c5 E
}
) V& e( ` Y) G! z7 o7 j
" d& T1 o/ v6 s/ }7 M3 f
/****************************************************************************/
% B6 F& q7 O9 A2 g/ _3 _
/* */
_% ~' M1 b; \2 |* P- c6 o
/* PWM 中断初始化 */
2 N1 X% b- F& [" t8 b
/* */
+ a8 x1 N2 k% P: Z9 G& G
/****************************************************************************/
& y& K g1 t0 I8 p
void PWMInterruptInit(void)
! E. b( f# J) q6 D' x* n* i( ?3 a4 S
{
; S& e% G% k: `( R: F! N& F9 l" |
// 注册中断服务函数
5 `( K! E& R; m" W7 O0 x
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
1 i" ~) O% c) e
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
0 g" z, H, J* }$ m- o
# s( Z3 L" d- D2 s5 ^/ r0 G+ D
// 映射中断
% R6 u0 d3 O( L- A2 X
IntChannelSet(SYS_INT_EHRPWM1, 2);
, @2 M1 T! P# N' r( B6 y/ q' O" r
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
# v2 L' F8 y5 g/ [7 {0 O
6 i6 Q+ |; {8 z2 p. x; O! p/ r
// 使能中断
9 x1 S& k4 ^& k! t. W0 I& u
IntSystemEnable(SYS_INT_EHRPWM1);
( u }! ^. Y" E& ?* f! D
IntSystemEnable(SYS_INT_EHRPWM1TZ);
& |. }/ ~; B" \$ K- u
}
- R ^1 j+ h b6 |. F. l9 K/ \
$ D( _' X. I# m6 p. @, s' j
/****************************************************************************/
- e5 ]9 w# r/ U' S% G, h2 `
/* */
( z& R- c8 \- N
/* ARM 中断初始化 */
( I- p2 W, F0 b+ \
/* */
( c, C# D2 C! q% V% F! Q
/****************************************************************************/
3 [. U' G9 A d
void InterruptInit(void)
. Y- t8 ~8 \; _/ F
{
+ Z+ G- J d9 _
// 初始化 ARM 中断控制器
9 q8 Y G7 n! c p
IntAINTCInit();
4 _- ?. X* n. d
. e5 k1 _' ^" Y- C3 q0 m" q$ k
// 使能 IRQ(CPSR)
1 _- W' d K2 ]5 l) ~+ d
IntMasterIRQEnable();
/ B5 C) T4 }" \3 Y0 D
7 b5 c- E6 h3 N* W
// 使能中断(AINTC GER)
2 p& y3 N2 u) d: t
IntGlobalEnable();
9 [$ J8 O* [7 ?+ `4 P
4 M* s: O+ U! K! Z* h! s- }1 o9 ?
// 使能中断(AINTC HIER)
& `! y: \0 C4 i. j7 c& |
IntIRQEnable();
3 t8 z/ }! ^$ o3 h
}
# n! ~" L! i9 n
' y' {( w( ^4 }% D0 e3 ^
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
( B* m8 j H+ a
/* */
4 c) L/ t7 P. A1 F% L1 a
/* 中断服务函数 */
4 h+ Z* b5 S% Q7 _1 l. Z7 ~6 h* @
/* */
) i0 v' S% n8 I' P7 P! M) o% |! b
/****************************************************************************/
5 O- k5 z6 s- |
void PWMEventIsr(void)
$ `$ h' @$ G% \) B u# g
{
( Y: I. A0 K H$ [
IntSystemStatusClear(SYS_INT_EHRPWM1);
9 m$ @6 m- |7 X
9 Z8 G4 j( @. h, r B I
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
! [; ` _2 d% f9 i; Z, s2 | W
}
6 q3 e7 w2 V( I% J
% B% ]: r6 g6 W1 g
void PWMTZIsr(void)
' H8 o6 E& a( o
{
# X8 k; }# Z' Z. @
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
' d; V6 ~' ^# {% Z( f' v
9 {8 a/ ^* g+ C k, V0 I
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
4 \2 ^& U+ d( c
}
: A0 L' ~- _0 E9 J Y3 p
7 U# F. X. V& B* D
/****************************************************************************/
- V; M3 ]2 A. I1 N- S. s3 s
/* */
% { T9 n1 x0 M$ {% f# Q( F
/* 初始化捕获模块 */
9 a; M% `1 \$ N, O( i( W
/* */
. r5 a# \3 u( J( A1 J. f5 e1 s& X
/****************************************************************************/
, J& }+ a- a2 Y9 e
void ECAPInit(void)
8 d; y0 ?4 M- c: p# `: d# S, i( T
{
4 [0 A: O+ ?' o3 ?5 `, ]
/*-----设置 ECCTL1-----*/
: _8 m2 z$ j& `! v
// 使能CAP寄存器装载
6 J% J0 Y2 h' I! n$ z5 ]
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
; n0 U( A3 j" o9 p% V% F- ^! w
// 设置预分频值.
. O( a$ e( ?$ V! H9 }3 G; A
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
. Y D: `$ |. q" O) j* d/ F
// 上升沿触发捕获事件
1 z! \6 l0 y, f5 U: N( B, b
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
0 U/ a$ A8 I/ c- z
// 输入捕获后重新装载计数器值.
" r. `- i; N4 D" {
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
& a: @" r& ~8 A& U) \2 Y
5 c3 b) W: V$ E9 e0 ]7 x. {
/*-----设置 ECCTL2-----*/
, ~2 Z( O& \: q* X; h m
// 连续模式
' q4 R, x- Q2 w" O% l
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
3 J4 W" y7 b, y" m ?
// ECAP计数器TSCTR持续计数
2 N% i* }9 e. U) W$ I5 ^3 ]
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
$ Y" A, {, U- _4 t* G3 \
// 禁用同步输出和同步输入
+ x4 t/ }& g3 H2 k, }
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
% x* ~5 v9 E9 `% I" n" Q& O
// 配置 ECAP 2 为 CAPTURE 模式
% ] ~$ B6 [" E% h
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
% g, A) Z/ W' m, i. X. ? }
3 N$ D2 c, N' g% {
// 使能中断
/ g' d3 S6 j; I6 z7 H6 `7 R [
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
. v5 @! P) u6 H7 {$ V& _
}
5 H0 F" b6 k1 g# J
; R! l2 M3 k3 H2 Y, t
/****************************************************************************/
# V+ i+ k0 s" {8 j
/* */
8 w, f; a* v/ h
/* 取得捕获结果 */
$ c3 Q) t/ M7 d0 m8 G) ]
/* */
" |% f9 o; l% m2 K6 v" X9 L
/****************************************************************************/
x% J4 B( e+ e
unsigned int ECAPRead(void)
- l- k& ?1 F& K) w
{
$ e* y6 O0 {, B1 t) d: |
unsigned int capvalue;
6 [) D* w T9 ^0 O. `' C' C1 C
unsigned long frequency;
! x2 T* r* j& ?4 d: x) N
5 ]/ r* b. Q- v
// Event1 中断标志
3 B& j# `+ }8 `. p# ?7 q1 d: `
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
) X" ]8 J! ?1 x9 D
{
' p& }/ O+ Q+ G; w! o7 ~
// 取得捕获计数
* a* o: E9 \2 d' z9 s, p
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
/ `, |# k5 @5 }' b- w
capvalue = ECAPResult.cap1;
. X' m4 ~) s( h0 [
1 P- v1 x# ]2 v
// CAPTRUE 模块 228M 时钟主频
$ J M( _* Z& y7 ~ O
frequency = 228000000/capvalue;
8 f R4 |* k* P n, `3 k! T" n h
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
, x, J* e$ w! `/ S H
, I+ O7 J0 V- Q) [/ x
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
% X6 ~* G0 A t4 t" X) g5 F
// IntEventClear(SYS_INT_ECAP2);
9 X P6 Z* L; F1 p% F* Z, x
}
, V. r" k/ d1 s, x$ A" y4 w
return frequency;
, w- \4 z0 d- v) V. G: w9 F, _2 M
}
" k; O7 g4 M" ]; F! j% D# I8 P
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
& V$ @ V# g0 M/ {( D
[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