嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
5 k/ F8 k" b, L. y3 {( i
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
+ D) N% t1 x) {' d, [8 l+ g
/* */
& r6 z. S. c! m0 [
/* 宏定义 */
4 C# K! c* V3 j
/* */
( { k% \6 K9 Y$ @5 ]; _
/****************************************************************************/
6 C- Y" N- c( y
// 软件断点
3 A2 f2 C6 t7 t" |/ D
#define SW_BREAKPOINT asm(" SWBP 0 ");
0 F' M! d6 K) S# t. h" p4 j1 [ p# A
3 y( s9 G7 Q( _$ p8 W8 i
// 时钟分频
4 S7 t4 Z; j9 d+ M
#define CLOCK_DIV_VAL 228
' S4 M- k, C1 e _! b
P! k/ J2 t, D2 a; R3 s- N( m6 d
/****************************************************************************/
, N: Y" U. Y1 F! h; E7 {" g& u
/* */
1 C' c" ]/ X- S" \6 J
/* 全局变量 */
+ p# ~; k+ ?& ~6 c! \$ j# L
/* */
, a% V- S4 b( X7 U# S+ ~9 C! l) ]' b
/****************************************************************************/
2 `; {" F, G9 t
ECAPCONTEXT ECAPResult;
; ~9 |# }$ ~9 _5 W, X
3 v5 F { S9 E7 X
/****************************************************************************/
* r* l ~; f, I, ~
/* */
f: [1 ]6 u0 r, _4 S
/* 函数声明 */
& Q. t: p$ @; o3 K$ A
/* */
. D! @8 ^6 g! F _( [) k
/****************************************************************************/
5 S. e& Q4 O. I9 H" ?
// 外设使能配置
! f, ^: f- @- j) u
void PSCInit(void);
9 _- Q- C0 A. Z0 L+ L
2 ^3 q$ |3 a/ o2 u+ x
// GPIO 管脚复用配置
' W3 E" Z7 |5 o
void GPIOBankPinMuxSet();
7 G4 B# n/ P( m: C$ W4 \
& ~# S- m* R/ J& c: W- E; B/ P+ d
// 产生波形
u x2 j7 y. H2 k" }
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
* K" \. w \1 [+ y! ?9 z
void ChopperWaveform(void);
! Q, @: N8 ?6 t* y. z1 B- s* m( ?0 h/ A+ q
8 J2 R: F9 u% e! D) z
// ECAP初始化和读函数
# A' W: q* H. p9 y. R
void ECAPInit(void);
$ d. g9 `6 H" C; ?6 }
unsigned int ECAPRead(void);
$ p# d9 C0 G8 W! I: T1 z* a
% n; B3 ~+ L6 C+ t& u
//ARM 中断初始化
+ {/ n( I$ l+ e0 X. C
void InterruptInit(void);
4 |) L( ?" g$ T' |/ z9 B" f
8 @9 p% ~0 p _# K$ s
// PWM 中断初始化
* i" n/ M |: j& f
void PWMInterruptInit(void);
3 v2 I( f& @$ F
// 中断服务函数
3 k5 e; \, a- x" H3 N7 s* g. K
// PWM 事件
* b# T. e) ]# g+ }, x, X+ W
void PWMEventIsr(void);
& e8 F4 X) t* O
// PWM 错误控制事件
- _7 y0 k: x- S# ^2 M( _/ V* n. U i
void PWMTZIsr(void);
7 W/ y' F' j3 d! T
1 n: v! _$ D7 L* z* W) Y
/****************************************************************************/
6 }1 X3 m) H( c$ x, a
/* */
1 @! j1 Z2 E2 t: ?2 }. W
/* 主函数 */
0 y' Y4 q( D* k; J1 b
/* */
4 b& u/ _6 `! }
/****************************************************************************/
, d: g5 d7 r0 ^
int main(void)
" q5 C! T y+ u% o9 G. @$ L
{
" }6 \& D0 n3 I. z/ U
// 外设使能配置
4 t0 G' Y) n9 I; D. _; M
PSCInit();
: r0 b5 b$ f6 Y5 r, ~! M2 j$ W
: }+ W, Q, q8 v5 l/ ^3 ] j
// 初始化串口终端 使用串口2
: N8 `0 S2 X+ o1 L
UARTStdioInit();
4 r, u; b- w3 @5 I- X
, W& Y% H" ~) _* Y, ?9 j
// GPIO 管脚复用配置
" O$ _& _: W$ ]* N; M
GPIOBankPinMuxSet();
|3 l v, I+ R F2 i" m
6 ~/ D; x. W3 ^/ W/ t" B
// ARM 中断初始化
9 t& d4 d3 _1 ]: }
InterruptInit();
3 F5 J3 c' r- h" f
9 p) P3 U' ~- x) }4 K- U& C
// PWM 中断初始化
* p7 A: X5 y7 W' g
PWMInterruptInit();
$ [+ i# f$ Q( J1 |- u5 _+ K# L' B4 N
' w$ j+ C+ w" Q* Q% x4 c8 M
unsigned char i;
[: h" D" a7 x n! o
unsigned int j;
/ {5 x' W( D9 m/ d
4 ^) X/ d5 g' i/ M
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
6 R# `2 {6 n0 D
UARTPuts("------------------------------------------------------------\r\n", -1);
4 U2 u9 }' h# J
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
0 d0 T! x$ O2 z- V
// 产生波形
) q+ v% G& o" @ b% G7 `
PWM1ABasic(25000,50);
4 u$ ^% t3 J% C- v
) ]! k" N: C; a! y" K$ V, N8 k# v; w
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
5 j0 ]% c( v T q: R! Z
UARTPuts("------------------------------------------------------------\r\n", -1);
) ]3 |; y' @4 I. Z Y
) O- V1 v% c' R
7 z' w: u# }* D2 E1 _* u- T
* m i9 w% d, B
UARTPuts("------------------------------------------------------------\r\n", -1);
u, B. X2 ~7 B! L$ |
UARTPuts(" C6748 ECAP Test\r\n", -1);
- O+ Z9 J# A- l% C+ x
// ECAP 捕获初始化
& C6 F* D3 f% u5 K9 x) z
ECAPInit();
, P0 {; {7 h& e* w
UARTPuts("Initialize ECAP.......\r\n",-1);
: p6 u4 @6 N4 x0 l$ e1 r
for(i=0;i<5;i++)
- I# b1 x; F9 P! T
{
' m( J1 h0 a' H0 L3 @% m5 J: I7 @
for(j=0x00FFFFFF;j>0;j--); // 延时
5 B" y& ^% W. m& }& G- W
ECAPRead();
+ T- a h* k0 J( e: k& ^
}
# r2 t) ]; `- c% {
UARTPuts("\r\n",-1);
+ I, F/ @: q4 s& T5 p# W
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
8 i' V4 K& [6 o" i- w2 ?
UARTPuts("------------------------------------------------------------\r\n", -1);
8 E; j3 C- p+ X7 _
1 k$ X7 e+ ?7 k# }4 ~/ C* u# ]6 b
// 主循环
* Q- x( M5 D' M. Q
for(;;)
" e- @- w- @: o8 |7 I7 Q
{
9 y, z4 n' q' c: \+ X ^3 e9 e" Y
P9 O7 r5 ^; O; N
}
( b& g" L; B H7 ]4 E- _% [
}
' t) r0 I; Q: ^+ ?
, Z5 y" t+ ~5 k+ Y+ W' Y7 y3 d# o
/****************************************************************************/
/ G0 p" f- R/ j9 `
/* */
& ^* n }% l: f: W
/* PSC 初始化 */
$ ]" K$ Z2 `: n' ?# u7 e0 P
/* */
C# b! W2 C& r$ m" f
/****************************************************************************/
' z; Z3 P6 Q" V3 @1 y1 c
void PSCInit(void)
* i: n2 E! i& ~9 ]; [* w Q; j& p
{
! y1 u8 t2 v: @% [2 {5 v1 s/ }
// 使能 EHRPWM 和 ECAP 模块
, J9 h1 _/ u3 O% X0 x. `
// 对相应外设模块的使能也可以在 BootLoader 中完成
% \2 Q/ I% ?9 Y$ Q7 w
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
" S9 }! ]8 S1 U# U
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
# @5 C0 Z# {. t# Y
}
4 l" s/ M4 `% M& O# i% K2 h
6 o$ Q, A4 }8 y; z4 i7 G
/****************************************************************************/
! y6 I, b8 h! A1 J( F. x8 R7 G% n
/* */
8 k( I' x- {/ J% d2 q+ y
/* GPIO 管脚复用配置 */
% b+ }* [; q+ H/ [# h8 G
/* */
/ K X! n. T" T2 Q1 \5 |
/****************************************************************************/
" o3 ]& s0 _4 A
void GPIOBankPinMuxSet(void)
& I& n4 G( E; D) i* C8 i V I
{
* l" G6 J$ Q( [6 r; w
EHRPWM1PinMuxSetup();
6 G% i; u B- E7 |5 ^3 e" P
: \* C N* L3 ]
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
[' A4 ~5 I, B3 a( _' {
// 作为捕获功能时管脚方向为输入
W- U3 J) y: L- u( H& m
// 作为辅助脉宽调制时管脚方向为输出
- P5 x, I% l3 w* N
// ECAP2 / APWM2
^& H/ o* p4 v* K" S
ECAPPinMuxSetup(2);
, f$ n3 y: a C/ B- A- q. t! q
, ~2 l, l2 A* x7 r
// ECAP2 / APWM2方向设置为输入
) r [1 G, n- F2 C: s+ O
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
4 s! Y5 p6 J! q. |! e7 M
}
$ b: {& \) a8 q
, T+ K4 b" k# A% y2 Q/ a
/****************************************************************************/
3 r, Z8 N7 Y9 N' `
/* */
$ z8 H3 a' j) L+ N8 K! e
/* PWM 输出波形 */
A* h4 T: y0 s5 V
/* */
6 k9 ~. [5 L- `: M
/****************************************************************************/
2 c: C3 L4 G' w8 \; G8 ~
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
3 @7 P2 d; A+ T8 R2 E
{
* |% m4 z( k7 U3 P+ q
// 时间基准配置
* c6 Q9 Z: S$ ^. |7 @' U
// 时钟配置
& u) c. n) \3 Q X" i& ]6 D r) B9 y: g
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
# O8 Z5 t% ]( B9 Q
( F( Q- ~( |. E, ]
// 配置周期
. M* J+ j9 p. Z. V8 u
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
0 E8 J4 d% ?9 y$ W5 @# N
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
D9 Q- e( T( g
" B8 P. W X+ x! |4 [4 P$ y
// 禁用输入同步信号
5 O& j# \! `/ V
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
- T" H! v# O" T$ i
\+ T( f7 G- [9 q
// 禁用输出同步信号
2 G3 ]! W3 O7 p( w- u) v+ Q
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
" `) D% ]( b3 D p6 [
- t/ G \5 m( I; J& C# g
// 仿真(DEBUG)模式行为配置
2 x+ D' j" E7 C9 B
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
# O( Z9 c8 V) V4 ~6 C# ]
0 d* A9 E7 J0 D3 R* y
// 配置计数比较器子模块
+ M! F0 k) e9 j; W) C1 z
// 加载比较器 A 值
1 L) E% {% l* F7 d* u. [
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
* t& @4 m0 ] A/ X& j
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
& ~$ D+ r) N# Q3 x
h6 E; m; i* x2 m' l
// 加载比较器 B 值
9 n( b. F" _6 h, A8 p7 u
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
; E" X- B0 v/ A% `. S5 b
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 G3 D( A( S; W6 W/ g' W
: L, R+ }4 X3 l4 H! S1 u' |
// 功能限定配置(输出引脚触发方式设定)
( k( W# L- A2 N3 }* ?
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
/ O+ H; ^0 d4 m0 U `8 j7 G
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
# M) x: [) X" v3 |- q% I) l
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
K/ [0 \- A1 s
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
$ W8 T: A# o! [: {* B: v c8 L
k3 ^* S& S/ [* [& I$ u2 j" o1 V. B
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
0 N: J( b# ]' U$ Q7 F
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
, }; a: t) ?: ?' F7 j
: E# V" t. m* X- M D1 k+ F8 o+ i
// 禁用斩波子模块
* P* G& K5 Y4 s3 ?
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
3 x& t* v$ a. }- o$ }' Q
8 p$ y$ b1 Z0 o6 P8 `
// 禁用错误控制事件
/ }. o+ ~) w* D( l0 D8 c: w* o7 [
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
& \) g9 J1 Y& _& P# {6 F5 N
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
; w1 X g, _1 M; u2 E
/ r& L- p4 d; W4 A2 L7 O
// 事件触发配置
7 S3 u0 Y: }! P3 Y
// 每三次事件发生产生中断
7 | G0 \7 j0 Y# _0 d& R
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
/ n" Z1 Z2 H! M% q! A7 {
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
$ e: `/ K1 n N! y0 ~, f
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
' ~6 i" U9 j" Q, J
// 使能中断
9 f5 G; v9 w4 B6 w% X; F! C
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
2 y3 h# D* z1 a: O6 z" P
+ C$ j1 r2 C! D
// 禁用高精度子模块
( L0 f" p+ |1 J
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
' U2 e( _( P* F, ^
* z F2 V4 T9 F. @) v7 I
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
4 N3 H4 d: Y* Z: ? O0 y
}
( J& w+ W1 b6 Z9 k, ^' ^
- B! N2 p% _( O6 R2 P6 |
void ChopperWaveform(void)
w0 ?% A9 |4 a' v
{
8 H0 o! ?' I# Y% U/ W
// 50% 占空比
8 x/ l% [: e5 F2 F: k
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
3 Z+ y, X9 J+ F* {8 u1 b
// 4 分频
( a0 ~) |- p! y! [
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
6 j# V5 u3 H6 n2 u" r _5 Z' M1 z
// 单个脉冲宽度
& E+ ~: t6 j& e% H: C% Q `
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
. F" N1 {* {, k6 e+ Q
// 使能斩波子模块
: a' Y' e8 T* L8 R# q w+ o
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
3 P1 ?1 L1 ]; p: ?' c2 A( h
}
7 c% e3 y. V; n6 y5 g W6 V
, @, _8 p& y1 t
/****************************************************************************/
) S5 N9 `' m; u9 y. q c
/* */
6 i4 H" V0 ]% q+ L
/* PWM 中断初始化 */
' o0 y( |+ j$ u( ^
/* */
, p: S( M1 ]5 j3 h! z
/****************************************************************************/
2 ~$ J$ X, Z @& t$ N# f" @
void PWMInterruptInit(void)
; k5 b2 v+ y$ A, ]
{
, H6 Z1 \! g2 G; N5 F, f7 p
// 注册中断服务函数
/ n4 a3 E* Q" K5 q+ h) N+ P
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
. ]" F% K+ [9 q2 A" d! M
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
4 r( C7 Z/ [# h& `
' l1 |& h6 i+ z8 r' r
// 映射中断
& x! r* z; }: m7 W3 Y+ @2 O" {
IntChannelSet(SYS_INT_EHRPWM1, 2);
! }# h3 [. s" p, }3 B' }
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
\$ Y1 g, a+ E
( i( H7 k9 Y9 \' A
// 使能中断
' C3 m ]3 V! j" b) W
IntSystemEnable(SYS_INT_EHRPWM1);
: h0 z, E0 ~8 U x" n. i+ `
IntSystemEnable(SYS_INT_EHRPWM1TZ);
5 A& ]1 S( T- |) C5 {
}
: Q! F: |/ H* Z, n1 A
2 m; v1 O( ^. ~" {$ M! v. Z
/****************************************************************************/
6 x% X! F' Q- }6 c3 Y7 a# B/ H
/* */
3 c) q4 A2 ?3 c' g7 ~, M: I: }, v
/* ARM 中断初始化 */
! z9 _/ d( C1 F8 r- \
/* */
; |4 m& V" ^: u; ~$ X
/****************************************************************************/
: x$ q2 V, M3 L
void InterruptInit(void)
& j m& l4 l* k- d, F
{
6 ]; Y: h2 p6 b+ ~! s% i" e
// 初始化 ARM 中断控制器
3 D8 I& F c2 X5 u
IntAINTCInit();
7 x6 w: P) L' N0 Z8 x4 L
$ X5 z0 X. F! A! g U& K, C) a6 m
// 使能 IRQ(CPSR)
( Z2 ^, w- k) J" M! y
IntMasterIRQEnable();
! y4 g F) z$ o# a( E
! M9 s7 r5 ?" m/ ^8 r
// 使能中断(AINTC GER)
: Y$ Q+ l1 K8 q& ^) D" K
IntGlobalEnable();
, L: l4 ]5 D& J( ]9 {! l$ L
9 }+ x$ Q1 E4 M
// 使能中断(AINTC HIER)
0 ?% E, N! r# j/ \% P t. |! r
IntIRQEnable();
* ^* G8 w0 @9 I0 [7 [
}
8 M% [* N$ ^, h9 g P
& z; g6 K( |/ p0 l/ h
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
" Y7 e. p; p p. u5 E
/* */
, u; }, D6 @# q2 f/ x
/* 中断服务函数 */
+ Z$ y0 N: Q0 V5 J" N. {) i+ G7 g
/* */
7 w1 x% A$ P$ n
/****************************************************************************/
- A* P7 Z, D* _" T* j0 c& a+ i
void PWMEventIsr(void)
& b* E% T7 `# x' p- `+ U7 F; d! v
{
# }) \8 \8 R0 @; _& j# @; {7 u) v
IntSystemStatusClear(SYS_INT_EHRPWM1);
* U7 a4 U9 _& n/ `8 \$ r8 O2 L
1 q+ M% \: |- I' e8 F7 _8 o
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
4 Z$ q2 a- A* s' X# T) |
}
0 @( ^' h, `& z4 S6 x2 l2 l# N
8 Z1 e0 y+ A% {8 Q% u0 c6 \+ j
void PWMTZIsr(void)
4 g! d/ o) j, N/ n
{
; Z; K, n f; W4 |
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
# m; A+ N; z4 {
3 f1 v4 }3 Q/ I! r
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. |3 Y& T( [5 W2 ^% B! g
}
1 _1 R0 S: N/ ~. Z) s1 G
6 P" @9 H& j# \* S" P" G
/****************************************************************************/
% \4 A3 Y0 \5 ?' l" V5 ^, W* [2 c" y
/* */
" b. g- t$ z1 _- _
/* 初始化捕获模块 */
- X0 |: W! P3 U; |* [. O# q
/* */
6 h% e' ]5 p/ o% G% C
/****************************************************************************/
' p7 M) _* t: m3 \" `
void ECAPInit(void)
4 X: f' F* i6 M7 m3 \1 x& D3 z: @
{
) d1 D& {1 [1 p: F" e8 ~
/*-----设置 ECCTL1-----*/
a5 R. }6 P" v6 s9 Q1 u7 y' ^. r; G
// 使能CAP寄存器装载
1 n3 ]; W3 m/ L( B, ]
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
+ q" H0 [5 q* R. P2 W# G, U) ?2 ]
// 设置预分频值.
( y' z& m5 ?! v8 T% M* b$ b
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
! |! @3 @7 p `
// 上升沿触发捕获事件
* U: O; r; H$ G/ K4 z* z
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
8 E1 ?6 `/ {9 m
// 输入捕获后重新装载计数器值.
+ O, M/ G7 f* p) @
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
. Y I2 Q8 P- A6 s% p. Q7 a
' q/ y+ V7 N6 @0 `2 H/ ^5 d6 K
/*-----设置 ECCTL2-----*/
# Q0 b/ @, V- [) M* k5 q
// 连续模式
- ?: e, U8 i5 {9 f+ u" y
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
% R' ~! Z) h: K
// ECAP计数器TSCTR持续计数
) {, D' H+ V5 \
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
% X" J5 k$ ?: n: C$ q- g7 \# e
// 禁用同步输出和同步输入
# K: z: \% ]/ h7 R
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
, X' o" V1 z9 v8 w# J$ T! r
// 配置 ECAP 2 为 CAPTURE 模式
# [3 S. q" y0 n- s
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
* a5 x: O% ^9 g: S( Q8 V
5 m* m1 E, n, u6 X2 E
// 使能中断
3 h+ g9 r4 m% c% T5 |
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
; }8 }2 q5 n) I' u5 B
}
9 q! D ]1 ^/ h
) s1 r5 ^2 o$ I7 z
/****************************************************************************/
. w1 A; @- Z) B+ m
/* */
. a$ b7 F; ?5 c6 D# ^2 z/ Y: Q5 X
/* 取得捕获结果 */
$ b" Z' k* k: O. W0 w
/* */
& n2 O* p" [5 k/ I
/****************************************************************************/
5 E4 d) B8 S3 | l5 C B# T
unsigned int ECAPRead(void)
% U3 l1 s, v `: @- T% I
{
. t2 i+ a5 M' w; c
unsigned int capvalue;
% p$ K# o0 [- A3 J* ]. i3 Y
unsigned long frequency;
6 k& N* K% v9 m v, J
4 e; [% e5 O) p9 Y" @) h4 p
// Event1 中断标志
! K$ [' o! k/ r9 q0 S
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
- ?: q! Q3 X# n( W
{
. F* o) A6 U8 \7 c7 _9 T8 {( P3 @
// 取得捕获计数
# L1 Y9 e/ `5 j9 j
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
( `" M1 M% W% P- {6 B3 ~" C
capvalue = ECAPResult.cap1;
/ A. C" X7 j8 U1 g
6 X2 U' W5 |8 _ w
// CAPTRUE 模块 228M 时钟主频
& E; C- x9 X, U1 Q. a
frequency = 228000000/capvalue;
5 }6 ~ t# d% r1 o* b6 M' G1 y7 t+ u
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
0 }4 T( v! p2 ^: S1 M
$ A/ k* J6 ?1 a' q: I3 B u; D. ~
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
& T$ E! `. K4 k% {4 U0 ]
// IntEventClear(SYS_INT_ECAP2);
1 q3 R8 J8 b5 k, J* S5 v
}
, c# ]4 q( V: o0 i3 w
return frequency;
5 Q9 p4 P! T( G \& ^9 x
}
$ I/ U& K1 }" p2 T
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
* N) @' Q4 ]4 C- p+ Q$ T9 ~
[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