请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4947|回复: 6

[已解决] 请问一下怎么产生PWM波

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
发表于 2018-10-30 16:46:13 | 显示全部楼层 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
' j  Q7 m* _( E
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
 楼主| 发表于 2018-10-30 17:00:28 | 显示全部楼层
/****************************************************************************/
( ^8 d* @( i4 @5 z7 \! x/ U/*                                                                          */, m7 m8 S2 N5 W, x+ o% C
/*              宏定义                                                      */& W+ G7 }! U* D  b6 u) A
/*                                                                          */9 `9 L1 [9 b. Q7 E' h
/****************************************************************************/
0 A; j! |- A% m* r// 软件断点
9 n; }* V1 h# ?6 W3 J$ s#define SW_BREAKPOINT     asm(" SWBP 0 ");2 v$ d( p( z9 E
$ `# \8 A+ I# a9 {1 F" `4 O0 o
// 时钟分频
0 \3 r& R1 [7 B" O! k#define CLOCK_DIV_VAL     228
' ]+ W7 V( S' s, k: b9 q" |' W$ w# L+ [
/****************************************************************************/
! e" U- i0 l: x2 S: I$ m/*                                                                          */
2 n6 t1 j( M. O  W/*              全局变量                                                    */
9 F. ?$ M3 m5 h" |9 h* L/*                                                                          */7 \7 q3 ^/ h1 v# K
/****************************************************************************/
2 s- _4 v4 L. r- F0 ]ECAPCONTEXT ECAPResult;
3 _/ l6 \6 G, `
7 U* Y( }( j) ~4 c/****************************************************************************/, i/ ~, ~0 i! K" s5 I
/*                                                                          */
& Z. F2 g7 q3 v" c4 N/*              函数声明                                                    */* }2 {9 [) ~* ^
/*                                                                          */
1 {' a+ b7 ]( v: x* T/****************************************************************************/
8 x3 |. u0 }0 u' `// 外设使能配置$ O  S) |  B4 D8 X' o" |
void PSCInit(void);
+ F3 f7 Q/ Z2 H% T
" ^* W8 {4 k. X2 t( d0 n// GPIO 管脚复用配置' J1 U9 V; i$ _& j5 V; I6 [' M
void GPIOBankPinMuxSet();- w/ D; e/ m2 {3 n9 `1 x2 {
( e! {6 w- W! z& R7 l  I
// 产生波形
$ y& h! V; S  e- `& X* Jvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
: R2 `, W% X3 Hvoid ChopperWaveform(void);
$ ~" W3 R' h7 X6 I& s
( p9 h& M% Q+ b0 q) y" e// ECAP初始化和读函数. g  z8 P$ l6 Y" `% o8 @
void ECAPInit(void);6 R& E& n( ^1 d4 i6 a
unsigned int ECAPRead(void);' X4 n. H- K5 q: k- y
' d' b" c4 u( L. N( `/ F
//ARM 中断初始化
( I2 {* k6 b8 i6 W4 C5 }void InterruptInit(void);$ g- O4 B* c% q6 C: v

6 D0 m+ B( j  }- }1 H! q" f: Q// PWM 中断初始化
- A$ ]2 l- j3 `" @& `void PWMInterruptInit(void);
4 Y4 n6 `: V8 U8 ]5 V9 a  t# b// 中断服务函数. h' g9 c, V: `  ~) `
// PWM 事件
* r5 v. ?: O/ ]; [void PWMEventIsr(void);8 n; ^! M1 S& P: {: u6 t
// PWM 错误控制事件
5 t2 u* z8 E& T! `void PWMTZIsr(void);- j7 s. B/ L0 X1 B( x/ L: m
9 Y& z) A( q8 @  ~' f
/****************************************************************************/
* O+ w/ o; R3 S0 Z' k. Y7 |/*                                                                          */3 M1 d8 t, ]0 v) ~) ^$ j8 i
/*              主函数                                                      */
, |2 m" l: j6 i6 Z" j, @# S: X/*                                                                          */3 e7 g* H, o# Q/ L2 |, X0 `
/****************************************************************************/2 N4 z* X) u) o& F6 D
int main(void)' n  R, Q4 y& I( D- x7 g8 X
{
; ]; V/ P) I5 o4 @) \        // 外设使能配置
& r$ q8 I5 z+ \) L& @        PSCInit();
- u% i7 o1 P- Z( y# i" K2 O' Y8 C1 U4 w- N5 Y! F: G
        // 初始化串口终端 使用串口2
: Q, q# W# z/ O        UARTStdioInit();2 d4 z8 ]1 P( P1 z
        8 D/ D! g) ]" E4 k: v# O
        // GPIO 管脚复用配置* S$ Q3 F, h  q2 p) t3 I( a5 V# _7 X' e6 Q- s
        GPIOBankPinMuxSet();
2 I7 K4 Z6 d& T; V1 k
) o  x1 D9 \, O# V        // ARM 中断初始化
4 E! e' B9 O" _8 H; |- h        InterruptInit();$ z/ o, m( i7 h0 a

& [4 w7 m2 T) @6 L, |' i% f        // PWM 中断初始化
5 P& Q$ i- n9 W0 J) z: \        PWMInterruptInit();
) P+ z/ ?% m6 ~( w
1 v0 ^8 A% z$ S: ]& E        unsigned char i;
9 E1 e6 ^' c. E; P; E" m        unsigned int j;; _3 T% X1 I# w
; d) k1 B4 K: C) b* R  G0 t
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);5 j2 W: C( F) ]( l  M2 a0 u
        UARTPuts("------------------------------------------------------------\r\n", -1);! U2 D, {. d3 H( o% m; s2 d
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
7 g8 ]& p9 {5 k9 ~% w5 Z  m        // 产生波形# b- ]: K2 ^# e8 \, F0 w" {
        PWM1ABasic(25000,50);  R/ |# V& q, Q7 i- w- t

: x' X# w1 R1 U8 u! z        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);4 z+ |9 n$ E6 ?: b
        UARTPuts("------------------------------------------------------------\r\n", -1);
  g; R5 C  F# g
' l7 X% q# Q- O, u' O) ]
: n, c  b, I( Z  b2 F; \) R" l3 F2 l4 y$ n
        UARTPuts("------------------------------------------------------------\r\n", -1);+ \+ n  f- R1 V# s0 r6 o5 H1 }9 q
        UARTPuts("                    C6748 ECAP Test\r\n", -1);. n( |& P1 \: P
        // ECAP 捕获初始化+ \) E5 R: u, z: ]' N/ ^! P5 a. R' X- }
        ECAPInit();
; Y' m" [% I3 E* _' _        UARTPuts("Initialize ECAP.......\r\n",-1);' f$ \$ g" z1 v/ X; X1 H
        for(i=0;i<5;i++)
& `3 |# ^3 i6 \! j) \. e) U8 w        {( W5 l/ I+ L$ W0 ^  S( z4 [; M
                    for(j=0x00FFFFFF;j>0;j--);            // 延时
! {* Z+ G3 J9 J6 e# v* d0 N) |                    ECAPRead();
& _& ]7 W& T# y. y8 _$ l$ f        }7 f, J# j1 h4 _0 n1 l4 ]
        UARTPuts("\r\n",-1);2 l2 O# F9 V0 m  N% A
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);/ u( u, u/ P3 L2 h5 B6 q0 d& A2 e# p
        UARTPuts("------------------------------------------------------------\r\n", -1);
( l& `, S! c9 S( E
0 S% j( l" c2 [/ G, j( }        // 主循环  G% O! F- G' q- @
        for(;;)
/ F" x( p! F7 z4 c2 t: A        {% K2 O! ]0 }4 p( T, W
9 V* ]# T/ [* }$ ?' K# M. {4 J
        }
6 G. D1 V. X% t}
$ w4 [, d  Z+ C  {+ @4 v- y4 f% _& [* x
/****************************************************************************/
- E9 c! ]1 Y2 w* _; I# R1 S/*                                                                          */! U" _7 x- i0 z2 f3 h
/*              PSC 初始化                                                  */( K7 p3 z% E5 L0 k* {
/*                                                                          */' I$ z& d3 Z) D- M* g
/****************************************************************************/" r0 e3 G& F9 f# x& s. M; M
void PSCInit(void): \6 g/ P4 d* K, A0 U$ l
{
. \& k5 \9 h$ v# P& R        // 使能  EHRPWM 和 ECAP 模块; ?9 O, T3 y9 r. n+ g% @
        // 对相应外设模块的使能也可以在 BootLoader 中完成
; I9 c0 E0 d! ^4 t; M# F  V    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
( l. w" m8 {3 L3 L3 O# j1 C    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
, q' o3 d& M" B: K" v}& [0 T, T8 w8 E  Z+ Y
9 }( u3 b" B4 ]& F3 N3 D9 x
/****************************************************************************/9 G2 w+ L/ n# x5 ?9 P
/*                                                                          */
% M0 C( k2 P( E, [/*              GPIO 管脚复用配置                                           */) Y, g& ^& ^0 I2 z6 Y
/*                                                                          */
1 d- T' T0 a1 W7 k/****************************************************************************/
+ m8 k& Z4 C% q" Mvoid GPIOBankPinMuxSet(void)
0 X! G7 v  ]8 v, \* s$ `- o$ \7 {7 V{1 R, t" T9 ^' l, [
        EHRPWM1PinMuxSetup();
; k3 ^3 b2 W/ t5 y2 M( P5 G
' H6 C  U6 J" P3 g        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
% J; T6 n- G% r: {% |        // 作为捕获功能时管脚方向为输入
' Y6 a1 t# E: z7 Q        // 作为辅助脉宽调制时管脚方向为输出( o( _  O3 N* ]
    // ECAP2 / APWM2+ |9 _2 v+ V- B
        ECAPPinMuxSetup(2);4 x6 b% n  ^) O8 z/ i
7 {0 k) ?  m  X6 Y. K. Y
        // ECAP2 / APWM2方向设置为输入8 Q* h+ l# y* g7 j$ t; h
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
$ c4 p* A  y2 z- N}3 B6 o9 o) h8 |/ u2 Q* x

( X0 G; G' v# D/****************************************************************************/
' E, P5 f* A6 d) x6 {" B; D/*                                                                          */8 v% G; X3 S2 o, }$ r- T. @
/*              PWM 输出波形                                                */% G5 k' D3 U  F9 W' K
/*                                                                          */
. R! f% i" R  Y# K/****************************************************************************/% o7 h9 f: ^: }! b1 G, T" C- ], L2 l9 ?
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
. Z  G* ?( y4 n$ r{
4 V1 B( g" e' q# S: C( F    // 时间基准配置% z/ O. e9 _/ S5 j5 t
    // 时钟配置
2 g3 v, u% ]% e9 u    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);. c( d+ a' Z) u1 S- E

1 f6 D. v  ~- G% T3 Y  i, N+ ~    // 配置周期# m3 ?3 [' ~0 g7 e  A
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,9 ?  N, w, ^, M8 V7 F' G
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);, u8 U. q6 Q' u

+ F& v( @# ]+ e. d( X. |7 F    // 禁用输入同步信号; ]. Z! v, h3 U2 a! }5 m
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
' j  x# d  ?0 r$ m7 a, g9 [
1 q' [$ f4 G9 t( C. N    // 禁用输出同步信号, f) j5 m# s# {+ K5 c
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
. G' X# g7 g7 _" _! ?0 G- Q
: c- r  W' G; T% Z  C, X    // 仿真(DEBUG)模式行为配置
/ T  f  e8 `  ^+ }6 y    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
0 @9 x  d, u- e: f% Z/ N& |* _% N6 P7 U2 U& M* t" z" s  s$ b
    // 配置计数比较器子模块+ B, b. j& d  N8 c7 j. x$ F7 B
    // 加载比较器 A 值/ t& u6 A5 W4 |) ~; d
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,) S& {# w7 c9 W$ }2 }
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
; g. w: n# l( Q& h0 Y
( I; \% z1 m+ Z) x# R+ c1 h    // 加载比较器 B 值8 ^% U  S3 y6 K' F0 w  [9 [0 u
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,: [) k- F' a: k, M# @. c
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);, ]/ C* r% B, p- R
; w& ~6 f  r+ w# S' ^& F
    // 功能限定配置(输出引脚触发方式设定)
* t+ J3 a# N& J- }    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
) g) z" Y6 `6 M& P8 b    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,- G7 _9 M: d) n0 C* ^
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,1 ]0 e. @( U4 O7 `9 m, i0 w! O9 E
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
$ Z3 P; V4 b# ^9 G. [7 ~
* x: h) a0 p7 {1 o( t* C    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
* e4 x8 v' \+ v) j* Y. G" F7 W6 B    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
$ K( o8 S. x: Y: i3 X+ P+ T  k. [7 Z. [
    // 禁用斩波子模块0 p! p1 S$ y- q  T2 P
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);! z! T! r: R. f

( i( ^0 @9 D) y- J& R    // 禁用错误控制事件
: K, A( [% @+ J    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);% J  z; S# C' ?; s9 r" t
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
7 s) k+ O7 ?  o' x) j( ]$ _4 h8 h# b
    // 事件触发配置
4 O/ Y  _2 }. r( }" g$ k    // 每三次事件发生产生中断+ z5 [1 K' h. O9 v/ D& Z
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);) `3 B, P3 ]4 ?6 k" `$ l( a
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
2 A/ f/ C, _/ W# t8 b8 A2 d    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
/ y  P0 k3 |* m: j& e8 j& W5 X    // 使能中断% I0 p7 L" D) p) y& J: {7 I5 e4 B
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
0 c$ n7 j$ y( M/ u6 z$ P: x3 t3 W6 d; l3 |1 T) ~
    // 禁用高精度子模块
; a' j2 b: O' J1 S) K3 w6 ]    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
1 L, x; ^! }5 E' M6 H0 n1 e! U- P# E$ [  F& z$ b; E
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);4 m" Q/ z6 \' h5 ?9 R! _/ t
}
. W8 T1 Q- D* R& k* {& c2 I4 `0 [1 d- t  R5 V% R0 N9 _" ^3 {
void ChopperWaveform(void)$ x" Y9 T6 X, B/ V8 a
{
! h- Y/ _# F6 c1 ~+ }: g    // 50% 占空比
! k6 M: O+ M+ f. w    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);- K" L. W* v: E
    // 4 分频
. n$ n6 e$ e. M+ O9 |* @    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
1 L6 \; z& T& n6 c' _6 [) u    // 单个脉冲宽度
8 t8 O4 z- d2 {# T: u3 L    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
- C2 y) M5 T+ o$ M# w6 h    // 使能斩波子模块
& W5 L, H* g  j; c    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
& Z% H2 }# Z& D  n# {  C' x, Z}
' o: i( s) D8 Z) i1 W- k
) d1 z# P5 f* B/****************************************************************************/
: {1 M: M& B3 G4 R4 z: i/ r/*                                                                          */3 T5 e, Z/ F. p6 e$ H" y
/*              PWM 中断初始化                                              */
+ L2 W2 R2 h$ I/ }  n5 X/*                                                                          */
0 v" u+ v3 Q' s" q& K/****************************************************************************/
' d2 G: I4 A9 u; d/ Avoid PWMInterruptInit(void)
& P) d% E/ D- b9 A" r( O- P1 S, g% m6 d{4 l" \* ~7 o# l- X- ]
        // 注册中断服务函数5 x4 M3 W  L: O0 s" K' @& c; ?
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
! B6 F+ r  X$ l8 k& M. e        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
+ R1 T* h+ x% G; _& b( f. }" w4 \# ?1 U$ W- O3 f5 d$ ]
        // 映射中断# w" \. `- a, Z: h7 ]. Q
        IntChannelSet(SYS_INT_EHRPWM1, 2);/ X6 i+ @# @8 w; p7 r) Z# I+ O
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);6 e; \# n6 ~( o/ @8 b
' m. k8 X: G3 d/ f; Q
        // 使能中断$ \, Z% E1 N! O" d2 S( }' j1 ?
        IntSystemEnable(SYS_INT_EHRPWM1);- B" a: F' ~) }
        IntSystemEnable(SYS_INT_EHRPWM1TZ);
8 J& ]# T/ ]. x' c}- ^' \7 G% v) _& x7 G
: f; s# ]' n* s! k% d4 R
/****************************************************************************/; @( Q3 o- ?+ ^
/*                                                                          */9 v3 t+ l5 J3 q" P) d, C
/*              ARM 中断初始化                                              */
/ H4 U& {, u# x, h, B% m5 S/*                                                                          */
) B: K- h6 ?  e/****************************************************************************/2 G, y( U$ n, b" Y& B
void InterruptInit(void)
$ n3 @+ ~7 D% R) c7 ]" ~# \{
3 M$ K- l* A* Z. i: q6 N- Z& N        // 初始化 ARM 中断控制器4 Y* d' |; a6 d" v0 _
        IntAINTCInit();. l9 H' ]5 w' C5 T. [4 j/ d
/ C' J" O& Q0 `5 P0 k; X" I
        // 使能 IRQ(CPSR)
+ b9 [( k4 a0 _, a5 _/ i& k        IntMasterIRQEnable();# `6 f& U, r3 U9 x5 \/ l0 c8 u9 G

" y$ `8 m, o& B! @6 A4 D        // 使能中断(AINTC GER)
, ?1 `4 l+ p( f% h7 f2 G7 Q3 J5 P        IntGlobalEnable();
0 _! O" R, q* ~4 W1 ^0 q/ y
- S  W% V2 j$ c0 f$ F6 q* J4 x        // 使能中断(AINTC HIER)" x! y9 j' g. C
        IntIRQEnable();
8 N4 [. M3 P. c7 ^3 D% Z9 m}
" p: F4 z* P, H( ~" K0 c  s6 J2 z) h+ a( y0 o" s  I# q
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
 楼主| 发表于 2018-10-30 17:03:18 | 显示全部楼层
/****************************************************************************/7 K+ Q! D5 C1 {5 q# @5 Y
/*                                                                          */
# B; _7 q/ `* ~: v2 A4 l/*              中断服务函数                                                */9 I  \6 k4 M- s0 {1 b4 ?% P+ v6 g
/*                                                                          */
# a4 I6 w6 U' _/ b2 l- S  _0 h/****************************************************************************/$ Q* N4 N( ^1 t& g( R9 M
void PWMEventIsr(void): r9 o$ A" {( b8 D2 ?8 @
{/ B+ X' |0 b% N$ R4 E
        IntSystemStatusClear(SYS_INT_EHRPWM1);
) O6 e. ~6 ~! L" ]' S
# O6 w3 y# y# e9 \6 w, a# t; _7 ^, k    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);: l/ H6 g3 d, O9 H
}6 u1 j" J* k  {: D5 q

/ D! N8 z2 N3 u# G# I* Gvoid PWMTZIsr(void)
" h, y4 [$ ^; ?- v0 O1 G6 L9 ^+ k0 n{
& P* O2 T. D5 J8 g7 ^4 E        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
' e: I$ k% [- D  t# z( Q
; N/ |6 _2 |: g- I( y8 S" l    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);& |, e) _& c2 _6 X4 M- E
}
1 @8 Z7 U3 y. s0 [2 {1 |% B
" e8 g( D5 c1 ]& U5 G/ d/****************************************************************************/- w: @' ^4 e( b
/*                                                                          */
; H/ x. X- m% S: u/ S( U/*              初始化捕获模块                                              */
" e, y) V- V: _3 `; R% p. W+ W/*                                                                          */8 q) w( _  w! [. M5 V- z
/****************************************************************************/
9 o2 |" A6 z1 ~! }- A2 F. Bvoid ECAPInit(void)* i" k2 F- T, N
{; A6 [/ \3 r3 z. H
        /*-----设置 ECCTL1-----*/# ]9 k9 ?7 e* o; d. W
        // 使能CAP寄存器装载
, ~8 h/ F" ]- I* @( a        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
9 s9 o  o* R$ b. }0 d1 {3 |3 o        // 设置预分频值.
1 p; c; k# @& n; n8 G        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);1 n, ^9 P/ N: W* a" ]4 Y
        // 上升沿触发捕获事件* `6 i5 e- O4 N# m2 `, [  ^
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);/ W4 o) y; d) N( i! ?0 |# V
        // 输入捕获后重新装载计数器值./ J7 F, a3 `( |8 [- j  l
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
) {; K4 ^5 X# l; B0 b% y* x3 k" x' ]2 {: G* z/ ]3 P
        /*-----设置 ECCTL2-----*/3 F& m& O5 C' c: _
        // 连续模式
- O+ S4 L# `  P+ _$ O' z        ECAPContinousModeConfig(SOC_ECAP_2_REGS);: k$ p8 t  ?% u, u# H* d
        // ECAP计数器TSCTR持续计数
) j" U; P  X9 d9 l        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
# }% l" w, l$ L, @$ E; X        // 禁用同步输出和同步输入- q5 O* h- X; E, y; Z
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
( I. J+ g$ P# u  T4 D; T7 D; l3 Q        // 配置 ECAP 2 为 CAPTURE 模式" ?4 I/ S! T0 ^) t( _" ~
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);! y5 p& H( o: p6 U% x" \

/ n& a, v. V" q$ D1 ?        // 使能中断
2 J4 \/ X9 W7 w' K: c//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
5 `1 N( K2 [8 g$ m}0 {* B1 [( x) B: F3 t1 v

/ ^2 N9 a. w4 {# Y; ?/****************************************************************************/8 k+ d  U( b0 X: o' C6 U  H% W
/*                                                                          */
& j0 _1 s9 U3 P" F' e/*              取得捕获结果                                                */
& [2 |/ m4 k  f, z2 B0 F& {/*                                                                          */
( Y, {& p# |0 W" {/****************************************************************************/7 j/ g" }: h9 |
unsigned int ECAPRead(void)
% W0 U" Z% W4 }3 R9 J$ F2 M{1 W7 C- Y& q- {
        unsigned int capvalue;: M  b8 R% E! g7 L& x1 O/ f
        unsigned long frequency;
) k8 `2 W  r0 C( p/ g2 _$ n
0 C' h9 T! k) [! J% g3 Y, Y        // Event1 中断标志
, z1 u% M8 Z6 y0 G  i2 s# g        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))* |3 T9 l8 R5 r& g% r
        {
$ t# u, d; j' a) f) e                // 取得捕获计数
+ e/ P5 v- X( p( y) A+ a4 Z                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
% w5 }( r7 H2 j: Q& Y8 i+ Q                capvalue = ECAPResult.cap1;  Q5 x, I" f; W, v- q

/ G$ U+ @6 p+ Q, a7 m! Y                // CAPTRUE 模块 228M 时钟主频( z4 J: W: ~4 `$ v7 u2 ~
                frequency  =  228000000/capvalue;
/ w  N6 n# o3 b4 ~' a% ?! I                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
) c0 X& F" T7 _9 H8 b. N
, [7 E4 y9 j) b3 M) ?                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
+ x6 @/ x9 ]# Q& G//                IntEventClear(SYS_INT_ECAP2);
/ \9 s7 h3 S$ x/ ^        }
" P8 g7 [% h* B        return frequency;8 m; C8 U/ u  W  v+ R
}
# D& e7 Q9 j' P% ]+ ~- k/ A
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
 楼主| 发表于 2018-10-30 17:58:06 | 显示全部楼层
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
发表于 2018-10-31 09:08:16 | 显示全部楼层
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。
% {) R8 k1 T' W5 Q7 O( j

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
 楼主| 发表于 2018-11-1 21:27:34 | 显示全部楼层
可以给我发一份吗
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
发表于 2018-11-2 08:51:16 | 显示全部楼层
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-29 23:21 , Processed in 0.047533 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表