嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
8 U$ c$ w0 p7 M3 h& S
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
5 V' A) [5 ]' s4 k' \4 Q2 {- K
/* */
% C; r0 i( s3 `, f/ Q9 y
/* 宏定义 */
- `6 L2 f5 f0 s9 a0 e
/* */
' U# Y! N5 K) T! l& B. W: J6 P; v
/****************************************************************************/
# s% B+ ?- ]" i5 D* x
// 软件断点
w* P7 |* [4 `9 u% k, [/ M3 o! t
#define SW_BREAKPOINT asm(" SWBP 0 ");
9 p5 a8 ^2 n: C7 O( K" U& d
' \" } ?7 @& ?3 i8 a7 ~$ L( v
// 时钟分频
2 P, Q! G0 E' f/ Q
#define CLOCK_DIV_VAL 228
, f( s* p8 C2 d0 X
' z7 z5 w: ~$ J+ k9 h0 I
/****************************************************************************/
+ R. E* Z/ {( h1 Z
/* */
; @% p7 E7 c& k6 V: C6 {
/* 全局变量 */
( T. J. p" P( s7 C8 Y8 T& a
/* */
. n: {# T; x- P, E
/****************************************************************************/
" W! N8 a& L0 h( ?
ECAPCONTEXT ECAPResult;
( \7 H5 p# Q7 J1 l0 O8 M5 n
- \# D. M6 U) r8 r
/****************************************************************************/
4 T) O* p% s9 o1 I P
/* */
; L! w) F& R, H" i8 x T! t* H
/* 函数声明 */
8 h( p( z, |0 L* ~
/* */
" J# ]7 n! H0 F x* l% @, }7 O8 Z
/****************************************************************************/
# B R" q# R9 E- d7 I7 P
// 外设使能配置
4 \- ^6 t: Y4 D9 `
void PSCInit(void);
' c# \; x2 d3 f2 Z! z( w, w1 l
0 j* t9 J$ h" h0 n+ I4 i: d" ?; _& X
// GPIO 管脚复用配置
% o: e' E [5 H. _& V! `
void GPIOBankPinMuxSet();
: k3 a. b# {/ u9 o
& t0 q0 A, @5 J4 l n
// 产生波形
8 T* l% f* r0 a* e& A3 U
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
+ }/ E2 S( D) m0 Y2 K6 H, p9 c
void ChopperWaveform(void);
9 V( u$ \/ @0 q; `& t4 e9 K7 T
& W" h0 g" z4 B9 i1 T" t; F
// ECAP初始化和读函数
0 ] R A! E/ X# n
void ECAPInit(void);
: d+ u5 q$ T# Z9 F
unsigned int ECAPRead(void);
5 W) E. f1 Y( ^+ Y, h3 R
6 P$ e/ _4 d7 m0 V# P
//ARM 中断初始化
4 ?8 O# u- b+ y5 C" k
void InterruptInit(void);
6 u& V* h# \" ~# w0 ^
7 D% U, r3 Y7 X, b; V+ ^ w
// PWM 中断初始化
$ f: a: \" m& a8 O
void PWMInterruptInit(void);
' _7 ]- ~- h3 G
// 中断服务函数
" V; c" W2 r: @% s% z) `
// PWM 事件
9 @, p/ S. c E$ J6 |" x! g; l
void PWMEventIsr(void);
0 t# C6 p0 \" ^
// PWM 错误控制事件
. Y# _) p5 o5 z6 w, i' \
void PWMTZIsr(void);
/ v2 j' d) |0 y+ D2 ~. U
$ N, a3 q# G/ P. N5 u
/****************************************************************************/
# G2 K# l5 g2 b1 J
/* */
- c/ Q0 j+ V1 v, m3 P) [% C2 G: F
/* 主函数 */
8 A9 E! N3 r0 k& V. }1 i& C. E
/* */
( B' } X; Q. U' h( W, H
/****************************************************************************/
+ ^7 l( }; }; _& K
int main(void)
) T |" Z+ k' _" z3 I$ x% O7 h
{
; g0 M. u s( j' I+ I, h
// 外设使能配置
( ~' I# Y/ @% ^ M
PSCInit();
% L' W8 z8 b' e/ U) x
) w3 {/ u$ W5 E: e: [
// 初始化串口终端 使用串口2
6 t h5 q( i- I% a0 ]; C
UARTStdioInit();
% Q# ~& [" c" c. \
4 {; J; e. _! j* J0 G
// GPIO 管脚复用配置
' z3 D7 ?: d2 O1 I Q* ?5 q# T" R0 n
GPIOBankPinMuxSet();
$ _0 b- }$ ?# X d' ?( t/ d. k; l
& v! v9 |+ n4 R( ~5 T+ s; _
// ARM 中断初始化
3 \9 V* p2 R* r5 B; o! e
InterruptInit();
. f) p; u6 E9 A* q0 M& g' w
3 c8 [, d6 j8 _
// PWM 中断初始化
; S3 ?) N: x$ g
PWMInterruptInit();
* S- n, Q! P2 G
8 w. q. Q2 H0 N+ m! }1 H
unsigned char i;
2 E! \; {3 w2 t! d. y% B& [9 M
unsigned int j;
1 i( D9 ?* u) B ] e
- h7 E* M! s3 h! F( d3 G
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
, m) \6 l w( l6 m2 L" A+ H
UARTPuts("------------------------------------------------------------\r\n", -1);
6 t$ I. W7 O4 P2 H+ ~( B7 H! n: o/ l
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
, J- d9 a& l$ j; V" b3 |
// 产生波形
/ y! l: n+ p, z$ l& c
PWM1ABasic(25000,50);
: P `# g; B5 _/ ~8 E) \& Q
+ ?+ J! B$ t Y7 S# I4 n
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
# w# ~( j+ K K# `2 r; y9 k& G
UARTPuts("------------------------------------------------------------\r\n", -1);
* [( o1 R9 c$ G: {
8 V! S, z4 b* ~
- G; |8 \& w4 c% x6 F) n
: j Z8 N9 \- [: r+ y
UARTPuts("------------------------------------------------------------\r\n", -1);
8 S# f: e0 _, R3 S
UARTPuts(" C6748 ECAP Test\r\n", -1);
7 g! F P3 q# T& T! K o$ {" f
// ECAP 捕获初始化
, R) ^" s. t: R: R- |
ECAPInit();
, b s& n( R7 t `1 s
UARTPuts("Initialize ECAP.......\r\n",-1);
% @- [) Y# L; {+ }3 |8 P! Y6 F1 d/ k
for(i=0;i<5;i++)
6 Y# {( T b5 V5 H* _1 C2 ] w
{
) d2 Q( j3 f2 |9 y/ q" q
for(j=0x00FFFFFF;j>0;j--); // 延时
9 q# R& }2 o# p, ^1 l; b
ECAPRead();
% D! N& s2 C0 I" F: U
}
/ d! [- u) \3 E! a! q. c2 K
UARTPuts("\r\n",-1);
- l3 P0 l' B, S5 O
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
! x4 Q- s' j# l8 Q1 d
UARTPuts("------------------------------------------------------------\r\n", -1);
$ B" f0 M5 X) B4 p
$ g; e% w2 J3 m0 s# y, _
// 主循环
1 K& v, w- a0 e9 s+ b$ `' d- L
for(;;)
+ t3 N" R$ _" c: }% b" R
{
2 T) c* L3 r' O$ l
- D5 b9 q% T* p x2 l/ F3 Q
}
/ Q9 W6 c; @% A8 K: I
}
8 d/ n1 l+ [5 X; e' K7 V& Q
d: e; L' j! R9 c
/****************************************************************************/
) v- q% o* K/ m$ F
/* */
" _+ @& l/ T. w1 n2 m
/* PSC 初始化 */
" [8 z; |6 \1 Y y$ D& a
/* */
* f( U: T/ X+ I# ]' P
/****************************************************************************/
6 i2 I0 o# q# `, R* g- W: R3 A8 C
void PSCInit(void)
q* L+ `% N* M1 l1 F; R9 o
{
6 R! y8 Z. @2 u# `+ o% L
// 使能 EHRPWM 和 ECAP 模块
9 @) _4 | i0 |
// 对相应外设模块的使能也可以在 BootLoader 中完成
5 n1 E) w, `9 }) J8 [2 V
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- k& O B7 d/ ]& \3 I
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
# Y6 I/ `$ [9 q: H' A$ T* t
}
- q2 h4 s. I1 H- T4 X7 w
; L; V' `7 L+ _0 x
/****************************************************************************/
5 e" u4 q* O$ C8 g5 z( I7 u$ j/ ^ P
/* */
* C' C. G0 H2 t/ l' U2 b& d
/* GPIO 管脚复用配置 */
% P$ n( N0 Z4 e; M# ^
/* */
2 w2 ]/ i1 i% e) H
/****************************************************************************/
$ t1 O9 ^, U; t
void GPIOBankPinMuxSet(void)
$ {/ o3 c C" v4 W1 L M. B9 `
{
( u/ ^. V( g* R) N! d/ g1 m
EHRPWM1PinMuxSetup();
! e7 x: i: g6 N y: ^
8 t9 }9 y% a- B% L. v9 m# k
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
! y! z' b7 y9 F0 ^% {+ G
// 作为捕获功能时管脚方向为输入
4 g1 [( L( u1 c8 i; M
// 作为辅助脉宽调制时管脚方向为输出
0 L D1 i) I4 b, |* `* \
// ECAP2 / APWM2
8 |7 h( r5 q. n5 u
ECAPPinMuxSetup(2);
- Y' d( X; B" `( K
7 Z* i# G; {# A
// ECAP2 / APWM2方向设置为输入
$ K! b+ p! M, d, y# y6 r
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
1 ]; X2 ]) l9 c5 g4 H
}
; t$ a& b2 g# w8 `* ^1 r
& n7 m# ~8 e/ T- S
/****************************************************************************/
/ [+ i+ D: u3 ~# L9 L, N$ ]
/* */
4 c" }! f! Y `$ E1 g: t
/* PWM 输出波形 */
: L2 I! ^$ ?% A5 `7 s
/* */
0 G4 B! y [& U# S- z
/****************************************************************************/
) S' T& P4 L% ?; S4 o
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
. I# I* M% x ?$ E
{
: {0 T& V& S2 g& m9 ^; h
// 时间基准配置
/ R8 Y% I/ ?1 s& B3 G4 w' U
// 时钟配置
1 r4 I1 Y- u: g$ O3 x
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
1 w0 ]- h7 A7 m& {" [, Q% R6 r
6 E: B5 J' r2 B6 o: J& q
// 配置周期
5 o+ }( {7 @7 k( Q% w
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
! {7 k3 E- u( c
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
4 [' K9 \- K7 g6 P
# U( t5 X( R& m5 w8 _& v
// 禁用输入同步信号
; P/ z3 \' H8 T8 I6 {% Z2 x# L0 i
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
! p2 Z0 Q- f0 l0 O
) e0 X% d3 r$ ~# w7 _! {
// 禁用输出同步信号
+ {# I7 t" w4 B7 I& U J
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
/ ~. R6 x' N& w$ q8 K
$ N+ z2 S; Q$ h% j
// 仿真(DEBUG)模式行为配置
2 n8 [. `- f- R6 l% R$ ]
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
; K2 w7 t- r! {0 j
9 e# M' F! I) r9 h$ @# r
// 配置计数比较器子模块
# V7 o! x& T; E0 K
// 加载比较器 A 值
/ O7 ?6 u+ F& P' X
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
% i- s0 A3 M. ^9 \# I9 O0 _
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
% t; E( U* N. b3 `) y1 M
6 ^3 c. H5 O0 \" B2 L2 }" C
// 加载比较器 B 值
6 n* }# [) F4 ^0 B( }2 }
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
2 g4 A2 N3 _$ f3 E8 r% o& M3 g+ x6 M
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
* y ]% b+ }2 W5 z1 o' x' @0 Q
# B* |0 j) Z; m; I4 I4 ~
// 功能限定配置(输出引脚触发方式设定)
4 [& I- J5 e8 T i4 i
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
- J+ `& X- j" @7 [! T- |8 w
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
' i `! f* G9 q+ E4 h& e+ E$ b
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
1 C! s2 e. p* u6 N* X; h, r/ k7 `/ Q
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
3 S) P# V8 m# G6 J1 Y0 Y
, T% ~0 y3 }/ Q* a
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
( n0 D/ a& V6 v$ e K$ e
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
2 d% D; y3 i% n3 p1 p- c! y
2 s N. d( e w/ Y
// 禁用斩波子模块
( U; h1 M& ]7 `5 u1 C7 H/ \
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
+ N* K( i- P0 `& M0 J
% p0 C+ X8 v3 |
// 禁用错误控制事件
7 d! b- K2 i5 O" @
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
" b4 T( L! r' h6 b6 y# v9 S. D
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
% I) l9 P8 d+ P0 d
+ H2 `! @4 [0 n& z. o/ S
// 事件触发配置
/ c, f/ F9 I. W! H2 X9 O
// 每三次事件发生产生中断
$ n5 ?4 ^$ B2 _% V( f% K
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
+ r4 O# q6 x! a ]9 t
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
' D# v# I5 p" K {' _" }
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
, }+ c% k& y( s# W
// 使能中断
1 m' a; @# U* F: @, H) v5 S2 K7 b8 i
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
. m0 F* [, ?2 L+ H) e
! p7 b8 g1 I) |# B( ` y$ b: s3 R
// 禁用高精度子模块
- [1 i( u# n% w
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
* n3 P5 Q1 v; y
( ^6 U3 ^3 x8 W3 p3 J6 d
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
( a& |/ o% Q. i. h# n$ W
}
! w. W/ c' x& h8 a& x+ J `- \, \
6 @" g0 n3 ?( _, \% W3 J5 u$ |
void ChopperWaveform(void)
( T; A% }% M+ }& U
{
! y) d. Q/ C" g2 l/ V, [
// 50% 占空比
- }, Z6 S- {6 {: B- {1 G6 p
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
1 T# S% a, G- N; P7 M
// 4 分频
; w9 S0 x( x- P
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
+ }; l/ q3 ?5 i' \, V' v
// 单个脉冲宽度
* T- O$ U0 q* h8 o( I! R( I/ J7 F
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
/ H* d2 j) y3 m3 i2 s ~! g3 V
// 使能斩波子模块
6 {( P8 C! P, X) v) N( L4 y! p
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
; T4 ?$ h- @% k5 t- O0 ~
}
. y6 f( p0 `+ F4 p& s
, u( t& r! ]; o9 C, m) _
/****************************************************************************/
% ?/ G& Z9 n6 H; w
/* */
* \. N; h/ c9 _+ O$ |
/* PWM 中断初始化 */
% {% v0 ^ w9 d3 b1 Y) h3 n: x
/* */
) _4 n! t. x% X5 O
/****************************************************************************/
$ p1 L; h" \2 B' I
void PWMInterruptInit(void)
, ]0 i1 l! a, L" [4 c3 S. {
{
/ R6 \( M' `. ^; w
// 注册中断服务函数
4 K- R! @6 c# z1 g; T
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
" M- D. C3 p- ?
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
d. ?* I$ p: O" T* a7 j
0 r0 t2 j, R, R# \& h
// 映射中断
! ?( F; s3 g4 ^5 o9 _! d
IntChannelSet(SYS_INT_EHRPWM1, 2);
3 T8 a- ]9 U- q8 G% A$ ]
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
: p9 j0 a7 X3 z) C1 Y7 |
4 ?" `+ g7 ?0 _; P% V
// 使能中断
& O# X3 u9 ^* r4 Y! ]1 R3 y; R; }
IntSystemEnable(SYS_INT_EHRPWM1);
" W& `, n, B, o+ ^5 l! E
IntSystemEnable(SYS_INT_EHRPWM1TZ);
5 Z5 ]) p* c8 M4 B J) o( U: G" W
}
; _' I+ ^" y# m
5 c% n a" \+ o$ @" X7 C# ~4 p
/****************************************************************************/
7 H/ u% Z! j0 D' i3 B6 ]
/* */
- L% ]' E. {: y% `) `; B. w
/* ARM 中断初始化 */
* e9 e1 o, B' R9 U
/* */
0 g/ U0 f7 i, g4 V
/****************************************************************************/
v9 T$ v( w2 q/ h) X
void InterruptInit(void)
; M; P6 U5 c1 O" l. c
{
/ {+ L+ i+ K1 Q8 A# e
// 初始化 ARM 中断控制器
) v/ A2 d4 T A7 u7 M9 @4 d
IntAINTCInit();
; w7 u$ {& q" A# s v, S
+ U3 ~6 J6 Z& r
// 使能 IRQ(CPSR)
4 S# q4 g' Z! N
IntMasterIRQEnable();
+ d% F& j" f9 @! {0 d
1 Q8 C5 |, ~: ?5 Z. Z2 ` @
// 使能中断(AINTC GER)
- Q2 N- ^+ D" B" _- C' j7 ~" F" k
IntGlobalEnable();
& R9 C' X7 Y9 l* v
. v h2 L! c9 Z: I
// 使能中断(AINTC HIER)
, `% K; W/ s+ Z' n
IntIRQEnable();
) H% F3 c+ Q) q: b8 i4 `- s
}
9 i6 I) f( ?; G
* E$ a: @$ o* e
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
; ~. y* Q$ j; X. J
/* */
0 Z* z) p8 a+ W- m. a1 [9 ?2 `
/* 中断服务函数 */
. B& r; j* C: _9 N( M* A l
/* */
' u% d0 w c3 K1 s
/****************************************************************************/
. I# G! E- _" \, @8 \' ?/ _' C5 K
void PWMEventIsr(void)
: L3 j. m- E7 s+ W- U0 d8 b; _3 \
{
: X. K! J# K$ G
IntSystemStatusClear(SYS_INT_EHRPWM1);
- P$ a% l' |* c) T0 j( ?2 K9 y6 o
- q8 ?; d7 x" s. N# Y, h+ T% T% s) r
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
' O+ u1 x2 n: \8 u$ R% U
}
: k4 N$ r4 f4 j) N$ t3 i
9 Q$ ^3 g) I0 i) h
void PWMTZIsr(void)
q; S( p% s" m* |" K& j$ p
{
2 o, f# R3 ]/ l" ], l
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
! B0 z. C9 n+ r. _: g# v8 |
3 f& b9 M+ M/ P2 b0 @7 _+ {
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
1 G% D5 x7 N, _/ k
}
2 ]. {' K: r+ l# B0 ?* r5 ?; E* V
. B6 n. x. o0 a& l8 g$ D6 |
/****************************************************************************/
7 x2 e( K: w7 H3 o( E
/* */
3 o! j* F7 p: } E
/* 初始化捕获模块 */
3 E6 q( _7 U: {8 @, A5 d
/* */
4 `# O+ t: b7 W, v( T- F
/****************************************************************************/
$ X) x0 {0 A4 H, N! C8 i! b- h
void ECAPInit(void)
% p2 n0 \1 U) v0 J/ m4 {0 e I
{
$ @# o+ c0 X5 t; u' p
/*-----设置 ECCTL1-----*/
! F2 s% G) r+ E( b `2 q) {+ k4 S
// 使能CAP寄存器装载
6 ?& D1 M% N& g* z2 J
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
~. F2 t( U- m5 [, r
// 设置预分频值.
. s. i+ J1 s/ g! N% Q
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
% N$ l! M5 g" r9 I
// 上升沿触发捕获事件
& U- a N+ p0 o5 Q& V
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
- v0 K2 q2 q; h5 o; e6 D! m
// 输入捕获后重新装载计数器值.
9 ~" L9 D9 }0 k) o3 e& ^
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
3 I2 o: J& Z5 t0 g: I' ~
+ p5 N; t! z4 g
/*-----设置 ECCTL2-----*/
3 Z5 p s# B- J, I
// 连续模式
# | G8 k; o$ s
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
# C% ~+ W! p/ h6 A9 K
// ECAP计数器TSCTR持续计数
4 y" {/ M' ~* g; m
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
+ ]. `# P/ j) ~8 }) J
// 禁用同步输出和同步输入
! |% y ]2 I9 ^! c% c
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
5 p/ D$ x. x5 d( D3 a
// 配置 ECAP 2 为 CAPTURE 模式
/ U) N R7 J' J1 N
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
/ }# h2 M/ ~0 [+ W% ^0 R) k3 ^
/ j9 e0 s) t3 P0 m- Q: s0 p/ z
// 使能中断
% N; k% _1 W$ y, O6 L! F
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
& D& F) ~, \. i* o: t# {' D0 l( F
}
3 q( r; h) b; B1 [6 H4 G; @
. Y( Q8 J/ }; I) u: T
/****************************************************************************/
5 b. ]( k7 d: ]
/* */
) L" y; u2 s2 ?( P8 ?
/* 取得捕获结果 */
; t I4 @* [/ h% ?& | N
/* */
' e/ S# P4 s% a5 l: h1 B: G
/****************************************************************************/
: R) g+ F& o$ U6 e
unsigned int ECAPRead(void)
* n9 ^& L0 [& Q6 c9 [
{
+ Y6 h1 t+ n4 b0 x" E: B8 s
unsigned int capvalue;
" ?& l2 ^6 z% P( _: [8 b
unsigned long frequency;
% f" e4 O5 h+ I" S$ @) U& ?2 Y
+ S7 Q: s0 Y R% y4 a7 H- R. ?
// Event1 中断标志
3 r8 y4 V" T" f+ ]( v: c5 f
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
2 l1 |7 r" F3 G m4 v. g
{
, X+ J7 W# g7 Q5 w4 `5 F
// 取得捕获计数
. i" A+ v! c2 D5 d
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
6 i/ |4 W6 j0 t3 y- D! M
capvalue = ECAPResult.cap1;
5 E9 K- C: x* R+ o; s
' I+ r! P, i- y7 }: f6 U
// CAPTRUE 模块 228M 时钟主频
9 M/ u7 R- N7 j
frequency = 228000000/capvalue;
8 X' O% B& A/ B# z
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
1 h. \0 t1 A5 g; [# A( e# `7 h
1 ^: o# r9 \: P( V0 F' S' z
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
' W U, K; i- Z7 H
// IntEventClear(SYS_INT_ECAP2);
) \$ O! }* ]* s4 L0 E: U2 m4 \: x3 F& {
}
9 h8 n% l( k2 j' o( Y( H
return frequency;
% r. v5 S* p4 T4 ]; G
}
3 g$ ?; D" k( c; z
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
+ N% p: L O, V) `( 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