嵌入式开发者社区
标题:
请问一下怎么产生PWM波
[打印本页]
作者:
浙江第一帅
时间:
2018-10-30 16:46
标题:
请问一下怎么产生PWM波
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
4 @2 O! [3 [. y+ B2 m) }- i) V1 n
作者:
浙江第一帅
时间:
2018-10-30 17:00
/****************************************************************************/
8 H" ^5 B# u2 g3 j. ^# Y# l. [
/* */
( o8 h' K( Y) `* Y4 V0 v" v
/* 宏定义 */
1 X5 S9 A# z/ B3 o5 c" F
/* */
6 k+ h6 v6 d( P5 w$ O8 @4 N/ N
/****************************************************************************/
4 C" k1 D, e0 j) h6 m
// 软件断点
5 J o" j+ L! C$ c3 a6 B
#define SW_BREAKPOINT asm(" SWBP 0 ");
" m: M% A" N' i
8 V1 M! U8 {+ P! N' g l1 [# ^- Y: ?+ F
// 时钟分频
Y4 l" V/ K ^% P1 i! i: i
#define CLOCK_DIV_VAL 228
. ^% W8 ?8 e) r- w
) e5 |" U) _- E1 f0 |2 W
/****************************************************************************/
9 I1 h1 p0 d6 ?/ R) J* g* w/ I! ~7 Q
/* */
y5 T( X0 S q3 V8 G x
/* 全局变量 */
5 O# s5 P) M4 ]6 ]# z
/* */
$ G; }: b: \, x! p: y
/****************************************************************************/
5 w, a( u' l$ ^. j- c6 d
ECAPCONTEXT ECAPResult;
- s) \- a* Q. i7 A! O
0 j# L( u: l; i1 X2 G
/****************************************************************************/
E9 ]8 o' x8 K' D$ N, F5 C) a2 e
/* */
& |, H9 _& R. H0 Y+ G
/* 函数声明 */
" r( H! b" s! ]. F7 p$ d
/* */
; J7 A4 d$ W. b; S
/****************************************************************************/
1 O) R6 }, h' _; j% n& i+ W
// 外设使能配置
7 @- u) d, M7 w
void PSCInit(void);
: v2 ~, S3 ^& t; O2 a' T* h
9 { j& |+ w4 L
// GPIO 管脚复用配置
: \; D& Z: L, ^
void GPIOBankPinMuxSet();
' t* q3 l0 }6 V
H# s" |; g: b% O) C, o- W _
// 产生波形
7 X: H% Q& G: w2 ^+ c
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
+ y8 K. d0 E; k& c; y: R# Y/ x
void ChopperWaveform(void);
4 t5 V9 y4 D/ X, r& E
0 h( r# D6 R; I" R
// ECAP初始化和读函数
0 W; z1 n; u9 A j
void ECAPInit(void);
- }+ P+ ]1 W6 h& q5 r
unsigned int ECAPRead(void);
$ G. d9 l# I: ]$ ?+ V
' r0 Y2 P9 q) d$ M& N
//ARM 中断初始化
0 [! K! s+ m* p
void InterruptInit(void);
9 T% v1 P+ @7 ^8 I/ R6 z
! z/ |, n O- p P
// PWM 中断初始化
: T6 K( M$ R: n" H
void PWMInterruptInit(void);
/ E# K! e0 }/ l6 z
// 中断服务函数
' E: g( n# s5 F7 d$ y" A& x1 N
// PWM 事件
5 n" E0 t% V9 J
void PWMEventIsr(void);
" J3 Q0 c& Y0 v$ @
// PWM 错误控制事件
/ D: y( S: u2 {" l
void PWMTZIsr(void);
! _$ x1 F! ]$ J l* \2 r4 i
# b7 K# `: }" ]( O! I
/****************************************************************************/
9 ?6 v9 ^+ ~/ Z( |% |
/* */
K; F* h& \/ x' L
/* 主函数 */
, Z5 K- \& A/ L5 w
/* */
; ]4 ?; c. k3 V% C$ M8 \/ p, Z
/****************************************************************************/
7 ~7 S% n2 t6 E1 B6 [
int main(void)
4 C) U6 X+ d1 q: b3 e2 X1 |0 b& B
{
0 k1 E' R/ ^) B3 k9 ]
// 外设使能配置
* k0 [% X8 s$ u/ [: m; i8 t: R
PSCInit();
6 y! [' y8 i1 C6 l/ x. u+ D. v
! }% A7 i" T+ T9 B6 `& @( C
// 初始化串口终端 使用串口2
5 s# D% o! ^$ I" E" e' @/ K S
UARTStdioInit();
2 v* ]1 Y- I1 l2 y) A. w
$ Z: c) y1 h; F: M8 I5 r
// GPIO 管脚复用配置
+ K$ S7 X2 k" S# v+ B! ?: C
GPIOBankPinMuxSet();
, n ?" Q3 C: |0 _
* g5 \: ?. n4 [4 h0 R7 V0 {
// ARM 中断初始化
7 v4 f: J$ I6 I h
InterruptInit();
. Y( u8 F9 A' Z# Q$ n
6 H* c6 F7 w( D2 t
// PWM 中断初始化
( o9 d9 v4 l0 i! r
PWMInterruptInit();
: N6 r, a/ w8 k; q$ {
T3 y6 l7 u% X5 K6 f6 h
unsigned char i;
1 z- @" X2 j# U. V3 |
unsigned int j;
* l1 R! d) P" O7 @
: M8 }7 y h- Y- y/ X
UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
5 h5 S- k# M1 o
UARTPuts("------------------------------------------------------------\r\n", -1);
& q" K, W+ R. B/ T' \; u( c' B! a4 O
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);
# U+ w$ X5 C: k. S/ F
// 产生波形
$ {9 o: @ l% f; z( q& F6 u: F) T2 B
PWM1ABasic(25000,50);
9 `2 a! {. }$ s
3 x s9 d& h# [- k) X' s
UARTPuts(" C6748 PWM Test Over!\r\n",-1);
$ K O' @, h- @* J8 q
UARTPuts("------------------------------------------------------------\r\n", -1);
, ~# O% `# [! C, k4 W9 @ j5 Q. q
6 ` R+ c4 \+ B# [( a
, r# s; q M: k4 R E
3 G e; l& ~- Y, D
UARTPuts("------------------------------------------------------------\r\n", -1);
. `* z' ]0 e2 L- Q
UARTPuts(" C6748 ECAP Test\r\n", -1);
" ^$ Q$ \ c" j% f, e; h& F
// ECAP 捕获初始化
) C& ^6 a: g; X4 w; D
ECAPInit();
- o7 `! Q( z9 ?; N/ }
UARTPuts("Initialize ECAP.......\r\n",-1);
1 w! \6 m) }8 ?- _
for(i=0;i<5;i++)
! I h2 j' c. k8 j8 w
{
, t, w; O+ s3 `$ N+ C
for(j=0x00FFFFFF;j>0;j--); // 延时
9 T. }6 B$ Q: L* v, x a
ECAPRead();
" \/ ^3 G$ v. p! C! r" n% h
}
9 X+ t. z% u5 L: I3 @
UARTPuts("\r\n",-1);
# w" Z/ m" K) i' T* @
UARTPuts(" C6748 ECAP Test Over!\r\n",-1);
1 p2 y& E$ o( r' T
UARTPuts("------------------------------------------------------------\r\n", -1);
, s2 m: e6 ^8 J( j4 T
) q8 O2 h* q# y3 _, \2 t
// 主循环
/ R: J/ V& f- K! V' `6 D+ |+ |! @
for(;;)
8 @3 G" \$ N7 X4 w( t! u. j2 w1 n. r
{
: O8 i; A5 T. u1 x2 c7 c
; l2 ^2 S$ M! O0 _: g3 D; O
}
7 n% C( C+ ^, X$ Q w! `
}
# h& N6 f+ @! b& S# X
5 w! J3 P4 F+ t3 W) a, j
/****************************************************************************/
( L4 u r# f. |6 M5 K
/* */
! Z8 x5 n/ e/ [7 g% Z( a7 f& o6 T
/* PSC 初始化 */
3 O( F4 U& \/ D: v
/* */
8 `' h3 ?/ A/ J! J
/****************************************************************************/
/ B( B& Q7 R! c2 s8 U# D) p8 M" N9 r
void PSCInit(void)
. O. X1 l }9 a6 z0 u4 j
{
: [( e" O; P7 O) c+ [& i9 `7 \3 O- R, ^
// 使能 EHRPWM 和 ECAP 模块
8 ?( K: j) k( \" L
// 对相应外设模块的使能也可以在 BootLoader 中完成
7 f3 |+ w* v. R5 d$ {$ q, M
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
. K2 k; k6 V4 S6 m/ ]; z+ r9 Z
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% a1 c" f9 ?" k( c2 P
}
) g" t2 h: k5 A0 b* f# c
! h- T7 W4 _$ _0 s9 m9 ~" ]
/****************************************************************************/
$ q$ A0 B2 p( i7 A
/* */
( r6 x8 q) ^& j0 [
/* GPIO 管脚复用配置 */
8 I1 X3 |' ]/ t: F
/* */
2 Q5 a& m# i" S4 F7 P. ^* A
/****************************************************************************/
$ R0 ] R" O7 q7 z& M8 M2 O6 u
void GPIOBankPinMuxSet(void)
% S3 e, M: i, L/ U. q
{
; J+ N8 }$ K8 e7 p0 X& l/ D3 V
EHRPWM1PinMuxSetup();
' r( ~( |0 Y$ w, ~$ z* H& }
. y0 A/ `) x8 `& {
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
6 ]. k: {/ g3 ^7 s
// 作为捕获功能时管脚方向为输入
]; I/ }; d4 o2 e7 v! M
// 作为辅助脉宽调制时管脚方向为输出
2 n$ z5 ]0 D1 H1 \$ d6 V
// ECAP2 / APWM2
; f b; P6 `& u- h" h7 t
ECAPPinMuxSetup(2);
9 U. o% i$ y* K9 o, ~6 z
& H. n! u0 R7 g* F Q5 t# ]
// ECAP2 / APWM2方向设置为输入
' R* O: O0 f& g S4 x, k% J
GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]
; E$ f5 L. m; f% u8 [
}
& H# w) [& w" ^- h$ B9 ^
: R$ x9 q! p( ~+ q7 o' V
/****************************************************************************/
) _% d& u5 L0 `6 ^, k9 c3 t8 L
/* */
6 M' @1 m8 W% r' `% M* n' f
/* PWM 输出波形 */
1 Z; |$ E: a) e& F. t$ z+ l
/* */
6 D1 n: O6 b0 y9 |3 r
/****************************************************************************/
' _1 z* I* u2 B2 y/ ^1 ]. X4 R- H4 v
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
3 \! d3 K0 s, f- x( Z
{
2 o4 g1 v6 l/ u8 o% g3 F( \
// 时间基准配置
& p+ s& V4 N2 R5 n0 j
// 时钟配置
; ?# E6 E3 R! w* v: V& g3 X
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
* z) O0 q! _; Q- K
: x- ^. _; m$ V+ B) u' V/ y
// 配置周期
% E6 r& R% g$ i5 ~" S
EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
/ J8 G0 e2 g- M6 |8 j3 A' G
pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
/ L( A }, T0 r- H1 K
4 ?0 U( v" M/ ~2 O
// 禁用输入同步信号
, R/ }; M( x4 V: D2 k( W. R
EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
! z* y4 N2 T6 _/ Y! c) }9 C
6 N V2 I0 s/ O4 V2 n6 F/ ^
// 禁用输出同步信号
$ k$ s% m: y3 y* \) G
EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
5 d2 b. w& m& T0 c# {
4 O' p/ \( l) X( j, b& e
// 仿真(DEBUG)模式行为配置
/ s. B# _$ [5 X' o2 b
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
3 f6 z5 p; J* d
) S4 `; F3 q5 f7 V( \
// 配置计数比较器子模块
) _+ h7 g' [& A) Z; E, F
// 加载比较器 A 值
* C! K. z/ d5 ]
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
3 d" F1 d m/ k! A0 H
EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
# b! T5 X8 B- L* h: H
0 x+ ~9 u2 `0 U) J
// 加载比较器 B 值
7 w: R0 r) H, I: Y) H6 K
EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
3 |! V( X$ _9 d4 j8 w9 I
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
: }2 m) {- l; [
# t; H0 H4 @& v2 \
// 功能限定配置(输出引脚触发方式设定)
, `" M! X0 v: V
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
: K. A) o& a* r
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
; \) _( W( T! V. V; v" M
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
% o7 C" u' q' D! o4 Z- X
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
2 c" ^3 X2 P$ F& M. o# h" X9 k
2 F, Q3 m/ b2 g4 T8 p* P
// 禁用(旁路,信号直接输出到斩波子模块)死区模块
8 B, W4 M J) ~2 W$ `4 @: O
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
/ |6 p, c" A Q- \' [) L/ q! l I
" ~0 X: Y5 G) }7 q/ i
// 禁用斩波子模块
& l2 N ~+ c' K% V: k, O+ o
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
+ V4 K: L* D1 [: J) o4 Q( w( d
( j7 t3 @' R$ Y, b2 o7 X
// 禁用错误控制事件
: e( u. k6 T) ?6 f
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
Y x" r6 o3 u1 y# R6 E6 [9 n
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
, C q2 S6 ~& i4 B
- V! I4 B/ {; ^' a) j) j
// 事件触发配置
0 I2 u5 k9 b1 ]
// 每三次事件发生产生中断
* I. h g) w' t# e2 K
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
& g# G% Z" a- L5 i
// 时间基准计数等于有效计数比较寄存器 B 值 产生事件
8 r* y1 M7 @" `! J. V; _
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
- M+ [% h3 g+ H& a( s9 j
// 使能中断
# o/ T* |7 |( L* n1 ^! w
EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
) q# N: [, r7 a$ T3 b' b! n2 Z- j/ |
! _% O/ V! E$ A- z
// 禁用高精度子模块
* o3 ?. e( }) \
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
9 _7 B/ U v" j9 x4 w+ Q: @
/ o' p1 t) Y5 K) `3 W! d$ Z
UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
' }7 k7 [! R, z/ A) S3 ]; G
}
2 T' }) g( q1 v! V4 Y/ q) E
; W3 Z( H- `& b! M" O# ?
void ChopperWaveform(void)
! k; C0 Q3 W- U
{
) ]! x* n2 [$ Z* ]+ g$ }1 U
// 50% 占空比
1 A" R7 N5 b- N2 l( G& b' [; }3 @! E& ^
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
3 L2 s. Z' B7 v- w/ W! L# k2 Q
// 4 分频
- s) s' M# {" N! a
EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
; t$ W# K: S- k
// 单个脉冲宽度
# N: m/ w5 @* e$ }# A$ z, ?8 [) @
EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
5 ~0 L2 Z/ a. O. L! r
// 使能斩波子模块
" y5 U: o5 i/ R/ Q7 i
EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
t$ _+ K: H7 B, I+ B
}
% M% C* U! L3 e
0 a( g2 y& f% Z0 R. o
/****************************************************************************/
: V) i1 G$ ~4 u* I: D& y9 l
/* */
5 Y0 I7 t- |& i* Q
/* PWM 中断初始化 */
9 r$ `, U1 Y6 M8 g+ |+ ~( I$ p
/* */
" z4 l7 M* t" Z; M% r( @5 ~! X1 M
/****************************************************************************/
- o; ^* `* v& S( {) V4 m: p; A
void PWMInterruptInit(void)
7 W) {# O4 P8 M! u- }
{
4 S r; D% q* ^; r) u
// 注册中断服务函数
" b9 c' O5 U. e o9 p
IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
! |0 @/ h9 S4 M1 F7 t2 W1 h
IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
% O6 S% Q" N: g
x+ Q& Z) M. Q5 s
// 映射中断
m! I0 \1 o! L, s% k3 S; b4 Q
IntChannelSet(SYS_INT_EHRPWM1, 2);
/ m% G9 j2 K2 u
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
8 F5 e' e9 M% H5 t# j8 Q
% {. R+ {; a1 r* |1 E3 e$ X
// 使能中断
" v* d; x5 k6 u5 Y7 L
IntSystemEnable(SYS_INT_EHRPWM1);
2 D2 H/ e x& n) i3 @
IntSystemEnable(SYS_INT_EHRPWM1TZ);
0 L6 Q2 [& w5 g
}
8 y0 w& R# U: e# V( M+ r5 U5 z
g7 D6 z+ v; W; q2 V# @1 f
/****************************************************************************/
* g& `+ M/ [( {
/* */
) `4 p& {2 q# @# M7 _$ w/ x( N3 H j
/* ARM 中断初始化 */
# w0 c' x" ]/ z( j( d$ s1 L
/* */
; o5 X0 s; G- J; q, D
/****************************************************************************/
! C, i8 o! a; T
void InterruptInit(void)
7 J! N. u. x0 y' z
{
# t" |6 B2 y1 }/ X
// 初始化 ARM 中断控制器
6 Q k! ~; q& I3 G0 g
IntAINTCInit();
5 E5 t I4 z: l
: `! P; l. @) S
// 使能 IRQ(CPSR)
; B1 `% L- b' u
IntMasterIRQEnable();
+ i. u9 c- C, n) b
, F$ e4 w! D @3 \& T
// 使能中断(AINTC GER)
0 o2 m3 t9 r6 w# I3 ~
IntGlobalEnable();
4 k9 b5 s1 i8 M- l( Y" E, i* Y
& Z/ t* U7 p$ P+ ~, F" G5 _! |
// 使能中断(AINTC HIER)
! E" }* G) W! S* ~7 c! m/ H
IntIRQEnable();
) ^. y' ?! q- V$ ^$ Y( i1 Q( B
}
% f! _5 A% f! V" i6 I" d9 V* I
* s6 N, D' q' H2 H7 a
作者:
浙江第一帅
时间:
2018-10-30 17:03
/****************************************************************************/
* e" Q% D9 i: s% K* f4 K
/* */
; S. F8 _! X9 ?4 x- _8 ~$ Z
/* 中断服务函数 */
2 L; T: J4 u/ k. b- I" D
/* */
* a, d0 |! q5 ]
/****************************************************************************/
1 a! P$ U6 [3 Y2 Y; p6 _" p) i$ Z
void PWMEventIsr(void)
. v, \9 K* p6 u8 \0 a# C8 e, W: k( p
{
5 d+ @$ J9 `# g0 `4 b$ b U. Z
IntSystemStatusClear(SYS_INT_EHRPWM1);
, @4 m) o& X" `# t* i
) \ v2 V6 s9 M- B
EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
6 B0 n) s8 K' ?
}
: ?" x0 W4 G; p, K6 h, Q z
K- K. h6 D: A' ]
void PWMTZIsr(void)
7 u0 z* ^" Z, f+ [$ w! @7 L( ~
{
) ?9 J' {6 r% J" r
IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
% h0 U0 }9 u6 z
: l: F5 g6 f; {% @
EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
& m8 b' s( J' e) e
}
$ _# c" L: A# W- m- Z: z
3 t3 D7 P/ j) O+ G# R0 D
/****************************************************************************/
. {5 ]2 D: l0 f1 T& P' j8 }
/* */
1 k7 J- e% P+ f3 f! z9 z/ E
/* 初始化捕获模块 */
' [4 L2 t+ p4 \* V- Z2 m
/* */
0 o2 ^3 f3 }) u {8 Y# P' P% F
/****************************************************************************/
5 u4 c3 E3 n$ d5 _& k
void ECAPInit(void)
: C0 C$ R" y( r. i. W. [! A
{
3 r+ r( R& C( C/ P
/*-----设置 ECCTL1-----*/
# l/ h+ r V& ]; i3 J
// 使能CAP寄存器装载
- [ l3 ~( D! L& c' s# G+ o
ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
# h3 y$ i: D$ |& q8 h
// 设置预分频值.
! \8 X* J. {% ~1 n% O
ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
: i# n0 @0 L/ Y0 ]8 A- G, J. Q% ~! P
// 上升沿触发捕获事件
6 i" r9 `% I4 H/ N3 C. R3 |# c
ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
; n" g: ?9 O0 J& z1 Q, B) `
// 输入捕获后重新装载计数器值.
, E7 M6 `& u# Y! A: @, N, n
ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
% C$ h! l" j: \, ]7 z# T3 d3 |' g
" T( Y- j5 N! F& ?9 H8 @8 {( v! u
/*-----设置 ECCTL2-----*/
# z% \. _- `2 Q2 L) C9 ^5 {5 |
// 连续模式
[) b- b$ P* G7 g0 o, F- e
ECAPContinousModeConfig(SOC_ECAP_2_REGS);
8 o [, X9 W4 Y) K7 b$ ~- @& [1 s, [
// ECAP计数器TSCTR持续计数
. T# q+ ?( E# o$ F
ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
3 s- j4 {) t" f: F; X$ E
// 禁用同步输出和同步输入
& `% e2 R9 }4 ?: S J' k
ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
7 V6 `, `* ]. O
// 配置 ECAP 2 为 CAPTURE 模式
; E: C x/ U+ o6 Q A* F
ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
7 j3 b2 f; r r" E. i: w
6 w* g6 N* _6 k$ t
// 使能中断
' q8 b6 n' h" X% n# s7 a
// ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
( S4 o4 P5 x* w6 t: ~) b2 C8 |
}
! \$ l7 K0 C2 }# p3 v
9 ~, F' Y! C1 L8 {% e }
/****************************************************************************/
2 |# @. n i% V
/* */
) j! e4 p4 O7 J$ }1 O7 ~3 b3 L
/* 取得捕获结果 */
! E9 I" E: H1 D
/* */
. R0 O4 l, G6 a8 U3 x, a( N/ N
/****************************************************************************/
- k+ W$ h: X" N- R5 [
unsigned int ECAPRead(void)
5 f& N0 E' r3 Q8 S' I# x
{
) b( M" V7 K4 t8 s3 M' H5 @7 Z* V
unsigned int capvalue;
0 g Q6 i% H) I# Z& T
unsigned long frequency;
/ W- `2 k6 q% P+ F/ J6 u
) i' M& s! p, J! l5 I
// Event1 中断标志
6 i* H, o$ @ W
if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
" C* B# I9 C R$ |! f; {2 I3 @
{
$ n: x6 Q, H9 E8 j
// 取得捕获计数
; F6 L/ u, Q8 \) X8 \
EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
% y# q, y V& J: M( l
capvalue = ECAPResult.cap1;
" Y& x' W8 `- s" X( {
9 Y4 W" }; Y( F' D6 \
// CAPTRUE 模块 228M 时钟主频
$ x b- d$ w' w) X5 j
frequency = 228000000/capvalue;
% X! d, W# b( t+ X
UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
$ z* C5 @! U* f+ P- W
; \" F3 ]1 J# I& ^. D
ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
* w9 g* m, y& k/ d
// IntEventClear(SYS_INT_ECAP2);
2 U% C& `8 g& r6 O7 N* u) _+ K
}
0 ?" x! n" s* J) W% [
return frequency;
7 R$ ^2 w. i* h! u
}
5 n5 V! e' S2 C8 ]* _
作者:
浙江第一帅
时间:
2018-10-30 17:58
请问一下有ECAP_APWM波产生PWM波
作者:
广州创龙莫工
时间:
2018-10-31 09:08
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
8 B) @, U8 i" q0 B7 y, [+ T
[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