嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
+ \9 O4 D' a1 Y5 {9 t
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
9 @: l% G* Z; F" O) u6 }0 P
/* */
" a+ K- L: z: I( d7 |
/* 宏定义 */
! _6 P% B5 r( U
/* */
& I* l1 x+ w& O- }$ H( J
/****************************************************************************/
- R4 i. @! T# s. U( D( `; B4 F
// 软件断点
( g& b; T r' E
#define SW_BREAKPOINT asm(" SWBP 0 ");
H) o3 D+ p* k1 p. @3 e! q- e8 N4 A
; H& ]- t: d- ^# I- j1 p
// 时钟分频
7 M9 w8 P8 E' I9 S! n/ i9 O! V( r
#define CLOCK_DIV_VAL 228
1 M( P: w* z' b0 @- Z
; O d& y* M7 _/ R# z) @) I: k7 R
/****************************************************************************/
& R( r9 f4 B# q2 D) o; \3 j
/* */
" M" e. Z& n1 l2 l! A
/* 全局变量 */
/ n+ X* g, W" G' i4 \& w, t
/* */
; k! _& i1 D6 c, G2 _" Y: y5 I! n6 d2 _
/****************************************************************************/
+ e: Z, o0 }) X2 p6 t
ECAPCONTEXT ECAPResult;
- o" A. ]1 a9 L: y3 ?' o
. i" {; c' x& [5 u
/****************************************************************************/
L# j; C- @8 C5 p: U
/* */
1 E2 i) S% s% j9 y. n$ x
/* 函数声明 */
% @9 S u, w2 N7 l& J( M
/* */
) w+ I( Z2 w6 q$ _1 e7 k+ `
/****************************************************************************/
' K5 {/ p/ }" Y- H4 c- i+ H
// 外设使能配置
( d! I* H1 G6 Z0 N* t: Q; c
void PSCInit(void);
1 }( B" {4 d. |
7 f8 S& Q, i+ l# d! q/ a: |
// GPIO 管脚复用配置
9 q$ ]. \$ C& R% |# G& V+ s
void GPIOBankPinMuxSet();
8 M) G% H" [0 k6 {
$ r& k6 U" w9 a+ z# C1 X5 J4 A
// 产生波形
- w( o( c" ?6 x/ U' N! i1 q2 @$ A, H
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
0 C& D, Y+ \* Y6 q# B
void ChopperWaveform(void);
2 ` w6 O$ ]$ S* E
- e* K3 Y7 ?1 s
// ECAP初始化和读函数
( K9 m0 U+ s8 p2 ~# l/ j, a
void ECAPInit(void);
/ S: }- x' Z, B* A4 n# n: M
unsigned int ECAPRead(void);
) Y: ]& y/ f$ `
4 G2 V; T2 u7 U t0 O5 [/ Y( z
//ARM 中断初始化
2 S) x! O. u0 F8 e: i
void InterruptInit(void);
4 [& m! V: M7 w6 P8 k
2 ~& P4 c" c2 v. g4 D3 a
// PWM 中断初始化
9 f: R I0 T2 q, o
void PWMInterruptInit(void);
1 k' G# \8 P) S! |( F1 ~
// 中断服务函数
# t7 X L5 F( M$ s1 K3 u6 b
// PWM 事件
" e. m9 \1 M* m/ W3 N: N
void PWMEventIsr(void);
* A6 R. ^! t2 y% a6 b
// PWM 错误控制事件
: K7 Q' ?6 X* h
void PWMTZIsr(void);
, P. P+ l5 M' v3 x7 b
. a3 c6 r- }' e+ E' h& O9 n# H
/****************************************************************************/
3 h& J. n0 m- o
/* */
5 I/ x1 g3 N! |4 X, r
/* 主函数 */
: s; x8 ?! v. \: M, L, j
/* */
: L& o& P! l/ Q
/****************************************************************************/
: E: z0 R& Z2 N. ~% x D5 u
int main(void)
' k1 E; f" L- L' A, x+ l
{
! \: v5 [6 |4 f7 m5 N: U
// 外设使能配置
; B. v; z. y- z; _1 R
PSCInit();
) o# ~2 n( v6 o! n/ r' ]0 l
, j# ^ S+ Y6 @1 J2 e
// 初始化串口终端 使用串口2
! ]: v1 E" V( S5 ~* M8 F* b
UARTStdioInit();
3 }! s: q, A0 H' k
" Z% y: j9 |6 `7 r
// GPIO 管脚复用配置
6 w3 t/ @6 L2 X/ K& j
GPIOBankPinMuxSet();
) e& [' ]% k. f- g# A# V& x
) \) v6 s3 I6 o* b n2 r# X
// ARM 中断初始化
% v+ F/ V' l: J
InterruptInit();
6 A& L+ z! _5 r* @
/ q( |( _! o9 i) F3 l$ H
// PWM 中断初始化
2 D, R1 |& d+ i, u( h
PWMInterruptInit();
+ _; ~! e( d% I! b2 B
8 J o" l: M0 [; G% `5 c
unsigned char i;
$ I: t% T" ]: C
unsigned int j;
0 }4 Q( R4 j: @. j+ M$ X6 d# P
8 [+ ?. Y! a8 N; ]1 N7 ?- b
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
- L0 @3 [- J; k. c, N
UARTPuts("------------------------------------------------------------\r\n", -1);
4 f4 I* S- y0 ]' y/ A
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
7 c, [. W J/ l8 H
// 产生波形
" ^ [" C% D5 Q
PWM1ABasic(25000,50);
( d+ ~6 b4 Z1 T' U, B3 I
% P# [1 o7 x ^0 u
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
) K" M+ f3 D& K' s, e' J5 {
UARTPuts("------------------------------------------------------------\r\n", -1);
6 _8 h* p+ G, G& F j0 u9 D( W4 V
% X7 d# f- O9 A3 w7 t
! s7 _& [* ~8 e1 h$ |: j1 s
( a5 e( ]+ c6 O8 x3 \" D: w' L
UARTPuts("------------------------------------------------------------\r\n", -1);
# v* j; ]5 l, p
UARTPuts(" C6748 ECAP Test\r\n", -1);
* }9 H5 X( `/ p# b
// ECAP 捕获初始化
# o6 w: K+ u' Y/ k
ECAPInit();
5 r" Y& g) u( `$ V
UARTPuts("Initialize ECAP.......\r\n",-1);
" v/ `5 Z1 c! L2 @. `+ b Z
for(i=0;i<5;i++)
3 K$ Z1 _1 p' o o$ S' @
{
x& I& g; } C9 D/ i. x
for(j=0x00FFFFFF;j>0;j--); // 延时
8 a$ U0 @! M7 q1 n. b. ^# ]5 l
ECAPRead();
) ^2 }$ e; v! H1 _) p: E# I7 \" @
}
: E0 G0 r" Q9 F% F, t8 [& H* b
UARTPuts("\r\n",-1);
- Q7 l. G7 W* c& T2 @ U
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
! u4 @, C+ p& B A& L
UARTPuts("------------------------------------------------------------\r\n", -1);
" A0 H* M. z+ H5 K/ u5 u
9 W8 G& S7 N2 N. h4 G
// 主循环
& w0 h- \' c$ r8 k
for(;;)
. w( B$ Z9 l& z! W: X7 }
{
9 [: s- `* \' K* P
; o. E- s0 |2 I0 a' Z U
}
( a/ P. a+ |; X7 y/ h( F
}
8 V: a+ ]; S# p. t4 W
! |& X, G: S# Y5 X; V( G
/****************************************************************************/
0 G0 V. X; G& E& ^% b
/* */
6 @" K5 J8 V6 t; R/ _
/* PSC 初始化 */
1 `5 u6 C( n4 e0 `+ q( i) ^4 f
/* */
0 x e: h) p+ T
/****************************************************************************/
8 L" v# H2 X# j. }3 R& E8 B' ~% J
void PSCInit(void)
" C+ P( ^; W7 f m
{
8 M6 `4 I0 q6 u3 b7 ]. j S8 i
// 使能 EHRPWM 和 ECAP 模块
1 g0 l, ~; |' f$ k0 r: f; e
// 对相应外设模块的使能也可以在 BootLoader 中完成
# J( e8 J7 \% @( n$ u9 I
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
; J% w4 A; _# b' m9 b5 P
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
3 J" }8 Y% n+ K( Q0 y
}
; W5 z8 D: Y* ^1 H$ g
0 ^! A" h, I# L R
/****************************************************************************/
; M x) L/ ]2 }
/* */
: l, F& c% Z: N) ?# B9 l0 T
/* GPIO 管脚复用配置 */
# j b2 e7 [* X, X
/* */
* e0 z5 p7 s/ i/ L6 p( m
/****************************************************************************/
4 L# L( T% X% h
void GPIOBankPinMuxSet(void)
) z; ^: G6 n |& L! P6 ?. ^
{
) f7 Y7 W8 c7 U. I7 n
EHRPWM1PinMuxSetup();
z# Q6 s C; j( J
7 m( a; t1 w$ L1 n- C* Z# Z
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
" D0 Z) q) p7 h0 T- Y5 ?
// 作为捕获功能时管脚方向为输入
$ [' J. [- c" |' p# h1 [
// 作为辅助脉宽调制时管脚方向为输出
- ]7 h: l" y- L6 y+ X: k
// ECAP2 / APWM2
8 Z% s, j: q' T5 ` Y2 ^
ECAPPinMuxSetup(2);
* S0 i8 Y) C. Q7 a
# t* T4 J2 J, _- p8 n2 V' B
// ECAP2 / APWM2方向设置为输入
9 j$ K0 X+ z/ ^3 H; g4 {
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
) W2 R! z! J; j( t% W6 K- b
}
3 _& `5 X. y" n) @
" M8 a0 F1 \" m3 H- w
/****************************************************************************/
/ l% N5 X/ A$ H$ I1 l
/* */
! A$ q# D, k; |5 @7 p, j7 D9 A% W
/* PWM 输出波形 */
. e) D$ Y% C' L+ m1 E1 B
/* */
" Q4 A- V* A; ?# u* ~
/****************************************************************************/
* r# O, q5 C: X' G6 A- ^ [; Z
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
* Z& V- b: y+ l+ `1 ~* I5 A
{
6 w' S# z4 u8 A+ q1 g7 i
// 时间基准配置
Z2 U4 t8 a6 L) {
// 时钟配置
9 C) M2 u8 Q4 M8 }/ t& @: S
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
W6 I7 r7 v* I/ Y9 Y
- }2 E# S* {- y& a: c2 Q
// 配置周期
' W" Y# B, s' |6 s0 [& [% T
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
0 U2 Q0 S4 {' Z# i! I5 C- F. b
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
- I. J6 W: Y9 f& ^0 O
) q8 I9 q5 |+ m( ~ ?, i
// 禁用输入同步信号
8 G+ Y# X; w( t, Y' g! r
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
5 {- _. V7 Y$ z# Z* z8 v
, u2 w9 H5 a \: D# a# m( O
// 禁用输出同步信号
6 X4 j5 J7 f% W8 J$ k: ?- R
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
& B B: o2 I" F) i/ O. P
^+ Y4 q" m* l+ X
// 仿真(DEBUG)模式行为配置
4 V( }6 l9 g% I& o# j! O
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
$ l' r3 o4 N, B: s
, Y' v( U+ q' t5 E/ [
// 配置计数比较器子模块
* Y3 H* m8 p) w
// 加载比较器 A 值
3 ~& N. o- n) x9 w) K4 d$ M
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
2 ^7 ?( P, C8 O
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 L' x; A! j$ e: n+ c0 Q7 k. m/ V7 T
# {. i( R: t* I2 F
// 加载比较器 B 值
4 i; W1 _: O: j, |$ r
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
: [4 |- o- Q& k4 R. z
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
6 X6 y9 H$ w# x" X7 k( E ~
4 B4 P8 ~! P0 ~2 q5 Z \( P
// 功能限定配置(输出引脚触发方式设定)
5 ]7 V5 h$ C. ]1 ]
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
9 s0 y4 e2 h; }, z' _
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
7 P% J9 c+ o4 x& h7 K4 o
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
, C4 }7 N% v/ |& [5 ]. ^% a5 w
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
; C- y) P3 `3 k; w4 P0 W+ \
% y4 E) M3 g4 ]2 w9 {, v
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
9 h7 x6 S5 L2 | n- @
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
( {3 P% y J$ e/ {6 o! l
6 [. V8 P) _; S. k8 C* `
// 禁用斩波子模块
! D" W0 T) H& E3 i6 d. g
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
Q# X4 F: Q$ P0 x- Y
# Z# Y. j2 |2 p
// 禁用错误控制事件
5 r6 f2 z2 j' K. @- V4 ~- {2 j) ?
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
0 y0 B) k6 ^' V7 i1 m
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
6 |) W: s; o" ~; h. K# }, \$ Q
( O5 R! M. l; I
// 事件触发配置
0 o& K% S7 i; B
// 每三次事件发生产生中断
6 e E" s7 m" a' r
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
7 G" E3 X. \2 {+ z) @
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
( s& e% P+ l- Q4 u
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
8 e) [9 a8 d8 m1 T
// 使能中断
9 H! F' ]* A; v8 m) S/ k: ?* ~" a
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
- R% e4 T2 k2 @+ m
4 \' Y+ o7 f' \! X' d% T4 m
// 禁用高精度子模块
; N0 X1 A) Q3 F
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
3 w( X: m" A3 g h9 C, _
0 N& F. ]3 i3 z4 H6 |1 @
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
0 V& a' q& y2 Q/ _4 t
}
5 c! ?. O8 J, F2 h7 F
, t% Z8 j( w. J6 R5 a `
void ChopperWaveform(void)
( R- X2 [* I" T' ?4 A# L
{
" p* ]. g0 Y1 Z* [8 t
// 50% 占空比
) a4 {. K" p7 C
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
: v; a. h4 m( M2 z2 H0 ]
// 4 分频
2 N5 Q8 @, C. v; H
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
9 e0 M& c$ S/ m2 T
// 单个脉冲宽度
/ L; i0 T. W) c; X8 @9 q6 H; x
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
6 q& P8 z6 O6 x' b: P' O
// 使能斩波子模块
+ m; n% B7 S$ s6 [! R% @
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
: w! \( L( D( i O! L
}
R/ ]9 @" Y$ N7 w4 q5 F& E p1 f* y! A
) `$ k' u, `9 r, }* u
/****************************************************************************/
, b* c6 @ J4 _. y
/* */
7 X; z$ I0 U6 X; h8 `8 `
/* PWM 中断初始化 */
/ Y" q$ o$ w$ ^: A# q
/* */
- _& \) }( u1 j' s# k; {" h' x) F" d
/****************************************************************************/
1 }; ?1 U$ _' a. o8 G( ?
void PWMInterruptInit(void)
% T. C8 F+ C* l' U3 X
{
8 f2 e0 Z/ B9 o% \5 q/ ?* l
// 注册中断服务函数
4 q3 z& q& f+ @' ^' G8 N* |
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
+ M( I3 M" h0 ]2 j5 t
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
3 n9 y$ b" q2 V
! k2 {0 i, a* Z0 [4 F0 N
// 映射中断
8 l# I1 q' z3 ?# s9 G6 _
IntChannelSet(SYS_INT_EHRPWM1, 2);
; o' D. _7 ?/ g! ~3 R9 P' q
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
9 i G. E' u2 H9 {$ M* h2 ~% g
# D# Z* W3 ~* m, f7 U$ F5 a# z1 ?. l
// 使能中断
8 X4 G. x/ x' W3 V+ U
IntSystemEnable(SYS_INT_EHRPWM1);
( \2 a0 A C' C. C
IntSystemEnable(SYS_INT_EHRPWM1TZ);
) ?4 k& q) ?3 X
}
* k$ |* A; ^) C! v
' _. R$ \8 G1 Q4 x+ t5 o1 b
/****************************************************************************/
) m# }3 X7 u7 P; u
/* */
; G( S8 J4 q# B- n# L- t
/* ARM 中断初始化 */
" J" i9 W2 t9 ?& p
/* */
1 k* [6 l) I% N7 z7 h( Q
/****************************************************************************/
' Q7 t) C6 c" O3 B: n
void InterruptInit(void)
/ N# U' T- M/ n7 ^7 O
{
9 d- |! l# n W* u+ L
// 初始化 ARM 中断控制器
4 Y- x/ j/ t% o% e( l6 R
IntAINTCInit();
2 M) I: P. [0 f5 Q* q, ~( A8 Z( v! r
/ l* Y1 u& L4 C \$ J- z8 a) e
// 使能 IRQ(CPSR)
2 `0 m; I, X* E
IntMasterIRQEnable();
. n9 B* P2 X2 P; P
$ T; h! _! \0 \7 o
// 使能中断(AINTC GER)
% [) b% r7 K; F- V( }) B* V
IntGlobalEnable();
' E5 s* r3 k; T
[- J" C Z3 n- J( a# i
// 使能中断(AINTC HIER)
& t% Z+ y! d0 U- U
IntIRQEnable();
- ?$ D( V. L( u6 d) }0 l5 w4 t
}
4 Q" l+ N& S; L
! Y. ^. S8 R2 {% y
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
7 v# F7 C0 G2 p, q" O+ a/ [
/* */
* m U8 A/ O+ W* {/ O$ l# j: K1 m
/* 中断服务函数 */
1 y/ v ]' k ]
/* */
) Y4 w) {! N+ M
/****************************************************************************/
5 w+ R/ e/ V' u
void PWMEventIsr(void)
) ?/ q( P' m9 Q- h
{
9 T! \3 S! {6 O% v
IntSystemStatusClear(SYS_INT_EHRPWM1);
# n' @3 g+ X; H! \
" R% G0 k- [6 V
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
' s7 ]! }0 X) Z* S
}
/ G- ]" D+ Y( x! T/ a
( C, _3 t) T" R0 g
void PWMTZIsr(void)
8 N9 u' l0 ]: L2 Z
{
& e. l# w& B: M( o+ v2 ]0 i- U
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
( `* _7 i/ R5 c/ m* b' o
# ~, t' x( p( W q9 ^# L
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
$ l: _7 W! [+ {) H5 M( h
}
) m: c4 w: k+ @3 w
+ N" X1 e8 P5 H) d5 b: t
/****************************************************************************/
$ B/ x1 x2 P( d
/* */
% }2 K+ ?" s0 O( J* q* {; X( Q
/* 初始化捕获模块 */
+ l$ U& p7 u% V( M5 v* P5 @1 @
/* */
$ g7 l' d( X: g- Q; F+ C( b
/****************************************************************************/
( H( F$ k" X" n6 i m% ~. q' k
void ECAPInit(void)
: P- z% \: j3 C- o! a4 a
{
$ ]9 k9 v* h( X/ Y1 L
/*-----设置 ECCTL1-----*/
, D W* r; W, `& l. G/ {
// 使能CAP寄存器装载
" \# d3 Y( h4 t; O: N$ n" F
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
7 A' [/ l. d2 Z4 y
// 设置预分频值.
" L; e, Z. C: u H0 y6 _9 \
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
3 ~3 F$ P1 |% K5 O, l
// 上升沿触发捕获事件
2 I4 ?7 T" o5 R
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
# j) I# I# J& B R- y: d8 z
// 输入捕获后重新装载计数器值.
# N6 }& O* i6 s$ d1 Q
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
+ ^0 H# X I# Y! a
; |1 ]9 O* p" ~! r+ G, T% d+ y |
/*-----设置 ECCTL2-----*/
$ k6 W% {4 L( o8 @2 I
// 连续模式
) s3 _: b9 f9 B% w
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
, S% ^/ D, L* d8 b! R( i7 k4 W
// ECAP计数器TSCTR持续计数
9 I7 X k6 g5 I% A4 O" w6 N
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
$ U0 s6 T1 n9 k6 P
// 禁用同步输出和同步输入
% r4 q& n5 m8 F' s L
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
$ m/ A% f5 k" V! h0 X' M) @
// 配置 ECAP 2 为 CAPTURE 模式
- J. k6 k( j, ^& ?; E
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
/ ]: ^8 j, u% O3 U
! W8 X' [& Q3 g& J! z% C
// 使能中断
9 Q' v( c6 F/ R3 f: z3 p$ m# N
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
9 R9 X' z% Q! q4 Y) j2 S
}
- a5 T" v" q+ ^' K
! m) A) z8 e2 G3 w- l
/****************************************************************************/
* \1 x4 Q$ @# _* r
/* */
7 G% ?, X$ M- J9 Y- ]; l
/* 取得捕获结果 */
/ y: Z% ]! s# }; m) Z& r
/* */
; F" z% p; T4 t' z6 K
/****************************************************************************/
. a0 ^: e/ `9 p
unsigned int ECAPRead(void)
. K3 d( R1 d, f4 Q. g# I
{
W) d# I P4 J( u4 Z% a4 w6 s
unsigned int capvalue;
! Q$ b) K' j& u m
unsigned long frequency;
7 U; t! J5 X3 B5 J
( A; m2 Z9 \( B7 q+ G
// Event1 中断标志
" V* P' q- D T& U% |1 a6 c0 N9 f
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
/ B$ ]0 f7 }; [( @; s
{
, j* V$ k2 {" P
// 取得捕获计数
+ f' [+ |) Y9 R& I9 ~. X
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
2 d6 y! F3 F* H0 C# a0 t P
capvalue = ECAPResult.cap1;
3 W) D2 a1 ~* R8 q1 ^; p# `
J9 ~) s4 V# |. p- O
// CAPTRUE 模块 228M 时钟主频
/ C6 v1 a/ y9 l( c
frequency = 228000000/capvalue;
. D/ y1 I) ], c! O
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
, T9 }9 m6 K" `0 x+ {
& w+ M+ p7 G' i
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
9 @) X- C" L; U+ _& o
// IntEventClear(SYS_INT_ECAP2);
6 h+ t- d& T$ z6 n' z( A# {3 d
}
! B/ N/ ]3 A: w
return frequency;
' \; O6 ^% F; ]6 u) j2 Y
}
5 n0 G7 ]. U. \
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
; C* q: i9 q6 ~& P8 f! S7 P' ?
[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