嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
q% I" I: N' d: }0 v
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
* t( s" p4 I* c, f
/* */
4 G( o8 ~$ @0 C5 W
/* 宏定义 */
! H& N$ A! v: L4 f
/* */
8 N7 l) h3 K* D% E+ m8 p: I
/****************************************************************************/
" K) ^- a3 [6 p, T" M- [$ F' B( d" R
// 软件断点
2 Y) _7 @6 h- C
#define SW_BREAKPOINT asm(" SWBP 0 ");
9 N5 y, R7 \$ |; p( s7 @! ?
! y1 F2 N D& D6 ~
// 时钟分频
$ i. |6 S {! j p8 m- P3 i6 M. q& c
#define CLOCK_DIV_VAL 228
: ]7 y, f, X5 p7 F [
# ]4 ^. o! \( m% p
/****************************************************************************/
. I2 G h' ?! I% m# q
/* */
) B; e! [% Z$ ~- s! e! l3 A
/* 全局变量 */
2 P& a' E: k6 \% E+ |
/* */
2 b" m& q7 b/ e3 `
/****************************************************************************/
1 l! z- e! H1 f4 Z% w( i; F4 h) F- j
ECAPCONTEXT ECAPResult;
. y, L2 d }# ^: ^. X/ |$ i
% r3 V1 D8 d$ o0 y1 y" P4 `& T9 A
/****************************************************************************/
# j9 d) Z/ J5 W' W6 K: n
/* */
/ X; i- x1 S/ W, `4 q
/* 函数声明 */
* N4 `' e+ w2 G
/* */
6 T3 }4 V g' k" G Q4 [
/****************************************************************************/
/ r* _) E4 z! A
// 外设使能配置
* ]0 T4 A4 @' [: |9 r7 l
void PSCInit(void);
! \7 E. a, P% N, T6 h
0 M- p" t# ]2 g3 x; u/ I; }- w: Z
// GPIO 管脚复用配置
5 b' U; C$ j3 k J
void GPIOBankPinMuxSet();
* B% v; s. }$ g9 Y
2 H( ~/ q1 V( `. k
// 产生波形
1 M* [: W# l# R' @" k
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
0 o. b% t7 N& K, j: X1 ]
void ChopperWaveform(void);
" g9 H) p1 j6 S$ j) L
( s# l; M2 S5 j
// ECAP初始化和读函数
- B3 D: t' L2 S& B# s/ u, q
void ECAPInit(void);
9 J- }8 O# D# s
unsigned int ECAPRead(void);
- U3 Q% n% H- ]+ `; T
0 z# Z1 R% i2 h! h9 w- E. |; I
//ARM 中断初始化
; Z2 R, |) K! \
void InterruptInit(void);
1 P$ l8 F! f* K' D; Z# q6 i( G
9 O8 [1 G, y. S: V
// PWM 中断初始化
, \$ X; W4 t/ y; t
void PWMInterruptInit(void);
5 n' i' C1 Y( d/ t, A
// 中断服务函数
! w' r" `; c+ v3 i& ~
// PWM 事件
* q- s- A- w) y" T6 \
void PWMEventIsr(void);
! Y& h% X: G: e
// PWM 错误控制事件
! z: J d- M; e& Q U6 I% l3 |# W
void PWMTZIsr(void);
! @9 h- @0 ^& v1 d& ]* d* g
6 y! G. e" s7 }' d5 I. X& H9 U
/****************************************************************************/
: N* T h! q) {
/* */
7 b& z( J8 m) }) }
/* 主函数 */
' i' o3 k% X, ~! ?& q s2 k5 W
/* */
& [2 s B8 `5 g& t. K1 R) l
/****************************************************************************/
3 B* p# V7 A: N" i2 N: Q! j1 I
int main(void)
2 p3 a2 {/ g3 m8 X' ]! Y$ I
{
" v2 f. J4 K0 T' \4 A1 J: _
// 外设使能配置
; |2 Z0 Q3 x% e3 |1 w5 P
PSCInit();
- c+ n- V( ]" m3 T4 i$ f
9 B3 e: n9 o- J
// 初始化串口终端 使用串口2
! t2 B$ L; M6 w2 C3 p2 A$ T
UARTStdioInit();
5 D6 S) C1 H8 r- @5 H: C' z/ C
4 [+ s; s7 N+ X
// GPIO 管脚复用配置
, ~1 r+ Q) h9 K5 }, n, y) E
GPIOBankPinMuxSet();
9 l* e5 e# i! x) @
( k: t8 [5 a5 X% c; U4 ^8 X+ v
// ARM 中断初始化
6 C6 Q. [! H9 h; c; c6 L
InterruptInit();
; O' [9 d; A; D ^) X
& d. v" p' A2 Q" @
// PWM 中断初始化
9 I$ d' q% D4 }1 W1 s
PWMInterruptInit();
$ E! ^% m+ ?- D! @
( w( q a& l% a/ s* K/ v
unsigned char i;
4 F9 n7 z! I C6 p
unsigned int j;
% u H* J7 o4 |( S6 G: D+ c) t
$ B: l+ b. l0 J' d* n2 L8 v: W
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
: [$ m o; M b
UARTPuts("------------------------------------------------------------\r\n", -1);
1 ?% d ?0 g- M0 y. X! k9 O3 Z: A$ z
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
2 s$ Y& Z6 E3 V; h( q1 u
// 产生波形
: @% ^8 w6 o7 y4 x
PWM1ABasic(25000,50);
" N) q1 X+ `+ n, j
6 T* A" g3 f" g% X0 e2 H
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
4 p0 h* `9 ]8 n0 l# m
UARTPuts("------------------------------------------------------------\r\n", -1);
; K2 p( h2 y) P6 ~% p* j
& @+ ^0 L; [" r% n6 Y8 I
6 y! n9 y. s n3 a. Z8 S
6 t) G+ J4 I2 }8 Q D& g
UARTPuts("------------------------------------------------------------\r\n", -1);
- } n2 v4 ~+ F d1 R7 S
UARTPuts(" C6748 ECAP Test\r\n", -1);
# Q( H& F5 T$ w( N5 T
// ECAP 捕获初始化
9 q# L" ?& R1 r6 M
ECAPInit();
2 n! d7 C0 l2 F
UARTPuts("Initialize ECAP.......\r\n",-1);
3 k* V) S% E9 v9 ]# R/ \
for(i=0;i<5;i++)
7 G8 W$ q2 N, n
{
! Y4 l! P p( z/ E3 {! E c' A2 `
for(j=0x00FFFFFF;j>0;j--); // 延时
" G$ B, I7 W% `9 }/ v3 D3 x" t+ w
ECAPRead();
- Z# c% u% c; U* X
}
7 K8 q8 x i8 ?1 @# [- Q
UARTPuts("\r\n",-1);
& t6 l0 ?8 g1 E, o/ z2 \
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
9 M! ]9 v3 e2 X/ V& j
UARTPuts("------------------------------------------------------------\r\n", -1);
2 A9 P7 w; R- @& J: Q9 k" ^/ [
% z* ^' N" U s7 j, _
// 主循环
) u, s8 R$ `$ ~0 O
for(;;)
; l. O% g. s! U
{
# Y5 e4 }2 T/ Z/ N, j4 i
" Z1 c* O" ^* d" w; E* i
}
8 p( m2 ]. o: C2 V& Y
}
: J% ~& ^$ j" \" j8 o0 e
1 p# f. H8 t# E$ h9 I
/****************************************************************************/
+ F$ Q$ z5 _3 r" m
/* */
$ C+ w# H6 o! ]9 r' q- U
/* PSC 初始化 */
+ A: M- R: b5 P' S9 g+ U I0 o1 F' b
/* */
5 l0 ]* P1 x7 A/ ]$ z& \
/****************************************************************************/
- N/ }3 p. @$ R1 B, r) p
void PSCInit(void)
2 _$ ^, S) G5 z4 s; s
{
8 O5 q0 [& n+ [# S7 P3 H
// 使能 EHRPWM 和 ECAP 模块
% I' \6 {& `. |0 `1 t
// 对相应外设模块的使能也可以在 BootLoader 中完成
. b' e9 Z5 M- d$ N
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
0 w: l1 _( }( Y2 y( k
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
* u9 e: `( y, e* T4 G
}
6 J7 C" D% B" f0 P& g
4 y, ^/ a6 j6 c, z. @
/****************************************************************************/
3 A) i3 `9 i" A
/* */
/ N f0 R. ]$ `+ m0 P
/* GPIO 管脚复用配置 */
; k2 U" g4 ]. i+ v6 p
/* */
) U, w6 I3 c7 x; U$ F
/****************************************************************************/
( b) u3 X6 p- ]1 u! I: T
void GPIOBankPinMuxSet(void)
) Q1 w s3 p- r* R
{
( G8 O* \# H& }( ?3 ]
EHRPWM1PinMuxSetup();
) o' L3 r8 @( Q# Y$ g; K9 r0 d
# \4 N0 A0 S9 b3 a
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
+ }+ w3 U H0 f
// 作为捕获功能时管脚方向为输入
/ a# Z* @% B# n8 a' g9 V- Z
// 作为辅助脉宽调制时管脚方向为输出
q. a3 c( c4 j- R3 e
// ECAP2 / APWM2
) F; |6 g# r- `, j# B# _
ECAPPinMuxSetup(2);
/ m; m% p7 d* ~
. g, u3 U. O7 o p3 ]
// ECAP2 / APWM2方向设置为输入
1 _2 O" F! z( T5 l8 r' L
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
5 B8 w$ G) F' ?) C. d" @
}
7 @+ R6 i1 A- h$ ?% x6 I$ w# T
' S9 I2 F0 J6 P6 r7 Z4 f: A% b
/****************************************************************************/
# q/ B2 {7 d2 j. _( p9 a
/* */
4 O* b! p, g- c; _. Y
/* PWM 输出波形 */
' C% M/ W5 a( U1 Y) w' \
/* */
5 T; }. U& J& ^( i5 K2 U8 @
/****************************************************************************/
" L i' i0 t4 ^* d# L7 S9 E, V) ~
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
9 }! G8 x+ W" ~9 C3 k
{
# B. }. E7 B5 U
// 时间基准配置
& s6 z5 c2 r k. }$ e
// 时钟配置
9 X, A1 c4 q7 E4 c
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
" Y: Z% i/ p9 g: J
: O7 B/ C3 M% l2 v* Z! D; o4 u
// 配置周期
+ ~# v9 \" {/ G) t. X8 u
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
7 F% e$ _" Z) W% h; A; l2 S- h( c/ `
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
' p. y, T: s+ E9 }- ]+ J
, \9 G6 t7 J# J
// 禁用输入同步信号
" \7 j; R9 O" ]& P5 E% E
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
$ Y, K% z$ w) K3 l% ^
% u$ a! u1 F4 }1 O" R
// 禁用输出同步信号
9 D8 i7 x/ K4 u) r% L
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
" N- \" Z* C4 v2 D0 x8 C
- g U+ U: k5 Z. z. L8 F& ?* Y+ |
// 仿真(DEBUG)模式行为配置
! n$ |4 Y5 y/ v! d, h6 |1 {
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
% \# X" I# G2 ]5 r, ]
, X6 x) @: a* n
// 配置计数比较器子模块
- b8 Z1 q" O' j1 d! y
// 加载比较器 A 值
4 b, D: E. d8 `; K
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
# p0 f8 j! E i! K" ]) J& O+ H; Q
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
5 S3 x/ M5 k' v& k
' K1 I' f5 W0 P/ y& n6 \* g/ U. S( o5 h
// 加载比较器 B 值
2 k: P ~6 p5 Y& Q- B* C1 x
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
6 |$ p3 |: M7 G% o5 l/ n! ?
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
9 F) E/ T' w( f9 I4 U
( T) t) K. {8 z# b
// 功能限定配置(输出引脚触发方式设定)
+ G4 A+ d2 @% ]; N3 a
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
4 y% ?+ z) |+ f* q
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
+ J0 B2 _- |. C
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
3 \: |; {: e7 b- q
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
- N4 u( @( H5 N$ J# w9 a
( ~4 r' A/ ]8 K3 v6 |) M' d
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
, r9 m9 m: V3 j
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
, A) ^+ `' w+ @# G
) ?0 Y& V% i x: Q
// 禁用斩波子模块
1 T0 _* G7 C# V: K1 X) a
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
3 h* Z5 _. X" Q) s
7 h% F; O( u% _+ Z
// 禁用错误控制事件
2 R2 s1 `0 T2 r
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
7 G- m) e5 g9 a
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
- }, ~% [0 m8 U# s, q+ w( m
3 r0 V- [$ h- f W2 }
// 事件触发配置
7 L4 _; n8 ?$ B
// 每三次事件发生产生中断
+ K, J# t3 E+ Q+ j) L; u
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
* {( r1 Y9 @, E' h; ]
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
: Z/ d' n3 `, D& y. P* T$ q
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
* H$ N% v( M8 R7 j7 q1 R+ M; F
// 使能中断
$ d; W: c* z+ E9 H5 T
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
5 R. y" t+ K- [- G" w% |
, `- P8 G9 L0 a: t( n# Q
// 禁用高精度子模块
/ `- i c2 {$ O$ L5 P5 l- w
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
7 A" t; X, B( z; F
( y7 A8 _. A( U
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
. B3 ^6 U' K- D( p* }% ?
}
2 ^ Q: E1 N7 A6 W' q
/ C7 b* B4 m6 Y/ l3 d( U% ^
void ChopperWaveform(void)
* s" L: |6 r/ ^: x6 I' e/ o
{
: ~; S% [1 Y' O3 o1 ]1 S0 M0 `6 g! H
// 50% 占空比
9 f; B3 C6 L5 l5 D* j' x' i
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
: n; h& V3 c& z/ p+ I1 {
// 4 分频
- Q. O9 J% ^. X
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
( e) Z( a2 d) w4 a$ x2 F
// 单个脉冲宽度
" q" u+ c4 i- @9 ~3 {' j
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
2 O2 d; i) e$ h! X0 e8 K& U
// 使能斩波子模块
! {% {/ v" j/ o6 [
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
6 x0 G6 ~1 a0 p {* Y( n
}
+ ~& a. u ?7 k: o7 H9 [1 j4 l
6 \& F) @& R& g' R" K T6 d
/****************************************************************************/
5 Q: }7 v6 W% O" m: m
/* */
+ b, |- q* ]& W3 S
/* PWM 中断初始化 */
( n. B" z$ \2 }% @ E& a2 r& o# m/ T/ Z
/* */
, S% w. x# e4 Z
/****************************************************************************/
3 |) e& k& Y8 j# v3 B8 \; Z
void PWMInterruptInit(void)
/ x) f3 a7 W% E+ z
{
7 a1 k5 y7 h& @/ K0 E
// 注册中断服务函数
3 C% x' c" i+ Q2 g5 P
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
$ X7 G' F- X( d Q2 P- i
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
2 B2 F; |; _- f: D
1 z1 c6 `1 d6 o! R. M
// 映射中断
; u; D0 Y I5 g, Y
IntChannelSet(SYS_INT_EHRPWM1, 2);
5 [9 Q, [8 r+ j! [, k; B
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
! }: U6 T1 o w% h- A) `
4 o& m! a7 S/ S- p x
// 使能中断
4 ?! x/ K' Z, Y4 O/ S- p
IntSystemEnable(SYS_INT_EHRPWM1);
. l5 {# R4 {' X: \
IntSystemEnable(SYS_INT_EHRPWM1TZ);
$ n9 g/ \: |9 x2 D# {
}
0 c5 P9 s$ `' |4 Y1 T$ n9 G' H) [
: z' I6 N) |/ [7 T4 T
/****************************************************************************/
6 a9 L( ]3 q9 j. b) p" ?- W
/* */
* W4 r1 I% a# \, E- W: f
/* ARM 中断初始化 */
! b$ f) L! w9 X0 k
/* */
. {- u$ l5 p% U, ^4 P7 l7 d) e% C
/****************************************************************************/
# z: K6 u4 x) ~) a# t) I1 W
void InterruptInit(void)
. B7 l. z, h. \- b; |# E
{
, \6 ^# ]' i" D* d0 c; g1 W8 [
// 初始化 ARM 中断控制器
. z. y. l8 P7 B
IntAINTCInit();
$ ]# L2 z2 A3 g; |( y) l6 r
# m/ Q% U5 b, @8 w @4 ?( P
// 使能 IRQ(CPSR)
/ ~* b+ S- ]# A! n- u, u
IntMasterIRQEnable();
! d5 z* [! G: u" `' n+ b! q6 Y
2 D+ p3 G# p6 T( j) S! V5 ?% b
// 使能中断(AINTC GER)
: w4 T2 T7 U- c' H8 y
IntGlobalEnable();
% c9 u% ]/ K0 a( ~
, L6 f( A! \) n2 o
// 使能中断(AINTC HIER)
# O! A; P6 N1 _% W
IntIRQEnable();
0 F! Y/ E* a9 P0 y( T9 _4 j' h8 E
}
3 i- _8 r( W, s1 U, G) c5 ?* _
i/ O$ _0 t2 _3 ~
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
4 B" M6 R7 R1 ?6 \
/* */
' L/ l3 R$ ^7 [/ D0 V
/* 中断服务函数 */
! p! C8 ]& p4 N [
/* */
' Q1 b8 [, _, l) S( c) r, a- ^6 L
/****************************************************************************/
7 P+ t c) D) o. M4 N: L
void PWMEventIsr(void)
6 W0 C( C3 u- f2 B
{
6 q& W) ]; E0 R2 B \
IntSystemStatusClear(SYS_INT_EHRPWM1);
$ R) s5 v9 s" _" R; V. e5 A/ r
+ @9 V% g* W( u. ?) o5 f' @5 A" m
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
' O7 Q' r: d V: h9 Q( P. n( P
}
, L! O5 U3 R" I$ @0 K1 T" t) R$ k
# }! N$ ?6 x2 m* Y6 D" `- Y
void PWMTZIsr(void)
' W( Q& X" s! R3 P4 }$ ?, d& V: h1 i
{
, |) K7 T! q$ j
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
# Q- S% M$ p6 N8 |( }
( V: u; |& E" F& ~
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
9 L( t$ r% s$ z3 w
}
9 I- H# w/ B& {0 g
6 g4 a m8 _) a0 t5 X* v. u' i
/****************************************************************************/
3 x+ e O; Y* x& S. O
/* */
" r* l7 z k/ e9 g7 f' @. i! o
/* 初始化捕获模块 */
* b ~ F. w& n. L |& q
/* */
9 U5 e! p- ?! h& ~" S# i) ?5 k
/****************************************************************************/
Y, [- o: s6 _
void ECAPInit(void)
; i& M. f3 O9 C2 v
{
# `5 r$ G$ Y2 t7 l' n1 D
/*-----设置 ECCTL1-----*/
9 _( z" U- D# V* p- o& G
// 使能CAP寄存器装载
4 ~3 B9 }1 ~* x" V% G1 F: g, I
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
- V6 C5 D/ T6 q, U
// 设置预分频值.
5 w5 B* {* b# S
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
- Y+ ~7 ?" Y: L# p
// 上升沿触发捕获事件
" z0 w7 x* {9 R; v. k2 D& m3 h
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
' O* ]: R8 E, `9 t* g
// 输入捕获后重新装载计数器值.
- a- q/ K$ a# r6 {! N( j* i
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
$ ^, B0 Q d1 r+ Y1 L! j3 ]
% I; \6 {" Y4 x4 V; r$ F$ B
/*-----设置 ECCTL2-----*/
1 a E9 F$ g7 c6 Z- e F2 I+ m6 Z) ]
// 连续模式
2 b! g6 X! i( c& F
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
, t( _/ |) E. J' X8 O! e
// ECAP计数器TSCTR持续计数
9 e0 y! [7 N$ z# @3 F
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
- q2 i3 h1 M' @7 E
// 禁用同步输出和同步输入
) p% N+ B3 Q! w6 A! a, t
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
- H. o1 O/ O% G6 b& Z6 K' ?
// 配置 ECAP 2 为 CAPTURE 模式
& M0 _4 K/ N, K1 s$ u3 T
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
' `/ f: g0 U; ?% B: w+ d& h
' V8 U! w; ]. B6 R& {4 B) f
// 使能中断
) F& P% e* G5 }6 b, I
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
0 p! x- t7 z1 L& ], @9 [
}
/ w3 k$ Q7 ]/ `! s9 A# f
/ R$ f- `7 Y* a
/****************************************************************************/
`+ ~; ?$ Q. D2 r9 o/ [8 G$ q- ^
/* */
8 L+ J7 s2 R& t W* x
/* 取得捕获结果 */
4 K* Z! B& M0 M" M) U0 ?& f
/* */
' k7 p' f9 g0 M5 D% I
/****************************************************************************/
; j9 M% [8 [1 }; r8 H8 |
unsigned int ECAPRead(void)
( b! J1 o' u, |2 U1 D
{
] e9 K* t* x! p
unsigned int capvalue;
4 v% `5 n7 e* g& b5 @; Z
unsigned long frequency;
0 Z4 E4 B6 x0 n& h
* c1 Y$ u; Y5 m+ X
// Event1 中断标志
. ?5 ], p/ T+ A+ [6 h! ` V
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
5 o# _ Y& o. U1 ]+ z- r
{
! d7 _ H! B" _2 Z& y- C9 x; w
// 取得捕获计数
( [1 c; A; w/ J6 _: ~& _
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
( I4 e% q7 L, F( E
capvalue = ECAPResult.cap1;
& j" d `7 G7 }1 Q1 `8 {
9 z6 c0 N& S4 P8 d. b) m/ U
// CAPTRUE 模块 228M 时钟主频
, G# [% J9 P, s" x
frequency = 228000000/capvalue;
2 g% b: b; `$ [2 H* N% w: G
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
( K& i( Z9 h- u/ u* y. L4 j6 P
$ @6 |% l3 F v. t6 e. I) `
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
6 _4 S, l/ I( R5 s
// IntEventClear(SYS_INT_ECAP2);
' M* j* G# g' d1 G
}
2 W) b E0 ]+ h2 B- e
return frequency;
4 j% |4 a( R% A8 h
}
( G4 ^7 x& m8 K
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
) M" ^* e" l1 i- l; w
[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