嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
- l( L0 \7 u# e
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
+ |! P! J0 o9 i2 x8 C2 m
/* */
( s9 Q& M+ q, F
/* 宏定义 */
4 Y6 {8 z- e5 o% q) i
/* */
! L5 x5 c" [7 x6 o% z( |
/****************************************************************************/
' S; Q( [6 w" s. y2 _, p( B
// 软件断点
' f2 B7 X% k9 V5 r5 I6 w' Z
#define SW_BREAKPOINT asm(" SWBP 0 ");
9 J7 N( |' z2 a: [% T
& u9 ?( [% C% v
// 时钟分频
! i; W, W4 E7 S
#define CLOCK_DIV_VAL 228
; C. { `2 O! @0 F6 v7 B9 ?1 h! Q# N% L& Q
2 j; P5 b: ~) U# u
/****************************************************************************/
2 ?; |1 \2 R' E( t( p
/* */
" y) \8 V* z& D2 P' \) T
/* 全局变量 */
2 S# S0 Q8 s- x6 e
/* */
4 I) [0 B/ ]$ N m6 M
/****************************************************************************/
+ a6 }( B1 y# z8 l
ECAPCONTEXT ECAPResult;
! m! z8 w$ R9 v: D
4 C; q7 t+ s- P4 P8 R3 @9 s+ S
/****************************************************************************/
3 w1 [( {0 W/ r. l
/* */
. H' ]& s7 a: Y3 Q6 x
/* 函数声明 */
$ ^1 q Y3 L- `, S* {, F, o
/* */
/ V8 O; S+ @( M
/****************************************************************************/
' @2 t1 T" s6 ]4 Y6 L
// 外设使能配置
/ M+ m/ N6 N# c
void PSCInit(void);
- J/ t p3 P1 X# u% V
2 [4 D- e* n4 F9 g! S! ?
// GPIO 管脚复用配置
3 r* P D7 Z2 x
void GPIOBankPinMuxSet();
9 F8 S, N1 b" ? ]" g
! U- K W1 [& \% }
// 产生波形
; a8 }- |6 Q4 G+ f+ r, C
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
, V3 J8 C# t) L8 X5 r* E
void ChopperWaveform(void);
. J" q& p8 F" [
0 m- |7 k( @8 i. y h
// ECAP初始化和读函数
0 f9 \2 C* ?: X6 {- f! a3 w
void ECAPInit(void);
6 i9 n- c$ R1 N" z! U) w2 ?
unsigned int ECAPRead(void);
G# V- f3 M E
% F% |9 k* e; ?) x: O* C v
//ARM 中断初始化
' Y4 s5 ?2 D& Y% H% A. U
void InterruptInit(void);
d& D) x" a+ ]% w1 t! e
! E$ g i0 Z. P2 U
// PWM 中断初始化
) H1 a, M1 ]( d: W% P7 M4 L! w
void PWMInterruptInit(void);
$ j# R/ x% M: t7 O! n
// 中断服务函数
7 m4 Z* w3 G8 p |3 ^( n9 |8 H
// PWM 事件
) E' P1 q. d6 @0 q/ R
void PWMEventIsr(void);
- X" [ V/ C/ f: V& l- g; G
// PWM 错误控制事件
5 C) e' J2 c6 {8 R- N
void PWMTZIsr(void);
* |* C! A. d8 X9 ^' P$ ~" l9 N
# P& M9 e' m }# q' Y8 B3 Y+ M2 K. j
/****************************************************************************/
& {# p" x6 [5 o, x' I9 V; I) N
/* */
3 N/ e- R9 A- v ~5 V& O
/* 主函数 */
$ K1 R6 e/ H( k5 s" R5 ^% @3 z
/* */
+ d$ |) d# b! U
/****************************************************************************/
" g( F# ^9 m6 y4 g/ P
int main(void)
/ _! J4 f; C2 C$ y) Z. R" J4 Z& \
{
! T/ D7 t# v5 B- X
// 外设使能配置
- |6 W. k7 B3 f& }
PSCInit();
, F. R- j2 n. u' V) ]
1 o; d9 S/ b" |+ G' Q( V& e
// 初始化串口终端 使用串口2
: O1 f p7 q, V
UARTStdioInit();
3 C$ X, @ b3 `) ]0 r
H8 U' E- g% { x: G0 e
// GPIO 管脚复用配置
7 R7 `1 k. _/ u0 |
GPIOBankPinMuxSet();
# |( v/ u X3 w2 V+ l
0 _0 a" W1 Y3 T
// ARM 中断初始化
- {& j: h8 V8 F/ F
InterruptInit();
# k: U) o, r- u6 J
6 O6 b% @4 \% ?9 p- h2 {
// PWM 中断初始化
/ ^6 O2 }% j1 [' I: k c U- x
PWMInterruptInit();
" l/ a( j8 c. g: w) ~) z! h. Z
' s, F8 p j& r$ v
unsigned char i;
: |1 E3 A+ d4 e2 O7 a5 b3 [
unsigned int j;
* d0 W3 F8 m( w; T5 c# I; Y5 n
* k. n% a0 E7 g7 H0 U. S
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 k3 B. Q7 B+ }$ ^ {, T
UARTPuts("------------------------------------------------------------\r\n", -1);
4 L9 b; t$ S4 M! b8 B
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
$ H, }1 i: h% y+ g# O. B, i! F
// 产生波形
7 O, Y% Y0 Q3 X o- U# x$ D
PWM1ABasic(25000,50);
% L+ j$ y" Z: U. P: [
- I1 \% ~, K' q8 k# M; o
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
; {; p& ?! c/ P
UARTPuts("------------------------------------------------------------\r\n", -1);
8 q! x; k3 N* T) I2 w4 I
+ f; |7 w2 X k/ T& R! Z! Q
1 P1 M6 U2 }, F" \
% R$ E7 _8 W5 _+ Y9 S# Q5 [% |6 M
UARTPuts("------------------------------------------------------------\r\n", -1);
6 u3 `8 w4 ]/ a! Y( R7 j% J# A
UARTPuts(" C6748 ECAP Test\r\n", -1);
; L- a! Q% }# E
// ECAP 捕获初始化
/ x( D) V/ o/ X
ECAPInit();
' Z3 K3 _1 e5 h6 a' U4 t
UARTPuts("Initialize ECAP.......\r\n",-1);
5 z. M6 s; R1 P! [6 X* o" n& R+ \2 h5 Z
for(i=0;i<5;i++)
1 `, i$ c) H5 @5 y# w: r
{
& A+ z/ F" _- U7 ^2 {7 L2 t
for(j=0x00FFFFFF;j>0;j--); // 延时
0 z" m+ @/ o. ?4 a5 N
ECAPRead();
% b% I6 k" ~, F: v: v
}
- K% a; ^1 c8 o) W! |& P @6 J3 z
UARTPuts("\r\n",-1);
8 J$ P; s; `& q: @5 a' d8 I
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
* C5 D6 @: J* S
UARTPuts("------------------------------------------------------------\r\n", -1);
& t* d* c* J$ u$ Q
3 I; [9 A9 e, w
// 主循环
% @8 s+ H" ?8 I5 \8 y
for(;;)
) w: _$ d; w. l% U/ H1 O) R' {
{
& A) |! I2 J7 C
6 Z5 e. {6 |5 B
}
# Q) q* [) O/ c+ i0 h
}
$ Q# s4 j- m0 g4 p2 [+ y
+ w. D* m% D6 N
/****************************************************************************/
- a( E% G9 F: e% H
/* */
- V4 C3 }+ V" d3 \, _5 o3 {
/* PSC 初始化 */
# ~9 w9 D/ k/ l) z! S- n K
/* */
; H/ H7 a6 |, A4 h( U
/****************************************************************************/
0 s5 z; \# ~ `5 E
void PSCInit(void)
$ S0 g7 n' v# D! U, ?2 U
{
5 @0 F% l9 K6 C; ~; j
// 使能 EHRPWM 和 ECAP 模块
9 b4 b! O) R& M+ I3 s: `' i' }
// 对相应外设模块的使能也可以在 BootLoader 中完成
& p0 z8 k3 p" ~/ N( N1 c" \
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ p \5 ^6 f& i3 R: Y
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
4 J6 p/ I; }( s- g5 {
}
5 Y; S2 ?& z0 j: f' U
* p3 a4 i$ _( u' a4 f
/****************************************************************************/
* l" B6 v1 M$ o% b( v7 h7 z/ F
/* */
8 q, @8 Z' B6 @) E& {2 H/ }
/* GPIO 管脚复用配置 */
4 f b, ?; |" @% T9 a
/* */
; V) H- t" \) g0 [4 t1 ] |( u9 X
/****************************************************************************/
( N$ ~; i/ r3 g7 H Q R4 x
void GPIOBankPinMuxSet(void)
5 b3 p5 A- J# ?, t* {1 P( f8 N2 U/ Y
{
# F& A! F& R) U. X$ U- l: ~
EHRPWM1PinMuxSetup();
/ A T# O0 W j0 Z0 y. P9 A& M
6 Y8 F: W& ~7 s6 F1 _* y$ P1 M
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
& E" n" Q9 W9 N/ }
// 作为捕获功能时管脚方向为输入
0 I8 t( C* |8 J% B! Y8 _
// 作为辅助脉宽调制时管脚方向为输出
; F, g( F C6 |
// ECAP2 / APWM2
0 G3 `$ @) |" J
ECAPPinMuxSetup(2);
; N) ?. H" ]1 e
( L$ h2 T% G& D0 u, L
// ECAP2 / APWM2方向设置为输入
3 X4 `, W. t+ C; K$ [
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
R: w4 _# {8 b8 k
}
) Y3 L" h" _* G, a6 R6 O% S
9 f, t$ {7 }! y0 y$ ?
/****************************************************************************/
- k% m+ a- D5 ?! U3 U
/* */
9 ?" }, Z8 ]8 ]* K2 T. Q2 f6 X
/* PWM 输出波形 */
7 k, h* ~' b+ [
/* */
# e; m' }" X: x& ?
/****************************************************************************/
0 o& O0 ~- R3 d7 l; V& M9 i* z7 m1 N
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
% H/ L7 u1 r5 |9 N
{
H2 P1 l- B# V; i; j, i" I) Q5 }' |
// 时间基准配置
7 j9 ~9 j$ `+ {; ^+ _# \
// 时钟配置
- r! s' l9 X5 q7 @ ?0 D; {: e
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
; y) |( f6 V6 `5 S
. }- ]/ P' k6 t6 g( d3 T6 f2 F
// 配置周期
5 }: Q4 [$ `5 q3 c" y" V1 H9 }7 e
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
; j& C; C# d# v, e+ J F; n
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
8 w% M: t2 }2 |) H
6 a5 h( B6 q' `- m& X
// 禁用输入同步信号
* B- f( M) N& t3 Z6 J, m, W- T
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
5 d; ?! E1 C( g
/ [ a6 d' U- m* }8 \8 b
// 禁用输出同步信号
) }& b" p' d2 J8 P/ W4 U
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
6 W7 \- \- \; x& d: A
+ j, G5 i3 G+ e4 i) j
// 仿真(DEBUG)模式行为配置
+ T4 B7 G2 E" y( ^- f! n
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
* D* z& ~/ w% o8 B
( S* C7 t0 V: W0 `+ G5 d- g
// 配置计数比较器子模块
6 E6 J* U# E9 G9 p/ Q# L
// 加载比较器 A 值
7 S- ?' s! Z5 m+ a
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
# }) ~5 F& J+ N3 I
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
& I' P3 z3 b% f$ x1 G
7 T4 \9 M0 k$ h8 m5 D5 e
// 加载比较器 B 值
3 A( W8 o$ p) |2 t, @, x
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
6 p* t( G+ C/ Y. [6 [& m
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
* g: n% p* X9 C# L& M
! |! o. H2 c: ^5 F9 s0 b
// 功能限定配置(输出引脚触发方式设定)
! K1 L9 V- F G
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
) D0 Y# J6 J9 q( t: D- s
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
9 D" t4 J" G2 [3 Z! R& O p
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
6 J$ ?; B7 P, e$ n
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
, C: N' o0 R; u( u0 d7 l
% @5 H% Z! Z1 Q* }
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
c: Y6 |7 Z M
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
' Y( f) v) k; y. t- ^# f
9 @0 \1 p/ T+ A' G; Y4 A
// 禁用斩波子模块
- y8 s7 A9 {$ P: ^
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
6 h% F( J5 n8 p% K4 I; d4 @2 u
# ~& [6 O& Q1 i( u6 L
// 禁用错误控制事件
( V1 F' z, I; h' d
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
+ J) D* }, u5 ]' ?, \
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
, n" B# {, Y- x% q. ~! `- |
+ r) t- B7 g+ R3 v- K3 ^
// 事件触发配置
' `2 T! M( A& l
// 每三次事件发生产生中断
3 z, Q% d$ S2 E( N9 ^
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
7 W8 v) J# C* }8 f8 T) u0 m$ Q
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
* {! N+ J* C" y6 U3 j3 u. z0 |
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
& H. O ?; r- t0 j' c' d* y+ \6 n
// 使能中断
+ C9 m: E. V& ~8 v# H8 B
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
) _4 f' b$ T2 a4 ^4 @/ x
3 N7 |; G/ X8 G
// 禁用高精度子模块
' `6 Y$ \0 D8 ~. [
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
s& z6 o( t. S0 T0 u8 \
) x Z) c) \6 F
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
/ x/ x$ X- L# x/ {0 N7 D' V* x
}
& Z, a: M4 T4 B" y- q
$ I$ i$ f3 O( v% y
void ChopperWaveform(void)
( H# J- W- M% I4 q' e! Q. x. B2 j
{
: w: n# L9 D) m9 z
// 50% 占空比
: N( b2 [ r5 A( O' Z/ C. V& V3 S- ?
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
, C) `& d: v8 Q! S/ p) U& w
// 4 分频
% Q: F; o& ^/ e
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
# [5 p0 D. s. _8 Q( A+ c; E
// 单个脉冲宽度
2 A1 _8 t* s" J- d0 y" S# }, j
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
; @. O: K7 I, L1 V
// 使能斩波子模块
. ]* B( [4 m" \
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
0 m5 W4 W8 |3 x9 O# U& m) d
}
) r% d9 i. r4 V) ]7 z# D, y: N& k
" ]. `3 e, D' k8 B4 \, r
/****************************************************************************/
" z: P. ^" b: [% ]3 k3 y0 R
/* */
0 Q0 b9 o( O% _4 u, S" e
/* PWM 中断初始化 */
3 f1 Y9 R' `. s
/* */
: g5 `4 U/ ?; w. z
/****************************************************************************/
6 @' f9 k! i$ |/ |7 e/ L
void PWMInterruptInit(void)
5 i. x! A. m( i" A7 t. Y" ]
{
$ _, W) I, ?# E1 G4 d- s
// 注册中断服务函数
& Z2 j4 `0 W2 Z5 v* C- t; x
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
9 X7 m0 a/ ~) w3 b$ g( S
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
, D* f) m. ]) J
% `% a6 Q* R0 ]7 I7 Q
// 映射中断
6 R* {. b8 Q$ w- X
IntChannelSet(SYS_INT_EHRPWM1, 2);
1 H3 K3 o, \+ } B4 X
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
$ f0 g4 i9 J! ~% K, t
, ~* V2 O. {! r6 p0 a! e& b3 y
// 使能中断
. M! f! C% X. L& D' \4 t; u
IntSystemEnable(SYS_INT_EHRPWM1);
: @8 c2 x2 k' x
IntSystemEnable(SYS_INT_EHRPWM1TZ);
, u8 e9 Y4 g7 D
}
- h% d0 s) k, q9 b8 x' s! X7 r
# _0 J \+ ^. G
/****************************************************************************/
# Q$ A. [0 r/ R- x$ l
/* */
" P# F/ ~2 E$ B) k- B
/* ARM 中断初始化 */
# K$ ^, j% ?& x. K! ]$ P @
/* */
% \6 v6 P B$ l' F
/****************************************************************************/
5 h$ c. W& w* B! e: O
void InterruptInit(void)
- |7 [1 c' w0 r, j& L
{
* U# Y; o" G+ T- u& Z* i
// 初始化 ARM 中断控制器
; p4 _1 c( ^4 b. A. W0 U
IntAINTCInit();
3 A r; X" D9 c' ]/ H8 ]
( G% s5 u/ O$ I% f/ n1 p% e7 j
// 使能 IRQ(CPSR)
% ~2 m* A9 J9 r
IntMasterIRQEnable();
! \' e- s* t, T3 C. `" X5 S% N V
7 J% A% C. ?2 r
// 使能中断(AINTC GER)
# u4 C3 O& h( p9 p1 h" ?% ]) p* H% _
IntGlobalEnable();
0 d. A7 X5 A2 L' y6 T N5 @
! e9 Z5 z3 _6 n+ N0 j& w, B
// 使能中断(AINTC HIER)
0 u- n% D+ I& O
IntIRQEnable();
/ c0 H! L8 u7 {$ n: x& O, V
}
" p0 P# b8 d, N D+ J2 {, c9 b
) e5 |+ @/ Y0 k$ W
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
$ @ X) S. G& ~
/* */
$ ~) w& q* d/ s+ R7 C1 C
/* 中断服务函数 */
2 ?' [$ x4 `: O6 F; o
/* */
) N8 Y# M \, v" p" c; _
/****************************************************************************/
: a q4 Q7 Y, m2 N) N8 d
void PWMEventIsr(void)
8 E8 A6 l" w. Q- s6 ^
{
8 \; g6 P# y& U* X2 t! L* R; w
IntSystemStatusClear(SYS_INT_EHRPWM1);
; d2 K9 x9 q4 I( C! r
/ y8 k- F/ {; h* a H' z
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
7 ~. _: y/ r1 ]% g& \8 z
}
) ~* }: K% Q6 r! ?1 ~
2 P- P) R6 ~- b, l h' {+ n
void PWMTZIsr(void)
- e- K& l" G6 m# i
{
# X0 G3 v5 b% d9 c
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
' F ?% G+ t6 M) I) q* k1 j
% E" U1 y) l7 d5 ]1 _4 F' n% E
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. U; u. q9 t& P
}
9 G8 a; _9 W$ H( ]! b1 N
* [! K2 A+ q, P( t
/****************************************************************************/
! l* i6 c4 p i1 v
/* */
P" p. o, R1 v R
/* 初始化捕获模块 */
* p1 ~5 d0 n4 R. e% [
/* */
$ u% U( s0 n1 ~
/****************************************************************************/
# K9 T( z, B; j, N" ^2 r) i. W4 q
void ECAPInit(void)
2 Q* U ^$ I$ _& V/ M7 |
{
- h, Y9 Y4 b. K" h9 n1 b
/*-----设置 ECCTL1-----*/
5 j! h! C5 C0 h& u
// 使能CAP寄存器装载
; C R9 }8 c* O! |0 h! `2 q
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
7 R$ i) |, q& ~9 K
// 设置预分频值.
# \7 z2 I9 j8 N4 U0 B
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
6 e5 E6 X. m# G1 C3 V `: G. l
// 上升沿触发捕获事件
! N& i7 ]8 e M% X
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
5 K" k) n9 u8 \- F) f; u
// 输入捕获后重新装载计数器值.
7 b8 e( @; a) R1 \& s) ~
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
9 m; i# B$ Q; ]4 ^! ?# H
8 `! j0 H/ p. v U9 C
/*-----设置 ECCTL2-----*/
5 l: h- X! }4 i. }9 Y4 j/ H
// 连续模式
$ T+ z8 Y. A9 q9 C' I. o
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
& X' E0 e9 a/ p0 R! U! L
// ECAP计数器TSCTR持续计数
8 ? U& [7 D5 w2 n% O# {( {6 R
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
; \; k' E! Q. @/ d9 M" _4 Q
// 禁用同步输出和同步输入
, {0 I, G+ w7 d/ o: \6 x T! M
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
( x. o0 z+ M8 v
// 配置 ECAP 2 为 CAPTURE 模式
3 a& u, I* }1 A! I: V* W
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; l2 T" u9 W k* n4 b9 ^6 C( K7 N4 @) g
* b/ f' @' k u
// 使能中断
: M* D; Q& s( p. V
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
( Q) R1 g% e: w7 p8 z: I
}
+ M# d2 A$ N2 N: }
7 o5 X2 ]7 x& D6 C) q
/****************************************************************************/
: W; V' l( d7 E0 A4 R
/* */
5 u# T* B. A. h
/* 取得捕获结果 */
& U* R2 o0 ?' k* V6 Q
/* */
! ]* U y, Q$ r* m
/****************************************************************************/
4 m& D+ m( j. r% P, L% D8 L% Y
unsigned int ECAPRead(void)
r& l! | M" E8 W. }# P7 [$ w
{
* ~3 G+ p, t: C- u/ [% f; Q# h5 D- I
unsigned int capvalue;
1 H. d' w8 |- d) U
unsigned long frequency;
5 Z7 E/ {5 T# |
& w- t/ c1 v6 m1 y% r$ p* G7 p
// Event1 中断标志
, f' {3 [5 k; f
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
# N% T5 @1 F8 m8 m6 r
{
. x1 \/ B; `4 O7 T; s
// 取得捕获计数
! N, I7 [3 d* E: i4 ~0 U, W8 R/ m
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
Z6 W; ~* s* Y* q2 l L
capvalue = ECAPResult.cap1;
4 A0 e7 T; G& g% ]! u% Z/ V( Q
( T6 E) X+ `9 q7 U. t6 U5 N
// CAPTRUE 模块 228M 时钟主频
4 r) \) } {, c) u4 p
frequency = 228000000/capvalue;
/ I) W) C( u, N
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
! ^. }$ f) d. |8 {* |# X/ L/ F
0 ^+ G2 ?' G0 f5 u" _4 @ b" ^2 T
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
3 q4 {9 f) l' C# q# Q: l& q
// IntEventClear(SYS_INT_ECAP2);
# a5 k( }6 g7 v$ g
}
9 ~7 V# o) f& Y% U
return frequency;
7 E5 C% ?0 x# A e9 k- T0 ~
}
* g8 k! H" L" b# A6 i. _
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
* ?( M9 @' q' O, L) E; @5 ]
[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