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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7637|回复: 6
打印 上一主题 下一主题

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
跳转到指定楼层
楼主
发表于 2018-10-30 16:46:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
9 g6 W* A  M# n& v. u# K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/# @: O3 v9 Z  E1 H  [) H! j1 N3 h) T
/*                                                                          */
9 D1 R) E+ ^) U/*              宏定义                                                      */% t8 {; |3 h9 G! z4 r2 T  u- A
/*                                                                          */
3 M, @6 |% P; F2 x! ?5 l/****************************************************************************/
& Z  q0 G6 G4 o0 K& h// 软件断点
- S4 }9 H) h; U+ l, _9 V+ r& V#define SW_BREAKPOINT     asm(" SWBP 0 ");8 i3 t; `9 N* ]0 M1 c
2 \  k# a. e& n( G0 t
// 时钟分频, N( W. A" [0 N0 y" |- S  t: g
#define CLOCK_DIV_VAL     228
& t+ o2 h( G/ S! L+ ^
6 T3 a- L0 f6 P4 |& a/****************************************************************************/
7 z7 j  B- A7 X; X/*                                                                          */
7 F" k7 f; ^; R8 K* @5 y/*              全局变量                                                    */
- o) f' c' t( y3 T/*                                                                          *// S) L0 c! q& k5 _" N0 d! |# l
/****************************************************************************/- C0 K  g8 e: _" Y! g$ ?
ECAPCONTEXT ECAPResult;
& K* i. L8 z1 H- |' S! n
& W  A* n6 x2 C3 \/****************************************************************************/
, B6 D- ]0 m5 n: X5 O/*                                                                          */8 ]( d; M( u1 M
/*              函数声明                                                    */
/ _8 S( B$ d. [, w' h/*                                                                          */
' U% |3 l, q. [. ~1 x6 G) p+ ~/****************************************************************************/
4 d. L: M% r, \! `$ M# S// 外设使能配置
4 U" X6 q5 ?9 T3 G5 {4 P- Ovoid PSCInit(void);
5 H# q( r  r5 g; g2 ^2 `. n8 e9 a5 O1 U; ~  T) I& I* {0 J
// GPIO 管脚复用配置6 O8 E* D: A/ g; f" e: ^- J
void GPIOBankPinMuxSet();
$ R+ E" f& @' e# g' T  w" p& \! k; y7 R7 a' ~8 k
// 产生波形5 V4 V$ k9 c- E" S' s+ p' I
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
4 j. U1 @- q, ~( v6 lvoid ChopperWaveform(void);
( P2 M- t8 n. p. s% A
' p7 C7 `3 t/ W; P& {4 r. C4 y+ W// ECAP初始化和读函数
7 ^9 m; B% t! M8 ^$ N3 Ivoid ECAPInit(void);  |$ G- a9 g  t: `  S
unsigned int ECAPRead(void);3 a0 j: r, x; T7 t: V8 Y  Y9 ?! h/ p

4 m* _) r# z: y& v& X//ARM 中断初始化
# @6 x  ?% T/ R; v$ svoid InterruptInit(void);
; m2 ]/ M* V- A4 e" |$ e: U
% L: N7 H9 D# G1 \// PWM 中断初始化
* ~2 v  y! n8 a. Vvoid PWMInterruptInit(void);
* c  U2 l  i6 Q) i( S// 中断服务函数
9 J/ N, y- F1 x& E, C+ M9 ?# B. o1 v// PWM 事件  E# f: |7 G$ p9 ^
void PWMEventIsr(void);
# X. u6 X: D8 H* `0 F  X// PWM 错误控制事件
% U. f1 k) s' I6 Kvoid PWMTZIsr(void);3 e3 `5 r5 t+ ~; z& `
+ q1 J$ T) H/ s4 i: A5 U
/****************************************************************************/
* a3 R" n7 w! q, y% Q; b! z) U/*                                                                          */! ~& ~3 ~% W- F* P5 L/ M
/*              主函数                                                      */
( }' |' e: n& ]' g# I/*                                                                          */
. Y- a' j6 L+ m* I. U/****************************************************************************/3 p7 @; G$ |2 v# h$ ~
int main(void)/ e7 R5 j* v9 ~3 A" M
{
$ R4 I" G0 ^) H5 |        // 外设使能配置" G) w8 v- h/ Y8 V$ U4 y4 M
        PSCInit();6 n5 I% c2 M/ J3 Z+ G

! W' A( E8 }( K0 _7 a" G" s& P        // 初始化串口终端 使用串口2+ c3 j5 ]. w/ _6 o
        UARTStdioInit();' r* @/ j7 i# W2 O8 f) o4 J( v9 n
        ' Y( z( l( i( I8 m5 K
        // GPIO 管脚复用配置  _) d" H5 ~& k: Z  e5 [
        GPIOBankPinMuxSet();
: Q2 S# J- @4 r! q* B; v% N" R5 i0 y+ P8 b
        // ARM 中断初始化, r& p  [; j! H7 L" o) G
        InterruptInit();
% n8 ~4 i; S/ t  a* g) x4 W' \* E+ I7 N- n! y3 y
        // PWM 中断初始化; y+ z& {7 ^; J9 ^* |
        PWMInterruptInit();7 c( y! K) t3 h( b3 r
% f" c0 a. n$ k
        unsigned char i;! f- E" A) J2 z
        unsigned int j;
1 b3 u7 L2 W) y+ B9 K; ~* w) k7 ], q7 s3 ~0 M! r+ U
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);) j: C. S1 O8 N9 V) T: z3 s
        UARTPuts("------------------------------------------------------------\r\n", -1);
/ e, a9 p' r+ z1 l' M$ W        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);# Z/ _, F/ ~  u4 m
        // 产生波形# I, M% z$ T7 _$ }# S$ g6 l
        PWM1ABasic(25000,50);
& T+ H6 F  v% B  U; J8 t. f. u% C2 e: d$ B8 A) o8 E- c% r& w
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);1 A- q& x+ S; r  b2 q4 N
        UARTPuts("------------------------------------------------------------\r\n", -1);
: U9 U9 a7 n# B" R: X
+ t/ |. x- t. G9 R
; n1 j; O( x3 l: l/ H+ X" T
7 f0 s+ H5 n: u- r; O        UARTPuts("------------------------------------------------------------\r\n", -1);& \7 L6 Y/ M$ R: }
        UARTPuts("                    C6748 ECAP Test\r\n", -1);$ ~+ r1 }2 Z  F* R* e- U
        // ECAP 捕获初始化. k( Z, l* l3 t
        ECAPInit();" e3 d# q# e9 T9 t+ T
        UARTPuts("Initialize ECAP.......\r\n",-1);* F5 V- J* \$ a8 w2 a
        for(i=0;i<5;i++), s% w  y7 C2 F5 X- v( X1 _
        {
' l; l* K( n9 r9 O1 p' K                    for(j=0x00FFFFFF;j>0;j--);            // 延时
3 ?5 t  {1 ?1 Y                    ECAPRead();' g( O, ?, _: C6 R' ]+ S) r" x" K' m
        }) N1 k6 s* P7 z3 A
        UARTPuts("\r\n",-1);1 n" v0 E( i; {; s+ B/ H  o: `7 N
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
, d* o/ @/ k3 U2 C1 F1 o( z  G        UARTPuts("------------------------------------------------------------\r\n", -1);) ]. z$ H( ]  W! {: s5 U7 R
7 s- ?# Z8 t9 O8 q9 s7 S
        // 主循环
* D: e2 r1 _* C) z1 O( A" |6 m        for(;;)
* k1 w; x3 o8 @- w4 N        {; ]5 N  R4 t7 j. X, }

- ?  E+ V& ]7 c- Q8 E  S* n        }2 r5 @4 Z# h3 Y8 I$ I! [
}
1 {- M7 \5 J  N  \0 |& I- Q8 {+ l# A) ?5 _: K1 @
/****************************************************************************/
2 ~6 b3 \2 W7 @/ d3 P" ?4 ~5 ?/*                                                                          */
$ z  W; x& f- n$ ?% S( Q/*              PSC 初始化                                                  */, \8 M7 F8 |. K" R+ S1 l- h' ?
/*                                                                          */% v( |, K% I" G# ?
/****************************************************************************/! ^( q+ B" }; }) m, c1 Q
void PSCInit(void)$ z, i" P/ y3 h* {
{& Y! e( c9 n7 D  S+ d
        // 使能  EHRPWM 和 ECAP 模块4 V6 Z; E. N( E% @# Z2 H8 ^
        // 对相应外设模块的使能也可以在 BootLoader 中完成
# H7 b7 H. F* q! N% j) R' k    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);7 Z1 V9 P$ V" e6 A7 T
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);' d. }4 l! l- k) [" R
}
; m) [7 n2 q: S" t
! K( t/ ]( i0 w: i6 ]/****************************************************************************/# Y( j0 u- E) b% X) O! i
/*                                                                          */
3 M8 f4 M2 ?, T* q. j: U/*              GPIO 管脚复用配置                                           */: i7 [' z; ?5 |2 `
/*                                                                          */
6 X- [+ D' R7 `; Z( C1 m/****************************************************************************// F  q5 K4 ^& {/ F( h
void GPIOBankPinMuxSet(void)* n7 w1 V( ]4 O# b0 H( j5 w
{, x. C; n; W' c$ q, l
        EHRPWM1PinMuxSetup();" ^, _  J7 d1 T5 X+ K/ t

; n+ O0 ^4 E3 s        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)% }% Q# {- J  x
        // 作为捕获功能时管脚方向为输入& i, B) w/ n& f/ b1 w
        // 作为辅助脉宽调制时管脚方向为输出& p) ]. q0 K; I2 L* p
    // ECAP2 / APWM2+ N: D/ l9 f: k% @! ~+ f
        ECAPPinMuxSetup(2);& h' Y- }1 e' C( P
* r) q' X. f+ N$ H% G* r/ R
        // ECAP2 / APWM2方向设置为输入
8 T5 F, y" [' X" k1 S! e        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
1 y2 }8 V2 l) \" z, ^}
4 i+ N' X& y# `8 Q6 w# M0 h/ G7 B5 x+ |2 e
/****************************************************************************/
/ k+ t& x5 B) Q" R# b' l/*                                                                          */
( l, ^) D3 a4 X+ D8 v/ N; H/*              PWM 输出波形                                                */8 o7 K" H4 k) f; {
/*                                                                          */, C+ g& F- `, K
/****************************************************************************/
$ d/ o; ?% m5 g4 L& Xvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
5 |6 J& w$ E* Y  L7 m% f{
% T1 W9 ^3 \; S" }+ y+ q8 |    // 时间基准配置
# l2 ?% c0 a  q. k$ v    // 时钟配置
8 A0 d. B$ l0 V1 q: v; b    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
; `/ `9 I$ P5 F: D# K5 X5 H4 e: v8 P2 h7 o1 o3 u) O! i
    // 配置周期2 b) M) |2 {7 \4 F
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,3 m+ h$ k% I8 F. v& d
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
! H3 o1 t" f! a8 W3 h" f0 f( C" |6 i8 T! l
    // 禁用输入同步信号
9 Y) k; G, N7 h1 d1 y    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);+ g% j' |5 H/ r, p- {' ?
2 ]* x4 E# l( r4 y+ R: I, X4 L
    // 禁用输出同步信号! R0 C2 Y% v4 m2 Q: ?
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);7 k; R8 N2 {5 K

- {4 V  V  k2 M9 x  V, b    // 仿真(DEBUG)模式行为配置: B) @. C( b( |9 L: @* A: w
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
8 S, f! F( D' {) c5 {  l& J% n& D  Z" ~5 G6 a
    // 配置计数比较器子模块
; v! L. G5 C3 M% L: x; I" f+ q    // 加载比较器 A 值/ o0 D! K% d. G5 s" O) z
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
2 v7 b# v- M: T8 N5 \                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
/ I' {& s/ r5 e, P2 Z2 E: f/ g& ?; }  y1 Z$ N3 ^% Z% f( s( [
    // 加载比较器 B 值6 h/ g5 P& R  Q1 Q- r) A
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
% J& ]; v1 \3 V# F; a3 ^7 t                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);* J$ L3 p9 Y) R! G! Z8 }

4 W1 j: A7 T1 A3 `" N2 _4 p4 A" ~2 o    // 功能限定配置(输出引脚触发方式设定)
; \5 K+ _) h& |    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
8 z! a1 r3 f; i$ c    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
9 a! @' L& |/ Z2 v4 d: T  a2 K0 K7 {. q                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,' b/ r9 c6 I3 b% L" g  ^2 Y
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
3 o  O$ V# x6 S# y4 x
" G. _1 W" T$ x    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
2 M( m" G$ B  _1 X# j% L& E    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);( Z- U) Q, O& Z7 q
+ m- Z: }9 O7 Z8 t
    // 禁用斩波子模块
, W) U4 \6 R, m    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);! Q/ L& r" w. q% `1 r* X8 [
8 t# q5 o- Q+ b
    // 禁用错误控制事件& e. @0 \" n; u. x3 O
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 K4 o( y5 p: m# h1 M
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);. D( k& L6 b$ D4 ~; T$ J* b% M1 o4 M

' d) }% s+ S5 c! t( c% b; x4 u    // 事件触发配置* F& F5 ~3 J' ]9 H! ]
    // 每三次事件发生产生中断% x* `1 G& l7 d$ e5 h
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
8 ?* D; P0 T/ }$ v9 h2 ?    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
) @+ Y  j# l0 G# H2 E    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);# p9 f6 D! j  S4 L4 G
    // 使能中断
! e3 M$ Z8 o1 ?    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
& R/ j$ f5 h0 B, O$ o1 l3 R( w7 H
    // 禁用高精度子模块$ s) B/ {- q/ @( ]1 l0 b% c
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);) V4 f5 Z/ k$ Y
, K( b0 Z. z, ?+ N
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
; ?- U8 [" l" q0 b: O/ I}$ L5 ^$ ]/ h( Y! u" a" L

: G+ M! B8 Q5 P6 K; K& Svoid ChopperWaveform(void)
( V# {4 E! p* t- j{
1 O9 k! Y1 I- y/ [$ Z    // 50% 占空比
& M  i* x" L) b5 r/ }    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);+ s& j; |5 C2 m/ o5 ^) u
    // 4 分频4 M3 {4 X. s$ W
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
& R$ O" ], x1 ^" X( b    // 单个脉冲宽度- X! ^& k1 c/ x
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
2 @6 M0 O' s, T; I    // 使能斩波子模块% ~. |, {; `- r+ n, c- [
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
7 z2 u; R5 m2 }, z& R3 C8 L' S}
3 `( {% g# x0 H5 V2 f0 p  ]
4 m5 e, |7 E9 Y7 p2 V: t/****************************************************************************/# u) G: ~( r. q2 J
/*                                                                          */4 a. V" P) x9 W! f
/*              PWM 中断初始化                                              */
: E3 A' C8 t1 p( L! L# k( D" D/*                                                                          */: w! i2 z1 G" _4 g" p  J
/****************************************************************************/' i2 s2 Y/ ?. h7 z: Y% `4 j* a
void PWMInterruptInit(void)
8 Q) g0 N3 t- C. ~# V/ S{
, ~  S1 x6 p$ T9 T  [        // 注册中断服务函数
7 i- k5 A: b7 G0 a        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
9 ~3 g0 Z& ^8 c) H/ x: L, Z4 |0 i        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
9 ~& A) g; \) N& d0 ^6 d! |0 A; y4 b2 `7 e4 V
        // 映射中断: E2 p5 |% E- a( q& }
        IntChannelSet(SYS_INT_EHRPWM1, 2);: J* y$ V9 V) l- |& u; c
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);7 g  n8 l/ X  v( c1 R* |
0 `0 d- z( y0 I( ^& u1 K
        // 使能中断
/ f/ [0 |0 V# J% b! x        IntSystemEnable(SYS_INT_EHRPWM1);
& d8 L8 H/ G, R! D2 a4 u2 W        IntSystemEnable(SYS_INT_EHRPWM1TZ);
1 q: }$ X! t. s, v) M7 t}
& D+ A  z4 {+ L1 K8 M* a" \6 a: w
; `7 k+ K; G# B" z5 o' M/ R/****************************************************************************/$ P# u) {) e5 z/ }8 f4 n
/*                                                                          */
( w" J, h% O( A$ K" }& Q/*              ARM 中断初始化                                              */- `) e' m4 |2 f
/*                                                                          */
9 [4 i+ d, a. ]' n" c; ]# G/****************************************************************************/
9 ?1 j$ n( ?; f0 G* Uvoid InterruptInit(void)
' `4 R+ X7 h! k* |# {' k* F{) ~2 N, w! |! q9 H7 `, x$ T1 M- P7 z
        // 初始化 ARM 中断控制器- @2 o" h: f; e' l/ n% M
        IntAINTCInit();
7 L1 N; g& n; o, B+ i, a* f$ g! `( C$ i) M5 I
        // 使能 IRQ(CPSR)! U8 B; J& Z7 c' j7 i8 r
        IntMasterIRQEnable();7 v5 Z& t1 _, ~2 K, s! B
9 N1 ]9 `8 C* D' n' `
        // 使能中断(AINTC GER)
8 j/ K$ }- d+ b! a        IntGlobalEnable();6 F3 @7 v2 Q( ?& r% J% B
6 m# h! ?( n: n, m. i( h! ^- p
        // 使能中断(AINTC HIER)
) [6 J6 _# O5 D( m; _8 ^& }( [9 A        IntIRQEnable();
( E0 O0 g( `% y5 I: M}
" X0 [% j5 P) l; `7 t
6 Q) @; h  p- J8 i' `- u; j7 s) V
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
5 i% U! z  n$ c/*                                                                          */
  x# Z; X& k! W( t! i. W! V5 P/*              中断服务函数                                                */! g) ^1 I* b3 S! I8 N
/*                                                                          */6 n; ^7 y  q. h) N: j$ D- f
/****************************************************************************/
, o4 y- [$ o- Ivoid PWMEventIsr(void)1 |, K7 C8 @: n+ G5 x7 d, ~
{" U+ Y( |' B, N! D+ R9 h3 m
        IntSystemStatusClear(SYS_INT_EHRPWM1);& E1 Q+ m+ q/ k, H1 Q5 c

# g; V/ e( R( K. ^+ c8 k7 R    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
0 ]* P: ~6 y3 g}
5 R2 f3 @, R) n" }' p1 j; l' o/ q: E: D# H+ b- [0 v- j
void PWMTZIsr(void): q( |% S7 j+ O9 A. [7 f
{
' w! k; B& C  P! t. |! _5 T        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
+ H. D+ h3 h4 h" n& R  a5 v, a
. v$ ?7 F6 k; j7 V4 V    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);, z9 V7 w9 v7 ]. _
}" m  g$ X- o, E6 q- {( j
; o, I4 L( J! q* u
/****************************************************************************// G6 O$ s9 H3 s1 k" }2 ?) H
/*                                                                          */
/ u% R2 f2 w  R& }3 H0 y! V1 c" z/*              初始化捕获模块                                              */
4 @1 U  w0 I2 U$ n/*                                                                          */) X; t# ~$ K- C- H; B3 n) B
/****************************************************************************/
9 _/ H- O$ p. E& j' Z* bvoid ECAPInit(void)
% L- Z' M# w' g" K; h{2 `2 U3 D. B, d$ O' [- r  [
        /*-----设置 ECCTL1-----*/
" C; `: e: g. i+ w; x        // 使能CAP寄存器装载; k4 N. _& m) V& ~
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
0 }+ o# [, h9 G# ?$ l        // 设置预分频值.' f8 B1 }! y( f4 \
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
' }0 {: _3 Z) @: b        // 上升沿触发捕获事件, x* K+ \3 T& T( M
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
, r$ s+ |' M3 c% X" X, f        // 输入捕获后重新装载计数器值./ z; k( D! S# C7 H1 S1 i
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
& j9 J. S5 r# y6 T1 E: ^, s. K! u  q' I; N; \
        /*-----设置 ECCTL2-----*/
2 U% Z! p! r0 E: D        // 连续模式7 g7 O5 _4 a% |1 o/ z, b; n7 K. \
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
" Z" [$ q( `0 R' G/ I8 O% h        // ECAP计数器TSCTR持续计数
  \3 y( F' e+ F! S        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
& w4 @6 w  l# [6 c        // 禁用同步输出和同步输入
7 R$ f  K* I/ }5 B        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
  U1 \( x/ |& x        // 配置 ECAP 2 为 CAPTURE 模式. b2 M9 ?$ Z9 Q/ [0 F, r5 d. x
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
  o1 T, o  _4 ^& n# b% X/ K: C8 ~3 G) Q" J, |1 q
        // 使能中断
; m8 R) \( A9 B& G2 t0 a//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);! p+ g; D* V! h, P9 t; a
}' V5 x; r' p! y* V8 c9 }
8 t  s( e: n7 R9 {
/****************************************************************************/+ n: q  m( z3 E" p
/*                                                                          */, q+ T6 S- X& B
/*              取得捕获结果                                                */' z1 E5 Y5 a5 w& u" n3 h+ }( s; u
/*                                                                          */
. @& m" n9 u% Q! ^& c/****************************************************************************/$ W2 T1 i: [0 C1 D5 [" l: F
unsigned int ECAPRead(void)
3 T4 y2 \- Q0 X) G& s; o{
; z  }& i- F4 _- A: V6 G$ i$ q        unsigned int capvalue;
& d5 P- x/ e+ k1 Y4 r        unsigned long frequency;
( r0 W+ e' b  m; F# j
+ P) N9 j$ K) |        // Event1 中断标志
3 d! a0 E2 K6 \. ?5 z6 j0 _$ N        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))+ z# y1 i" i2 w: k+ o! m5 J( F
        {
3 C. Y* m: o5 f4 @& W9 \+ K( s                // 取得捕获计数
9 o3 L3 y; i0 ^/ R; t1 p8 X                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);0 m5 @2 \- s( P4 N: g
                capvalue = ECAPResult.cap1;
; @% {9 p" v# \% G. m+ L* v; O/ {8 a
                // CAPTRUE 模块 228M 时钟主频
& n( a7 Y* o: s& k8 w                frequency  =  228000000/capvalue;
/ j6 d" t/ O; ]4 T+ m( _8 M                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
' W& c" I3 D/ }, k! T/ S4 E- V! P; h5 D0 a) \
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);* R0 B7 ~0 J7 h) m# C6 V5 P; s& P% E
//                IntEventClear(SYS_INT_ECAP2);3 b' R6 m+ E+ Z; |, b8 _1 [
        }$ j7 o2 S# `- E  I9 n
        return frequency;% t: C; E# V: A, P' [
}
$ G* Q; J5 _. O* ~' U. |
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
地板
 楼主| 发表于 2018-10-30 17:58:06 | 只看该作者
请问一下有ECAP_APWM波产生PWM波
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。5 I, q2 S) @! I4 t" d; ~. r

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
6#
 楼主| 发表于 2018-11-1 21:27:34 | 只看该作者
可以给我发一份吗
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
7#
发表于 2018-11-2 08:51:16 | 只看该作者
如需获取相关资料,请发送您的客户信息到我们的技术支持邮箱:support@tronlong.com,我们会给您提供相关的网盘链接。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-22 05:45 , Processed in 0.046086 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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