嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
+ \0 w6 ?. `! C6 L* M: S
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
" s) i0 J. H4 a# l
/* */
# G9 Z/ ^. E! T6 K4 ~* ^% J
/* 宏定义 */
$ Y* t' R. Y& A2 t6 D
/* */
# q9 \. p% o+ n$ f7 a% V
/****************************************************************************/
0 ]( }% Y2 c2 I
// 软件断点
" F5 U9 D( a! J% m
#define SW_BREAKPOINT asm(" SWBP 0 ");
9 P/ J6 L3 J; `' ^; A. `; U
9 Y% A/ G G* `( D. i+ U
// 时钟分频
4 ~% h @8 b3 b5 _& U3 e
#define CLOCK_DIV_VAL 228
7 t4 }6 S8 V, u4 M
- N! B4 U$ H8 w% U8 ^
/****************************************************************************/
/ y2 ]# a \, J8 _
/* */
& I: t- I) w1 h$ O/ n
/* 全局变量 */
1 v( g; u9 J# o
/* */
6 H7 a6 A' @- J9 j% j' B
/****************************************************************************/
& @. C- _( }' e% X7 k
ECAPCONTEXT ECAPResult;
% l8 F8 o& Y) d
. C! c( y$ J1 K* s) g
/****************************************************************************/
/ W1 u8 G7 y1 F. h9 Q7 W* b: J' Y+ O
/* */
. r: C. ~ M g i) `# B
/* 函数声明 */
: t& o! p7 z, N! u4 U G
/* */
# ^1 f9 g3 Y! A9 U& O
/****************************************************************************/
9 C6 ?: v7 ^5 O& s4 `
// 外设使能配置
3 z, j; j/ G- C ? `' W5 N
void PSCInit(void);
# Z# ~7 G# Z; M% n% }9 v: Q! d
/ ~6 U* f/ ^& F9 `/ K9 w. G5 K/ L
// GPIO 管脚复用配置
3 k* a6 `7 \; R
void GPIOBankPinMuxSet();
; Z% h2 k3 ]4 e0 ?5 T: e
+ N5 |2 X. r6 w r# ~8 D
// 产生波形
! e" ~( B8 Z) T
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
! M& M4 G8 ^* ~2 b. R$ M& j
void ChopperWaveform(void);
0 k3 B. \( Q( {# H
. T! Q8 s5 {+ Z" V5 m0 A" M
// ECAP初始化和读函数
1 ?( X7 x! n+ b9 `; w
void ECAPInit(void);
* M a1 ], l+ r+ ?
unsigned int ECAPRead(void);
* |1 h; s7 s, @% N: d
3 t& S2 X$ [4 f
//ARM 中断初始化
1 `' y6 d+ u. z {
void InterruptInit(void);
$ U8 a9 x' L4 _+ Q' Y) _
+ T- F e# F: b7 H" B# t
// PWM 中断初始化
9 [' [/ n; M$ Q9 r
void PWMInterruptInit(void);
( p1 h u$ k0 a" C3 n
// 中断服务函数
7 g% c7 Z( u. A6 B
// PWM 事件
1 ^* |3 i' f) J! N, D* `5 S
void PWMEventIsr(void);
! C% t) N6 `3 R! U& `1 j8 n6 K9 H
// PWM 错误控制事件
3 N$ U. `4 x1 c
void PWMTZIsr(void);
w8 D" ~6 p" e3 p9 ^
, A3 N$ w4 S ?
/****************************************************************************/
0 y6 B2 D& t% P# D8 `7 H4 w
/* */
5 V. J/ w$ X5 O) t( ^
/* 主函数 */
0 e/ ^ L* |; E
/* */
0 f# i; Z0 |5 j. f& c/ Y7 B4 p o# q
/****************************************************************************/
/ C9 a8 [" i% }! `# F8 g
int main(void)
( a7 t& |5 f2 b
{
0 n& B3 g! M' P/ @( w6 T. @
// 外设使能配置
7 ]; [( N+ _) S+ F0 [
PSCInit();
# ]) N1 O9 W) g- c7 A
: U; h. p" Y4 `8 b& M9 B0 Y
// 初始化串口终端 使用串口2
, h b1 y. L3 c8 v
UARTStdioInit();
, T' T; U: U! M# K
2 @/ N# C) x5 a* u; z
// GPIO 管脚复用配置
- k: o$ j8 k' @* G1 `
GPIOBankPinMuxSet();
# L7 ~, i+ Z" i; R! R5 U
& H! L/ x0 d/ N4 a5 {, ^
// ARM 中断初始化
, h8 `) K. ], z @3 t, N
InterruptInit();
2 g/ |2 G# g: o1 k' q: z
! {& Z5 W0 O) k) Y, h5 h) p) ^3 O
// PWM 中断初始化
# h, |0 A7 }) \: x
PWMInterruptInit();
, c# x3 S6 ^% R- t. J j9 ]
& r8 ^% g+ e0 e( l7 k" U
unsigned char i;
5 Y y' n; R) w) F
unsigned int j;
" `: _4 O# T3 r9 A
9 f/ g2 L7 L: f. X
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
* ]) \$ ]5 v6 v% o. \" n! G O& w
UARTPuts("------------------------------------------------------------\r\n", -1);
* ~- [ S3 C2 ]/ P4 K
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
7 v, [2 F# x' c
// 产生波形
7 C* u; O$ u+ S# F
PWM1ABasic(25000,50);
7 Y% u3 K D/ W& ]- M
. H. T1 w) w- N* L8 ^5 d
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
& m8 x0 d: Z9 ]/ m6 k+ @7 W
UARTPuts("------------------------------------------------------------\r\n", -1);
1 b) [2 a, \5 o8 F) L0 r
; p; b1 S" W4 s& B! X. W' y
$ B" u6 E- s2 Z3 _
, x" M' O6 A. u2 Z4 V8 ?
UARTPuts("------------------------------------------------------------\r\n", -1);
' U" ^! P! Z0 R
UARTPuts(" C6748 ECAP Test\r\n", -1);
: X* t' S6 W! r6 |) Q
// ECAP 捕获初始化
( Z' I7 r' L4 h
ECAPInit();
' I; @: ?0 c" ^/ z' w
UARTPuts("Initialize ECAP.......\r\n",-1);
3 B. @+ j$ f$ k" x e
for(i=0;i<5;i++)
/ f" l0 c, E' y9 F* B+ J4 P+ B
{
5 N( i! ~% ~1 B$ C# X
for(j=0x00FFFFFF;j>0;j--); // 延时
) L. ^! l. { E: ^3 \
ECAPRead();
: `- ]. Y8 V( O* v$ g. n2 b2 U
}
1 e H P) p6 g# f* H
UARTPuts("\r\n",-1);
5 y3 F& h0 W1 e# P% L
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
' I- D$ v# d+ Z3 l2 ?
UARTPuts("------------------------------------------------------------\r\n", -1);
. r0 F. p# C/ C
2 f8 ^. }* @# O& X) g1 v
// 主循环
. I# \( u/ T: H& d
for(;;)
M" W3 \6 ]- {
{
8 O: I- D( \$ l# ^
2 H: t2 u! E& T$ V* D
}
; m) _- M+ A- E
}
8 c# M) H. t# c& C
, @5 O* |9 t9 D- }
/****************************************************************************/
4 K1 z; S/ ~9 a# L
/* */
/ o% k5 f4 C" X- }$ L
/* PSC 初始化 */
- Q$ D' \) i5 q8 ~9 d
/* */
% A# u: A6 ^! ]3 x
/****************************************************************************/
/ ^+ t7 Z" \! G! z
void PSCInit(void)
: i+ v) ~2 Z( B2 ?( }
{
! Z$ k: |% G% o2 r! B* h
// 使能 EHRPWM 和 ECAP 模块
7 d9 w) b! E* q/ t+ c4 `1 v2 ?2 i
// 对相应外设模块的使能也可以在 BootLoader 中完成
( w5 T: W4 w/ E" N
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
! C2 @7 v4 s9 n' [" O/ ?' y9 Q+ J3 K
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
5 \ E4 D% m. Y) R6 w
}
, H) j6 u6 M) [! F
. H0 q( }9 `6 ?3 Q- B+ x1 P0 z
/****************************************************************************/
' W& b) ?7 J2 ]6 R
/* */
/ X+ B: q: i% U" |$ n( Q- U
/* GPIO 管脚复用配置 */
# l$ n: J1 a2 E2 B1 D1 r& v, D
/* */
8 z( d4 F) T! r2 L. g. Z
/****************************************************************************/
& X5 B/ h* g* n* b8 t
void GPIOBankPinMuxSet(void)
) e% S$ H. }7 O' F" I
{
* |- o" _5 U0 K' q! N. Y9 [- }' n
EHRPWM1PinMuxSetup();
( x8 v# t( p$ Z
7 N3 \% D, `* t0 e+ E
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
% F4 X! z) S% E/ ] z9 K% k% v
// 作为捕获功能时管脚方向为输入
" G- P, O6 g, `
// 作为辅助脉宽调制时管脚方向为输出
% k9 @. o8 e+ r& L# c1 ]; I3 g
// ECAP2 / APWM2
( [! V+ I6 g i# q$ \$ C
ECAPPinMuxSetup(2);
4 z; P+ c2 [9 |$ a5 k
1 z# e; q4 X1 y6 N+ w
// ECAP2 / APWM2方向设置为输入
) r& ?0 s/ Y8 x( W% x: i
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
( ]) P/ _! b: ~
}
% X" C$ T0 I- `) D* t
& i+ i+ E5 c1 h# X. i* m
/****************************************************************************/
8 b/ r* J7 G1 t& C
/* */
1 T& @ ~. i8 r, G- N
/* PWM 输出波形 */
1 ^' }3 L$ b4 L+ q, n+ }8 P6 O7 E
/* */
1 O2 W1 ]# S Z4 [ |9 o, z3 @4 p) ^1 P
/****************************************************************************/
" u/ s% w1 D' d& b
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
: b R6 Y5 c1 W$ _$ {- u! ^
{
2 |; a5 p4 j o2 I I; a. O$ f
// 时间基准配置
8 |3 m1 g, w5 |. b
// 时钟配置
. `/ K8 l8 ~- W6 b
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
# X" v1 c0 C2 n1 ^
- L6 K; O2 r! Z b: y7 a
// 配置周期
: O6 `, m' F- {. J. k1 [' k. ^( `
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
" T1 S# Y" Q+ V$ P4 t1 H7 i3 E
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
: b9 M4 e% o q3 T4 C) }
0 u" ~1 K! O2 N: u# x6 S' A- e8 }
// 禁用输入同步信号
" V5 b& J# C# m( @8 E" M7 g N
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
; S# M. c% Z/ T
, l. |( w5 a* N6 L: z/ ]2 K6 m
// 禁用输出同步信号
' s6 z3 t! F( |/ X
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
" {7 `) ]8 b0 |8 L3 }) I
6 O% I/ Z1 r; n+ i9 A, j4 K
// 仿真(DEBUG)模式行为配置
% U1 F* I) X/ y% S+ c% p* t# E% u5 E9 K
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
$ g/ ] `* O8 O* U! ^
, M3 A) ?# _7 Q' G5 I
// 配置计数比较器子模块
" H# Y) G" q# l$ A8 b0 b Y& K( G
// 加载比较器 A 值
9 g' L5 C/ f: }5 J
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
) n: {: F7 Z* K7 S
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' Z! H4 U; [/ W, ~1 g2 M
3 x5 R: b7 {7 z5 \/ Q: R; e: X' O
// 加载比较器 B 值
5 E8 f- O: [) x2 z
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
. k* I- C, V9 h+ w
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
. ~1 h" |7 O$ j( l3 t. |; ?
! `7 s1 m8 G/ u9 A
// 功能限定配置(输出引脚触发方式设定)
5 S0 _* _+ j' n9 U) r
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
: `6 Q# v6 W& ] I, R
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
/ x2 W. P$ y' O3 `% h
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
+ Z. M+ J. h7 g5 V, t
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
$ x* @8 a3 f& H8 S$ }1 o
6 ~ v3 N4 |$ Y7 x2 @/ ~
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
4 X9 \2 ] D2 T% V4 n: V
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
2 I" Z$ N" U& t. x' ]5 U8 q
6 T# e$ l+ @6 \9 D
// 禁用斩波子模块
2 F; {) Q6 Q; q g$ ?) G
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
. I- y) \; H0 V$ v9 V k
' K; c, I" s% P3 I
// 禁用错误控制事件
0 e; t7 t7 K( f& M: p, n! ?2 U8 F
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
7 i' s8 }" w/ F$ u* F+ N) P
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
) A2 }! V: x' o# z u
: h! F* a, v$ g# }2 ~% t
// 事件触发配置
8 Z% A$ J n4 y
// 每三次事件发生产生中断
; v5 U. D S' K" n
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
. Z7 R2 W/ g, T; T; A
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
g$ c5 R- {+ i( Q* d( T
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
4 f7 m# }5 K& L
// 使能中断
4 J! w" O# c& |
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
# Z5 W7 y2 y! u7 S, V$ H
4 u$ `3 X3 T3 j0 s4 s- R
// 禁用高精度子模块
) B$ ?, O: I* I7 q) a8 c
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
- Y( \8 }- s7 H8 k
5 g( O" S" t; E& M
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
+ |, l8 w1 x W) w2 W X! W' }5 `
}
4 X$ f3 X0 k1 R2 d
% _) I' F. ?0 x
void ChopperWaveform(void)
5 a0 [4 Z6 ~2 L, e) v+ R+ e$ ~
{
! r3 d) @5 ]. A! C
// 50% 占空比
4 {3 f7 `9 Z; L/ K" c2 X
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
1 f$ j" g. \6 S9 M8 J
// 4 分频
- U1 H+ T* K! e4 q& K3 J0 _+ P+ p
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
% d3 X* v( M$ i0 @# o
// 单个脉冲宽度
f S( i& S* d6 d
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
5 a! j7 p! a1 [& r: C) R$ P
// 使能斩波子模块
7 O; A; N2 y+ q, p# o# }
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
2 M6 M" Q/ ^( D, E+ L
}
7 Q: ~+ @) P5 K% z8 Q7 ]" P- D
0 d! x4 s$ I, P8 j
/****************************************************************************/
& T9 l) e5 g; U# m" F' I: e) [
/* */
( L# {' o' b" Q* y# s) C5 f Z
/* PWM 中断初始化 */
1 ?0 [" K" S5 d7 T4 R+ H
/* */
' t! J- V, U: T8 h6 S
/****************************************************************************/
3 y9 q0 `3 ]3 |0 k
void PWMInterruptInit(void)
7 R" s- t: y+ a4 f
{
$ s8 r- G+ s: x
// 注册中断服务函数
# Z3 v/ N0 F- a
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
% p+ G3 Z$ t, h9 k/ _6 R& e
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
S, w. J0 f3 x' J! W
6 ~" ~0 v; f+ t: B) ^
// 映射中断
" ~( |+ K4 B2 y6 n! a+ j8 G" x
IntChannelSet(SYS_INT_EHRPWM1, 2);
3 }2 d. H5 f5 ]' Z6 T3 Q; }) ]7 J* R* o
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
2 b" `6 i+ c6 X
& @- E2 n f1 J" |& y: |
// 使能中断
" B# I5 n0 K1 j6 Q. A' t
IntSystemEnable(SYS_INT_EHRPWM1);
. [1 @0 s8 g9 f4 S4 e1 P3 w8 s
IntSystemEnable(SYS_INT_EHRPWM1TZ);
" D8 V% o, C3 q) x6 G" v
}
# A4 u. o9 y% `
3 n8 v6 f9 W( P n0 O. G
/****************************************************************************/
" l3 U) j, @! Z
/* */
" }* ?: F1 U! L+ l5 K
/* ARM 中断初始化 */
# m! s1 W1 p6 s: [' b' i. `' U3 o* \" t y
/* */
- D+ y2 D( z' a. k1 L; ^* z
/****************************************************************************/
( h6 t! B$ A2 H
void InterruptInit(void)
- U3 | u" K, r' B0 d4 C0 z
{
9 U/ d H7 d' o) x5 K
// 初始化 ARM 中断控制器
5 K9 D9 B" t2 e$ ]9 y/ i9 b# R
IntAINTCInit();
! P- h- o8 h+ P/ l: @! |7 e. p
Z' i' X3 K5 _ x6 G- g) \
// 使能 IRQ(CPSR)
/ w1 }2 v( B# o+ a! l" ~
IntMasterIRQEnable();
1 P5 y: |! W4 N$ K: M. X; c
2 A) s* J3 e% V9 L+ U
// 使能中断(AINTC GER)
' }, o3 z/ \% Z& \4 F
IntGlobalEnable();
8 U; {* O' G6 k- \
3 ]5 s& d8 p* ?' x2 q, W
// 使能中断(AINTC HIER)
( F8 K i. W$ V r
IntIRQEnable();
* q& ?$ Y2 g8 @1 M, w6 y
}
! Q' r" R; `- e+ V" @/ O
4 d" N/ g. W7 ^2 N1 q# I1 A
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
0 Z; V. Z: D9 H4 m
/* */
( D/ C" h9 _/ d: [: m8 _6 y
/* 中断服务函数 */
. T, F; ~; }+ u u( b2 t
/* */
3 q, f2 J, T2 W$ h D
/****************************************************************************/
+ `+ _4 G" l4 @0 V% o2 B z
void PWMEventIsr(void)
& V" G" }* i* ~- t, H+ g5 {
{
5 H! Q2 |, r: z) M7 g6 b+ G" ^
IntSystemStatusClear(SYS_INT_EHRPWM1);
* X6 z4 g# q! {7 L
) ], D; z1 g) M+ {/ |
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
- I. s! `8 M; D
}
9 q/ G# O$ X! h' f a/ n
5 v- Q9 Q! a" }# J. w D0 I
void PWMTZIsr(void)
7 ]0 \. h: y! L" M% x- s6 J9 V# E2 l& R
{
3 H$ }4 w, _4 \6 S& |
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
% T; Y8 [8 e: ^9 Y* ^2 c. u
: V; y; H# o; s
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
* \. D2 s% y! b- k, _& z( B1 Y- {
}
4 n+ @6 u- Q+ ? t$ G: Q5 S
) s) C1 ~4 w- K; B- U
/****************************************************************************/
5 O+ j( P0 z0 N* ^9 `9 X
/* */
: d7 v/ v& R4 a4 p9 B* x' i M8 e8 e
/* 初始化捕获模块 */
; z! F1 X. t. Y' M8 M
/* */
- b; k& F8 G7 W' D8 g e2 K
/****************************************************************************/
7 S" Z7 h8 f& t2 `- E, h2 b
void ECAPInit(void)
. s& X3 F/ @& X
{
* U3 \" k5 u" s
/*-----设置 ECCTL1-----*/
0 R+ k k! U1 z0 I( r
// 使能CAP寄存器装载
+ _5 [3 r8 Q. t3 B/ n
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
) j K, M/ B% D) W( U
// 设置预分频值.
3 w; P& s2 l9 s0 J, R" h9 W
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
7 e: U7 u: d* c% \( c" D7 K1 a
// 上升沿触发捕获事件
/ I3 C: a- n, ^4 G% f
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
: m4 T Y. y: [% X* {
// 输入捕获后重新装载计数器值.
6 t8 G) s( w$ a! Y; T
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
4 b8 H0 T* k; L. r7 A6 @
4 N* t- X z4 M; m
/*-----设置 ECCTL2-----*/
- C0 y! I0 l7 A
// 连续模式
3 d' [8 M. U5 E
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
7 h q/ y, m! Z
// ECAP计数器TSCTR持续计数
" `! d* N" B. s( m' y3 j1 m% R
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
- ^! X: S$ J+ ?0 n! f/ _& n% v
// 禁用同步输出和同步输入
: i1 ^$ n& t% t/ p. t7 s2 s
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
$ ^8 w5 u) y: a
// 配置 ECAP 2 为 CAPTURE 模式
]) b2 c G$ O, ?. m% N. |
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
/ h$ }- m% D+ O5 A
, c C# e9 u; _4 O$ D
// 使能中断
- ?: J( {) ^: P! c" V% B
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
9 i1 ^* s3 b/ Y
}
, d! R* k2 T0 s
. e, R( j8 f A& L. H% |* h
/****************************************************************************/
; I9 }' p, [5 ~& L, N3 b( t( S6 f
/* */
, D6 I! |' T) y1 u1 U
/* 取得捕获结果 */
P4 c& b. W1 ]# M' n" U' X
/* */
1 R/ B2 ?% b. x. f8 h* G- z0 |. k
/****************************************************************************/
; ^. P M! Z! }: g3 E6 G) |* Q
unsigned int ECAPRead(void)
% N2 K F9 e! t8 ?
{
( C" v6 h3 w4 N+ K3 f( [ O
unsigned int capvalue;
8 |1 ]- {! q @" t! G
unsigned long frequency;
& R, |2 F# R1 a$ X
: G: W/ f3 ^, s9 G8 Z
// Event1 中断标志
, u# z9 Z2 X" Z
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
# Q M8 r5 I* V- {9 l
{
% l, h; |9 a5 R' D! Y' J
// 取得捕获计数
Y: B K! [' _3 M3 r- w( Z$ S
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
$ D8 \3 M ~$ n8 H. X
capvalue = ECAPResult.cap1;
! d$ f; n$ q, v
2 V# [8 Q- O! C9 k! K4 \& ]/ M
// CAPTRUE 模块 228M 时钟主频
, F; K; |# T: P
frequency = 228000000/capvalue;
* H9 M+ G2 ]7 C- X ~
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
! K9 d8 x+ t0 W9 M( i- q
$ s. W" Q. D5 T$ g6 A
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
$ j! }- Y; \( [$ s1 p3 I% {
// IntEventClear(SYS_INT_ECAP2);
/ _1 B1 E( F/ V4 A
}
5 r( R V# ?. ?' r$ V& n; w; s
return frequency;
- r" I8 S1 ], D; P
}
0 F& @$ m z% q" Z% C0 L3 e1 [
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
& j4 Y% c- M! Q3 d' L. m, f
[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