嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
0 V! S! l- W* I* ?0 d- l
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
3 G$ [* L+ w3 h0 ~5 n
/* */
/ ?# @. V" c( i5 A+ X/ S! F
/* 宏定义 */
( T. | ~1 u1 v9 m \6 R
/* */
/ C3 P" D3 g; { Q6 q9 J" A
/****************************************************************************/
5 @% [7 |4 D. K6 `
// 软件断点
2 H/ R+ @! k# V/ J, @- e
#define SW_BREAKPOINT asm(" SWBP 0 ");
8 x! C) u9 X a
, E5 H/ P, X; B0 d- E6 w# R. \& ?/ \
// 时钟分频
2 N& W8 E. ^2 i; e: T! _/ o
#define CLOCK_DIV_VAL 228
( J V3 I0 a1 D2 B1 [
2 P7 W+ ~# M7 I/ k
/****************************************************************************/
- l5 r/ G! }2 K9 Q
/* */
/ M5 Y0 Y1 \+ ?( F
/* 全局变量 */
4 ?8 }3 i7 L8 B* ?" u
/* */
: P- U" F) Q, X7 E+ Z
/****************************************************************************/
$ }; v" _1 W$ z+ `
ECAPCONTEXT ECAPResult;
3 D! i" A! K" O5 r& Y
* [/ I" J$ e6 i# G
/****************************************************************************/
1 p2 Q# K2 c, y$ l
/* */
7 I! n/ ^& i( _. J. O
/* 函数声明 */
7 {5 O+ @8 P# E' J
/* */
" }3 ]3 _, W' B3 ^" N
/****************************************************************************/
4 F' o0 Y( a ~. G2 W
// 外设使能配置
2 F% N' y! ~; w, F) f8 A
void PSCInit(void);
+ ^# m/ z6 }2 x3 h
' z+ i9 @% i3 d0 N
// GPIO 管脚复用配置
( y6 N" h( A0 U( X2 E. n, c
void GPIOBankPinMuxSet();
3 A: S. L- J0 n$ s# C$ f5 y' K) r
& H8 ?/ O% ?8 m1 K
// 产生波形
( ^ \9 M) ~9 u0 ~9 T3 Q; u5 h
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
: ?! V6 n1 T6 y# \0 t9 P q8 s0 `+ ~
void ChopperWaveform(void);
) H1 k" T7 b7 c) R" L' O4 {
" N Q( V$ K& U
// ECAP初始化和读函数
+ a- K( y2 I* G1 w$ [
void ECAPInit(void);
" y1 u; k+ V- k8 R
unsigned int ECAPRead(void);
: k% a: u. k- F. v* s
& B2 I; u; k# d# Y/ k* w
//ARM 中断初始化
, Y- r) |" J+ W1 B" q. ]% {/ y5 n' h
void InterruptInit(void);
2 F( w; A1 a$ d: ?- A3 N9 y2 L
; Z! Q) b. l8 Y [
// PWM 中断初始化
+ _! `! o8 K- T! L! y$ L; E* e
void PWMInterruptInit(void);
$ x" X" s- _; W
// 中断服务函数
8 O) ?5 z( K7 c8 _* w: ~
// PWM 事件
! R" k, {: ?, g
void PWMEventIsr(void);
}4 S% @" `& e, W( ]
// PWM 错误控制事件
# ]- `# k; k. V, j; M2 E
void PWMTZIsr(void);
0 T! s# k' a* V
, C @ I2 z$ s9 i
/****************************************************************************/
1 o( Y& O A+ k% r0 m# [8 D& W
/* */
! x3 C3 Y" y; `7 M
/* 主函数 */
5 |0 s6 V$ M ]* K$ d
/* */
+ {: s. S G. c5 P' \! ~ T
/****************************************************************************/
! V4 r. }0 r; C
int main(void)
- `. a! o- B- d& O% S
{
& C/ g% t! q, q/ f& y
// 外设使能配置
K: z( G M. [* t2 C1 Q' j7 s
PSCInit();
% b( R9 ^' ]4 V+ Q9 |2 }4 d
$ b# H# \ h. X" _1 R7 [
// 初始化串口终端 使用串口2
/ D1 I. v+ m$ x
UARTStdioInit();
" K0 j* n% G" D
. q; W/ x. B1 k7 |7 o `9 @
// GPIO 管脚复用配置
) f: h+ h- _3 ], Z
GPIOBankPinMuxSet();
9 R' P8 K* E" q: e
: I, A* |4 `2 o
// ARM 中断初始化
$ A0 f5 P; l- L, B R2 ~
InterruptInit();
" J. V9 p" ^/ }8 z, T1 c' T3 H2 \* p
* T2 h0 n7 n& @) P, y
// PWM 中断初始化
0 o; t( q" H; w8 C# L5 ]
PWMInterruptInit();
: i. n1 Y; n# s
. e8 q& k5 M) F$ B" g$ h
unsigned char i;
( T R- X0 X2 Q# M5 s
unsigned int j;
: ^; \ y A" U2 }
8 s. j0 X3 {1 B1 {5 B- O$ n+ e: A r
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
' J9 B6 T; [& E$ u. g, M4 T
UARTPuts("------------------------------------------------------------\r\n", -1);
& J7 }% S) h* q6 d+ r
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
1 y4 ~. P! `6 H* [' Q
// 产生波形
* X2 c( B. }0 r4 i' t: E
PWM1ABasic(25000,50);
! V' u) H3 F/ b$ u$ O& g* |0 Q1 x% ^7 `
) ]3 e; w; } G5 A
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
( I: |/ R6 {" W1 W% k
UARTPuts("------------------------------------------------------------\r\n", -1);
3 \) i- ?( d# O/ g- C- L
8 {" n; D' C/ S1 w
3 c1 ]0 I4 o) B7 t0 T
# Q4 J* D' |$ K, Z- P0 c0 g i
UARTPuts("------------------------------------------------------------\r\n", -1);
' u$ f4 }; {" K% [1 q( c" ^; d
UARTPuts(" C6748 ECAP Test\r\n", -1);
' A0 x7 x( Z5 j6 b& n
// ECAP 捕获初始化
2 j0 N0 r/ C) ]0 R5 U% _
ECAPInit();
! G M4 d0 C. s9 J
UARTPuts("Initialize ECAP.......\r\n",-1);
4 f# y' J5 i, {* K
for(i=0;i<5;i++)
- x# _0 l5 l9 O9 S
{
6 R) R6 p2 Y) t0 q, {5 b
for(j=0x00FFFFFF;j>0;j--); // 延时
3 I5 D# M1 Z' Z0 E% l
ECAPRead();
+ q& }4 f, |' }6 S8 _0 Q
}
. |7 `$ ?3 E/ R6 {7 ]; D, `) g0 c( [
UARTPuts("\r\n",-1);
) t& O. A$ |" |6 ~8 q# _2 Q/ ?
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
' u5 L% B2 ^7 R- [" g' o9 j
UARTPuts("------------------------------------------------------------\r\n", -1);
$ g6 f1 \6 C/ E' }- Z D
: {/ j$ z( F, A% x
// 主循环
% A, K8 d, D R' d
for(;;)
" x* g. n, G/ R% W( F! ~
{
/ w8 y* n+ D( T
/ o% X# p2 O" l m
}
$ Z) V3 g3 A6 T; h
}
# A9 o5 N Y# J9 R) m6 {
0 m$ t: F7 a1 T8 C
/****************************************************************************/
# x' J% `& c4 u0 `0 p6 M
/* */
7 [* Y6 J! W5 i" M
/* PSC 初始化 */
1 r2 u# D/ Q1 B5 w& [3 t
/* */
, ]7 y5 K( z- X
/****************************************************************************/
: o3 s+ o$ ]# F* v/ V( h) ^
void PSCInit(void)
9 Z6 ^$ I8 _0 Q' L
{
6 J" [) v( T, K, A
// 使能 EHRPWM 和 ECAP 模块
$ U' X9 n2 C. |" X$ y! Z" b8 ]
// 对相应外设模块的使能也可以在 BootLoader 中完成
0 @# u* M; ]# P7 [8 G, b
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
$ U7 ~! s2 ?) p
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
$ V9 C5 n1 b; J5 _$ i
}
9 Y' c3 m# d ]( K- l5 ]
% D9 e# f3 V) c' f
/****************************************************************************/
& _+ P/ e' B4 \. K9 v
/* */
7 v* |8 ^. ^; Y8 S2 O: V
/* GPIO 管脚复用配置 */
d& U5 t" {3 a' [
/* */
5 z1 c, g! _) P! D
/****************************************************************************/
/ F4 p8 l8 N/ Y0 f2 A. e6 q0 X4 B
void GPIOBankPinMuxSet(void)
" G \; T6 O. M5 f- X" |2 v
{
( i5 r( U7 w6 a' g; k& z" ?
EHRPWM1PinMuxSetup();
; D+ ~. w" T5 s! G9 @8 `
9 m0 O- `: Z' j3 t
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
' `8 K1 O5 Q$ e9 A
// 作为捕获功能时管脚方向为输入
" \( p S/ Q* Z0 h- P
// 作为辅助脉宽调制时管脚方向为输出
" c1 Q0 H3 N$ V% `
// ECAP2 / APWM2
4 F& Y5 [( w" [9 m M% T
ECAPPinMuxSetup(2);
# x- v# Z8 U |3 V! L
# Z/ k' E4 J8 |6 X j
// ECAP2 / APWM2方向设置为输入
$ e2 W# H" X( `( p3 t* d% y
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
+ d2 ?3 k; S) d9 w& D: [9 h+ E
}
7 V" m+ {3 ?6 H2 g
4 R) A7 X( j, T% e# p9 @
/****************************************************************************/
, @- B8 O+ ~6 Y* ]$ ~
/* */
, R x$ O$ `; ?
/* PWM 输出波形 */
# N7 P5 @' @8 T& T/ n( |% f I
/* */
. W: B% U D" d2 K
/****************************************************************************/
! k& F1 M% N7 n, P: a1 R+ {
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
& F4 G, M- R' v! g
{
, H! x y' S. X/ ?* w( E7 @
// 时间基准配置
/ a2 X+ ]2 G! l& d; s
// 时钟配置
. k! i* B3 F( s
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
: o0 A9 `, s9 e
6 M; h$ w a3 X- ?9 K/ L8 l9 `
// 配置周期
. d) N& V5 g' S& i
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
) l8 ]1 J& u% M1 O* {& _" ]
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
- \) i0 o; F" v5 Y) u9 \* h4 r
1 v# ~' f* m! i" N5 x
// 禁用输入同步信号
L* l6 \$ F* ^* H4 \
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
* A4 x- C% _5 Z* `2 i3 r
$ N( _0 {2 W8 x
// 禁用输出同步信号
/ A& _8 W7 u3 E, G( Z- o! @9 N
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
( O% c I$ i( [3 v7 y
/ V5 z7 o/ z3 O) r2 A7 s3 U
// 仿真(DEBUG)模式行为配置
2 Y0 G" J; w" P/ s/ h) k
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
) }& o' E3 O# V
9 o4 r, Q9 `* Q* c% s7 [, C
// 配置计数比较器子模块
3 {+ x2 n) m* r8 | }- ^7 W
// 加载比较器 A 值
( a- ~5 [5 ]+ a$ q; c& {- e
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
' [% j. y2 t2 c
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
2 r& u4 \6 o, |1 _0 J. M
% d# M) r2 N: J7 s+ d
// 加载比较器 B 值
! G' e9 T8 A2 _# y( r( ~
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
5 j2 p9 r8 ^$ W; J! G. ^
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 ~4 D% z S3 t/ G! b/ o
8 Z. W2 b; z4 A( G
// 功能限定配置(输出引脚触发方式设定)
/ y" g& p5 X7 Y- V) d; C2 D3 z0 E
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
( r( }6 P8 k, f# j% Y9 h, ?7 n4 {
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
0 u# p' T% V0 ^8 J( p
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
0 g# x9 T+ W z
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
7 K6 A' v! H/ ~. x
( t3 O% U+ q4 }. n- G7 N
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
. l. A8 z) V/ k" ~* x1 e
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
V4 U+ P2 D6 Z d, B, {+ q/ _0 C
2 }8 Z* o, L5 ~0 `( D% W0 I$ d; G
// 禁用斩波子模块
+ g, N5 I8 ^, o2 I. ^
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
7 G0 @' S$ S5 d; @
. u$ B C+ P2 r
// 禁用错误控制事件
' l" |, N; w/ H; Y) h3 {! s
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
- z/ H# i# ]- ]9 Y: P! C
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
! ^1 z4 X9 @+ K* B! ?. ~9 ]
& G. h' }; I/ q) F
// 事件触发配置
* g8 [) y$ W9 H9 m2 P
// 每三次事件发生产生中断
- b: e8 n3 X' w' g) r% n6 k4 G7 `
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
: e5 L8 \( U* h5 N, L' Y8 W: H
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
2 U% [ h% t0 v. \7 h1 i
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
+ N1 [4 X( t$ H4 O
// 使能中断
; R i! r4 A: j2 r; q4 D3 C
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
6 \7 c+ b, T5 q" e0 d& _4 G
( M; n' U7 c& g: A$ X4 Y6 u
// 禁用高精度子模块
. L# Z+ j4 F( w/ b% z
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
# B% d- l2 b4 B- o! q
; O. z3 \2 T% r- u
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
* a. U. D8 R3 M
}
. K" _$ y2 C# c! z; `( Y) W
5 U! h0 r0 J1 }
void ChopperWaveform(void)
3 Z. j* A: R8 w
{
9 U8 Q" @2 C; ^/ G" Z' B* p9 T
// 50% 占空比
# L2 ~: |9 H$ r: k
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
( a/ I/ j, x; y
// 4 分频
+ m" w) h7 _5 S2 M- W
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
" H" s# K( w8 m: h
// 单个脉冲宽度
% ?7 o `/ S# s9 c$ H& u( q
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
8 t; g6 c. u1 E( z2 T" P
// 使能斩波子模块
3 G4 _$ v- g% V; {0 k. v* g
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
# {) m R% c8 K% q p- d
}
9 d. [$ {- s* o. C x. a0 E
' ]" U& d* w; J
/****************************************************************************/
M! W; s8 j5 \. M, V( C5 ~8 g
/* */
' X( c3 R' V6 u9 B
/* PWM 中断初始化 */
4 B5 k7 H% S$ k# u8 h8 D
/* */
. C* E* i; u+ T9 m
/****************************************************************************/
# y% E# Y# z q. W* ~# C% U8 ?
void PWMInterruptInit(void)
8 E) l4 x$ ?1 W. i' w" ~' `
{
" i! I) A/ T8 t' a
// 注册中断服务函数
, o8 T- ?" i7 }
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
) m' A1 a' g* `
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
5 W5 K& Z# ~8 j/ R* ~
- |* H M. W- g" v0 e1 H% i5 e
// 映射中断
( W A5 s/ A! [8 @0 n7 k4 ^
IntChannelSet(SYS_INT_EHRPWM1, 2);
W* G/ S, Z/ I2 f6 ?! I6 T
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
N& d( v3 b! k& e; m) _! H, e! F
& i9 Q4 U3 {! D( S! m
// 使能中断
/ L8 }. _# J: M+ s# y7 r
IntSystemEnable(SYS_INT_EHRPWM1);
$ f4 q9 L- y* x4 [7 b t
IntSystemEnable(SYS_INT_EHRPWM1TZ);
0 k0 I9 p6 l! p. D
}
- P. ]0 c+ Y# M3 y, E
: T; g6 M" |3 h! g
/****************************************************************************/
6 L H L, y6 c
/* */
9 z; N; k8 }# N5 @
/* ARM 中断初始化 */
" c8 ]1 D. H/ D2 _! d
/* */
8 i2 g& D) l( R: f6 [
/****************************************************************************/
# i9 T/ L o% K6 _6 z% E) {2 @
void InterruptInit(void)
$ o4 s' X0 b6 l
{
. G0 ~: P; }, I
// 初始化 ARM 中断控制器
6 i3 b8 H) m" z: L$ |
IntAINTCInit();
. w* z# ]8 w0 r& h: {7 i
; y' M, i, k! _$ k: }
// 使能 IRQ(CPSR)
( O- h# @; Y! o2 i- |( _5 _' ~4 a% c
IntMasterIRQEnable();
' A/ A' A, ^/ P/ H1 |
' S9 y( i3 O/ k: A* t# a& c
// 使能中断(AINTC GER)
2 U1 _+ S* F8 |% I/ M
IntGlobalEnable();
% m% G+ b# C9 a' e+ c2 }+ V# j
x2 l3 j8 K3 E6 G2 \1 F. M
// 使能中断(AINTC HIER)
2 ~: e9 [3 | p
IntIRQEnable();
/ p1 {9 o, P/ {4 ?4 V, g! W3 v: M
}
9 K f. D6 u0 j$ U) B7 H2 D
o$ k, z* U- b/ k2 c* H5 s' H2 ?
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
! U1 K6 ?% r; H" z0 }
/* */
9 K2 g7 W0 d. M
/* 中断服务函数 */
7 Y2 S1 K1 b3 i2 r& [0 B" G0 h' H
/* */
; y, X+ I& k4 b# K, Z% F; D# t
/****************************************************************************/
- x/ e, G; @7 c
void PWMEventIsr(void)
; D' p, w2 M8 X, |
{
$ l. j% {% k- u/ S g( N9 G) p
IntSystemStatusClear(SYS_INT_EHRPWM1);
+ Y0 Z- w% h9 ]# y2 G- _( }" a& C
& `4 h" o# ]' N% t% a
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
, p! H8 N9 o( c* ^
}
5 O1 O& b0 w5 ?& c
8 B6 q# I' y. \& B+ L5 V, U
void PWMTZIsr(void)
" A0 C2 V: l2 Y" c0 r: q# i) [
{
. R! p! `! C4 E8 m9 l
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
+ d. k& I$ O. }8 X1 Y* e; d
2 L$ ?/ Y8 \3 S2 {4 U
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
, ^( R0 ~: ~4 B0 N5 \7 w
}
2 U3 I' d+ J$ O
# V' {2 o" M7 g9 B9 L z% s
/****************************************************************************/
- Z6 u# ?, R) |: w. U
/* */
6 T% G8 V7 y& _+ L3 W
/* 初始化捕获模块 */
$ D' T* ^/ U3 F6 {/ i$ X
/* */
. n2 @/ N: d1 t3 A$ {
/****************************************************************************/
3 o) W$ x. a' `5 l U
void ECAPInit(void)
# y! k* n/ q' d0 M
{
: q9 }% y& G$ f/ g1 v
/*-----设置 ECCTL1-----*/
1 P1 d" A9 Q* S# y- G
// 使能CAP寄存器装载
7 ]+ u1 n {4 N- k% c- v
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
4 y, V/ f2 b) X: E
// 设置预分频值.
5 S/ S: e! H' i+ ~. @+ l
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
F4 [5 \5 Z* D- a
// 上升沿触发捕获事件
& b: B& M% @+ D$ P+ Y
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
! K/ [- M ?4 b& y$ U
// 输入捕获后重新装载计数器值.
7 S# s3 ]7 N1 s: e4 L
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
+ W- F( | R0 ?" A3 I
0 U3 d! h3 r4 M7 y( B" E _' ?
/*-----设置 ECCTL2-----*/
* X9 ^' v5 Z* l
// 连续模式
& u3 r1 j6 F. P5 a |4 W& j
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
4 \3 q8 E" `5 o a; @* d( \
// ECAP计数器TSCTR持续计数
7 _( k4 j# T% H" K
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
* J( R+ v/ H4 _ u
// 禁用同步输出和同步输入
: H6 V4 Q# u* H1 O5 ?1 l9 G/ p
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
& }# t6 I6 C; Y( S4 V
// 配置 ECAP 2 为 CAPTURE 模式
$ i* y8 Y7 _: `( w* u ?. O O/ V- ?
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
) |" [. K6 N, K7 i" _
4 L) y3 W' [( |: } R+ n
// 使能中断
" o, m2 e; @( Z9 Q
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& E. g8 t- B3 b6 Q- F$ _
}
' |# ]. i6 M% N5 p
+ Q" R/ W( B X- S- v
/****************************************************************************/
* w- O M0 d' e: g# F
/* */
8 G' O7 p5 P! L0 ^
/* 取得捕获结果 */
, b: r& y# l2 N/ c3 W% ^
/* */
! @0 v9 M& D |0 R( I- C% ~
/****************************************************************************/
/ U+ o; T& B. H) [: d
unsigned int ECAPRead(void)
+ z* c `% X) [% L& W1 Y# F
{
. @0 f+ A! z9 h" w% `& j
unsigned int capvalue;
0 b3 b9 F- M5 }% Y6 c
unsigned long frequency;
; y- ~5 f M& v6 ~2 |
# _1 O5 H( R2 C
// Event1 中断标志
a# C. E% t) M8 I5 _2 A
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
4 ^0 s7 P2 ]7 L
{
2 v9 K. v4 E: Z: ~
// 取得捕获计数
l& A! W3 I X( e( D! `/ \
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
" @3 e* I4 V, ~3 A/ _" P8 g* Y
capvalue = ECAPResult.cap1;
& ~3 v: J; m0 x8 r6 w4 M5 k
: Q+ k P" }$ z9 f( J, T
// CAPTRUE 模块 228M 时钟主频
2 e$ T/ G" ?. ]- X, F
frequency = 228000000/capvalue;
0 p4 W3 O2 P. |2 k; E) }7 K6 V
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
: k7 O3 G9 B) p- K( s
5 ^2 W+ X) z0 ~& ^: J% V: ?
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
% j7 W, F2 L) ?9 f, Q% d8 E
// IntEventClear(SYS_INT_ECAP2);
9 t( {* c2 W$ u
}
; y4 M( C" W- K) R
return frequency;
. b7 ~- i2 i! I5 }
}
5 v9 x5 C( Z1 _' i5 Z3 G
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
1 B/ G$ @8 g c( M
[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