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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
( e* M% Z! ^- [0 t/ s6 Q/*                                                                          *// _4 E( B, F, u1 f+ u
/*              宏定义                                                      */
. q/ [# l, A: A9 @/ R# l/*                                                                          */
8 `& |8 A' E2 b' `- _3 @/****************************************************************************/7 q: T( L. V3 e+ p( L- I0 `2 P
// 软件断点- |. z/ O, ]$ P* X8 _' u! l* t
#define SW_BREAKPOINT     asm(" SWBP 0 ");
: {" V9 s; x" m" y) p
# D0 D* s2 Y' Z$ L; B$ a! b// 时钟分频+ U% v. h+ E! @( m/ U
#define CLOCK_DIV_VAL     228
( ^: w0 z6 u) r4 u" [# B; q+ x
* [% _2 @9 f9 ?& W  V/ `/****************************************************************************/
9 F/ n2 A! m9 ?' K4 N) \, ~/*                                                                          */& ~' l$ b4 y4 U6 k4 {. t' M: i
/*              全局变量                                                    */
8 s. P3 j; S3 k. E) t/*                                                                          */
& T4 Q, l/ o" |5 F4 p/****************************************************************************/3 V- [& L8 _) W) n" P3 m1 L: Z% q( F. G
ECAPCONTEXT ECAPResult;
7 i& g3 n: g2 |* _, m& v
1 ^% N  ]8 o: l1 N0 O+ m4 j/****************************************************************************/& j* o6 b3 t3 |! z
/*                                                                          */
6 }- X9 b2 |" ?9 X/*              函数声明                                                    */  r/ v- s0 P/ q
/*                                                                          */* g. L3 W5 `) j
/****************************************************************************/" r* A0 C3 Q5 o0 n/ N, p9 }
// 外设使能配置5 C8 k( S. D. ^* E) R+ x$ t2 l
void PSCInit(void);
; [8 i% P' j  Z# l3 `$ B! [8 e$ Q6 E9 \. e* {% D2 y
// GPIO 管脚复用配置
$ I7 z- {: {6 p6 Z* ~5 Uvoid GPIOBankPinMuxSet();! K7 e. B. _- A) ~
' {8 t  d- t0 S; |
// 产生波形
: @- Z" Y0 \4 z+ w5 C: `1 Evoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
1 e( c/ B: x# ], g* c, ]void ChopperWaveform(void);
& _5 n8 B8 H0 W: q) z& K. ~9 ~9 w
1 M0 s2 h' a) A+ L6 Y% k// ECAP初始化和读函数# ]" m& L1 S) K
void ECAPInit(void);
4 W* i' l* F* c5 ~6 i4 G2 c# n% o) eunsigned int ECAPRead(void);
! v7 O' W. m: V
- q/ E% i( R" `0 x3 b. e+ Q+ A//ARM 中断初始化" o# D- @+ C4 x* ~6 q& A8 Y& |
void InterruptInit(void);
$ \3 ~! d- i) M0 @
6 s+ [2 b$ V# ]2 m  |+ g, O3 |// PWM 中断初始化% c6 @  o+ H2 A: W
void PWMInterruptInit(void);! l1 B; S/ \; j
// 中断服务函数
. k' A* Q/ u$ y7 a// PWM 事件4 t) G+ m( ^! D* N$ a5 r
void PWMEventIsr(void);
7 U5 {4 N9 c+ w- b- m// PWM 错误控制事件: u( h+ c) F9 \) D9 I
void PWMTZIsr(void);+ Q$ T  l: V3 c- R0 F( X& l
- X" N+ l* V( N0 j9 B2 {( Y; i) i
/****************************************************************************/  r1 X! H" C( j$ M$ @! ^$ F+ j
/*                                                                          */
9 q' t$ J) ^" C3 r  g# T/*              主函数                                                      */
" F8 V+ S) i! q. K/*                                                                          */
2 g' R: Z/ F1 ?% W; L1 l/****************************************************************************/* h) W* w6 F" v2 `- @; D7 V
int main(void)
" s- v  I  z$ a5 Z( I2 B0 T- b{' g% b/ k% L/ b. D5 A$ A8 X0 p1 o
        // 外设使能配置9 b) w7 Z9 z! s# v6 X. N
        PSCInit();- r$ y( g4 @5 e% z
. L, ^# G& {- I
        // 初始化串口终端 使用串口2, N, E, j! O1 I' a! S0 c8 w
        UARTStdioInit();
: l& u$ v# |1 {, u       
( s8 l4 M1 F4 L7 R7 S& b! \" b        // GPIO 管脚复用配置
4 o' _  K3 l+ n: r3 @7 W) @        GPIOBankPinMuxSet();' J9 Y: Y" s3 W4 O* j. D

) J5 q0 i, i, h- ^        // ARM 中断初始化
0 w' Q5 b' ^2 V4 b3 s& B        InterruptInit();8 V4 Q+ E2 P- M+ j5 J

8 Q5 X, l) N3 \  _        // PWM 中断初始化5 k: p- C; G( N/ I  U
        PWMInterruptInit();
& W3 w: j1 H3 l- P8 o" i! V7 C- _7 t1 _6 U' L
        unsigned char i;6 E/ E0 d3 G  B& K
        unsigned int j;
0 P3 [% I' e1 i' U/ y
! Z; F8 @5 [0 f; |/ j2 q        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);- s8 N* R& s) w
        UARTPuts("------------------------------------------------------------\r\n", -1);) o1 q0 Y  g& e  A
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
# S! b, ^6 G- `: g        // 产生波形
# Z2 y/ I0 Y1 {. n) @+ T- `# r        PWM1ABasic(25000,50);
' K* [$ j. |/ K' z5 \
4 b& u4 C) }' X6 i1 m9 R        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);$ A2 k3 a7 y1 E
        UARTPuts("------------------------------------------------------------\r\n", -1);0 J0 d5 t8 T6 H6 F( E! `% D6 f

) l6 V( F1 L/ ]3 |+ p1 g' B
) r6 D6 G" h, l& I0 ^) o2 y* ?9 u
        UARTPuts("------------------------------------------------------------\r\n", -1);- j  y& E4 @: w* W) x2 X5 ~
        UARTPuts("                    C6748 ECAP Test\r\n", -1);1 L' J8 P3 I. p. u; g
        // ECAP 捕获初始化
3 H( C! f) y* C* M        ECAPInit();7 Z; {1 r# D. X8 v: z" g
        UARTPuts("Initialize ECAP.......\r\n",-1);! g1 h% W7 d2 u% R5 d
        for(i=0;i<5;i++)
, ~, f% u- S+ }' j        {
' u7 B' S# m4 w3 e' g) e                    for(j=0x00FFFFFF;j>0;j--);            // 延时5 y, T5 X1 \8 }. F% c& |
                    ECAPRead();
# P# V/ g' i5 c7 G: L        }
+ N: ?+ I2 `* K4 E$ c7 d        UARTPuts("\r\n",-1);8 H3 @+ S0 `: v0 M5 t
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);& a  x9 j8 j. y& q3 p% e
        UARTPuts("------------------------------------------------------------\r\n", -1);7 h. H, g# d5 Z/ j7 N1 n, V" J1 a

% Q5 C5 o$ x1 q* |! s        // 主循环
6 [. v+ L& n) q9 _( m        for(;;)* _+ F' `7 G2 B% w, P
        {
% P4 s# U. U! l/ y8 A( K4 g' c8 _) h9 l6 W( M# ^
        }
' I# e8 r3 t0 M7 w/ f}# r* w' L% M& J
: y9 k0 r- U# l+ ?# Z* R" F$ T$ _
/****************************************************************************/, _- V; k/ a: u# }; }# O  U
/*                                                                          */& s$ j; |* G( T3 r, l5 P
/*              PSC 初始化                                                  */5 l4 e7 [4 [' W7 w, Y* M. M+ S
/*                                                                          */
5 W5 |( a8 x; D  V4 r/****************************************************************************/( I- ~$ ]" v* J" _, }" X. E: i( `
void PSCInit(void)
: K* ~5 T1 I, @# f9 q7 j5 y  ~4 N7 D{
6 Y* L1 g9 z" O$ k' O/ g/ y        // 使能  EHRPWM 和 ECAP 模块
7 Z: u* `5 C/ e$ h5 M! Q        // 对相应外设模块的使能也可以在 BootLoader 中完成
* _5 p; Z5 U/ M6 v; R    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);6 X, G$ U/ x( r- c( L1 J. [( h5 y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
, p8 R2 O) [- ?; n) b7 c- M2 [}
( X4 u; B0 d+ q# @
5 y" N# H% P. H  p/****************************************************************************/! w. n) z$ H' N* @4 c8 H* z3 U
/*                                                                          */
" O9 d& d$ x: o/ o  i( e: o/*              GPIO 管脚复用配置                                           */
, t" t) C* j* Q. k/*                                                                          */
/ S, u- P% b% n4 ~/****************************************************************************/; U& |1 a. P0 H; a1 w
void GPIOBankPinMuxSet(void); `# ]; m. s. z3 t# L% t
{
1 |- g0 D3 ]/ x4 N4 @        EHRPWM1PinMuxSetup();
4 m( y) `2 T  h( `* v" g/ U; h1 j) \; D. ]; H
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)# e7 u6 Y0 L# ~* z; @: i; V) R' Z: d
        // 作为捕获功能时管脚方向为输入! \' M, [6 S- g6 V
        // 作为辅助脉宽调制时管脚方向为输出
' e* Y3 v0 }1 b: _4 ?% W0 P    // ECAP2 / APWM2
4 B: K3 X. g9 \5 z0 F, U1 B        ECAPPinMuxSetup(2);
  K2 k$ Y# ]9 h1 x
3 @* r7 w, l" C9 ?7 q9 L4 R        // ECAP2 / APWM2方向设置为输入
. M# ~' n% N- I5 K( K        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]2 j8 d# c. \/ A$ `- n
}  s* b1 b" z' T5 I3 @. y
8 Q0 y7 ^7 @, E: _; n4 I. X
/****************************************************************************/
/ ]& |# J/ r" e5 `! m/*                                                                          */) r& }5 J1 X' p: `0 x
/*              PWM 输出波形                                                */% R3 Z1 Z, O2 H7 ~* O
/*                                                                          */
; Y; |1 ~4 F- f/ ~+ f: {" [/****************************************************************************/% q! {& r! }# F9 P0 |7 r
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
$ t5 P2 q) J) `) Z) `3 ?8 U{- p6 z3 u$ c) S3 V  t
    // 时间基准配置: f3 Z  S( |9 Q: S
    // 时钟配置8 o% _1 @4 U" I
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
9 t6 \3 \. S% @9 y# s) X
, H5 C1 I! ]3 y5 K8 T! I6 l+ p2 Q9 d. a    // 配置周期* N, D; ^5 u' e$ n! o" Z0 s4 H
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,1 ]1 M* M$ h+ j$ W
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);# L- f# a! O# M8 V2 u
, F) r  S4 Y. }% o$ e1 g7 V  j8 ]
    // 禁用输入同步信号( C8 a" {5 X& w. D  h" f
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);' U5 E1 w5 o1 d* T% g# X5 M
+ }9 K0 X& p3 k
    // 禁用输出同步信号
/ q1 {* F0 D+ ~6 t/ v/ \    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
5 h: w& ~$ `; Y& t2 i8 Q6 @9 H6 F6 u& r. q% z. A- i) p/ P/ t6 N! e6 E
    // 仿真(DEBUG)模式行为配置
, ^  F4 T* S( l) O    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);& f5 A* y, B6 @- ~, E

8 j/ t9 U" W/ c, T/ [    // 配置计数比较器子模块8 R( p( ^& w5 k. y* R
    // 加载比较器 A 值" z8 M  ^" `4 {. }. [$ ]4 n
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,2 ~  Y# M+ e. K" P; q- I+ X
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);" l4 r" T- [# ?4 b/ z' q* |8 K( Q7 x

7 y% ?' T  A3 I  z    // 加载比较器 B 值
0 P2 C+ {& ^- X8 W% Q    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,1 T* c  u" r/ L. i8 W/ B' f/ `
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);: F2 Y6 W3 _4 X
' F, O5 A" N1 J+ n5 g  j
    // 功能限定配置(输出引脚触发方式设定)
; S! N) I  Z1 {    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
9 ~2 i" e# y" m* x    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,0 D9 p- _% M: |; V; g
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
& O' U: C0 x, V  l                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);" ]- ^2 {: f5 t) `
  S) l+ ]' c) T4 Q
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块( q* m- ~: E5 A, k7 ]
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
0 Y+ s8 |" g' ]9 u4 w2 M3 n( z8 {2 `7 @2 _
    // 禁用斩波子模块
1 t6 p' ?! f( m+ R    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);9 X" P2 z$ N' W: V1 H  ]
! U. I8 b' z1 m6 i! z8 l
    // 禁用错误控制事件
* S! V# N" {9 T& J) |3 a    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 u" X5 D$ a5 |, D' r- P
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);. o9 p; x" L5 e1 R+ d% O. b

& x5 J. n' O$ s  u' X) b3 }- r1 [    // 事件触发配置) J4 k3 b: _# a$ b# ~# A! |3 S
    // 每三次事件发生产生中断1 ~/ Y2 R' P7 h
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
6 b1 Y6 z2 F9 o/ p    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件; }2 S0 Y' A/ }5 V6 @3 C' b2 ^
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
3 `4 N: y* ^" ^! ^    // 使能中断
, `1 z0 J# ?1 C/ M7 ^  }  l% P: @    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);/ n& ?" d7 ]0 a% Q5 [
6 z  w8 a$ _/ b( ^2 }
    // 禁用高精度子模块1 n$ J" k5 H9 a/ z
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);9 O- k7 ^( H$ }8 ~5 J+ g

+ s- [4 ~; r; z9 K9 @7 X% D3 }    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
3 [; w- \. k7 [6 B  \" j}' V1 L9 K, R/ o3 m- w, N
( U6 p' e+ k6 S8 d  Q( D; z
void ChopperWaveform(void). q/ l$ C- _1 a+ a
{$ h! \$ r: \  Q% `% U1 V& m: K1 z
    // 50% 占空比
8 e0 _! V5 m# L" H- r. J4 G    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);. `! l- {) B5 {5 L
    // 4 分频
. A; g# H1 h/ _0 v    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
# _% b( o; m3 w9 z" A# S: g7 W3 C2 D: X    // 单个脉冲宽度7 J7 q. o  `) _
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
3 C; Z! p  l- L    // 使能斩波子模块
. U( ?# `9 F+ E# z$ e7 H, ^+ H    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);2 ]* B) z5 h- _" |9 i! S
}
! p9 g* h, D! ^+ F" J# k+ \$ v  \- U9 e4 _' \. m: s
/****************************************************************************/+ G% v+ Y* j- c& g/ H- u" C
/*                                                                          */; t  h; _8 h: c+ \* T
/*              PWM 中断初始化                                              */
# @0 g" N; Q8 t( F$ D3 q/*                                                                          */' t5 m, T/ X0 o# r! E% v" b  L9 t
/****************************************************************************/
! p. N  N5 S( }. x5 g. Cvoid PWMInterruptInit(void)
( A* n7 y) h1 {{
$ s0 d, _1 h( j0 }        // 注册中断服务函数
6 I% q  R1 x6 P0 F        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
7 R6 Z9 A: M  S, r        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
) \1 y5 M. k4 D4 c9 {, A$ S
+ B6 a+ z/ C2 I- y! t' m  [        // 映射中断
0 N0 k+ P7 e! ]; p9 J: m0 c        IntChannelSet(SYS_INT_EHRPWM1, 2);
6 ]) q/ {2 x8 @# C" [        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);0 l% b  D1 ~! B# T

3 h2 `! C* O$ C% s7 w) a        // 使能中断! {, ]9 D( W& v7 d, ?
        IntSystemEnable(SYS_INT_EHRPWM1);
5 B* c9 s  {, V+ `7 I- t        IntSystemEnable(SYS_INT_EHRPWM1TZ);
& S; ~: `" r4 R9 o* R1 p}
  M: X/ M0 `& L
3 ?- e; C1 j& A+ k2 s8 c/****************************************************************************/  t4 o# Z) d) b/ H+ K2 e2 R
/*                                                                          */
+ R; O( V; r! v& A- n* N5 m/*              ARM 中断初始化                                              */
) ?. n* j3 H# P  v- b( h+ I. E% z/*                                                                          */
3 |! I0 o: {  j. ^7 r5 @/****************************************************************************/
% Y5 Q; Y8 b* L5 e5 Hvoid InterruptInit(void)6 }' R! N% O( l/ J$ C/ g
{$ h  ~9 |# X. p9 f+ L. h
        // 初始化 ARM 中断控制器+ W) m- z$ o% ?0 ]* r% ^
        IntAINTCInit();/ x- X% |5 {2 o, L# s

' h( x3 X# D* J9 \8 l7 z# S        // 使能 IRQ(CPSR)
6 c! D9 V; ~8 ^8 `: A        IntMasterIRQEnable();4 t+ p9 Y2 b1 ?( L% p7 B

+ `5 s/ B. ~; K, P0 J, V. R% k        // 使能中断(AINTC GER)
+ Q7 c5 x- N$ K/ g- Q5 ^: t6 q        IntGlobalEnable();
+ _7 ~- j! d- m- _5 P/ A' s3 r5 H/ R* b
        // 使能中断(AINTC HIER)
& t) b$ R# S3 l* q' J  {1 c( B        IntIRQEnable();
) j4 W6 E* T  e}
1 c; k4 L8 b# W( k9 i# p4 s: `5 v; y8 O( L' B0 J" p+ V' |; Y( R
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/3 d# `; r+ }( `0 u. I
/*                                                                          */( f) o. K1 @; G: D0 i
/*              中断服务函数                                                */
0 {" D! b7 R4 H! u" J+ T/*                                                                          */
1 v% d0 z  H+ @, U' i4 o/****************************************************************************/
" Z" m. @' e1 E3 S% Cvoid PWMEventIsr(void)" K2 a" `0 O' j$ g7 G: I0 h4 M
{0 z0 t8 ^) }3 B# j9 h! x
        IntSystemStatusClear(SYS_INT_EHRPWM1);1 B+ s, }9 p: t4 x' y" |- s* I

8 ]) N* c) W% v+ Y    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);# U  c! `0 R  j7 y0 a
}9 }" q6 I# a0 t5 i  j" u1 V
; j$ [. a3 Y# g5 \1 {
void PWMTZIsr(void)# J* }  I) [3 z6 H/ k3 g
{9 S+ I" U$ h8 i, [% Z9 z
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);+ _6 t4 [  e$ s, x' v' ?4 o* ?
/ @9 t0 z+ Y( U- O( O5 P/ t
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. M. T8 L: m" i7 v- i2 S8 X7 B}+ H" T& b7 _7 q; ~

/ D9 ]' E* q3 K7 C/****************************************************************************/. S% O  ^  }, P: ?
/*                                                                          */
) X6 _5 e" }& K3 B+ F  b/*              初始化捕获模块                                              */
! m$ ^6 w) E2 ^/*                                                                          */% F3 Z9 Z& r; }) H1 m) V* m
/****************************************************************************/
9 q, b  r# _$ kvoid ECAPInit(void)' j! W/ h! q; d+ ^# V
{; I  C8 M# t) n8 J! m
        /*-----设置 ECCTL1-----*/! G* z1 L+ I6 c  i: e% A
        // 使能CAP寄存器装载& t9 }" }- y+ x2 s8 T$ j
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
% L* h- E& R; b3 e7 h        // 设置预分频值.9 b' Y% h' U% E! x6 V' Z! s$ X# z
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
1 T5 t0 k7 T* L7 L# S/ f3 C        // 上升沿触发捕获事件
2 x9 w  [9 b  h) [: H$ m1 z        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);+ j1 d% r  s! d
        // 输入捕获后重新装载计数器值.
) v& B1 a/ q  I1 \! q$ y7 f% g! e        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);7 V1 T  u% i( A! e

& b  e8 w; p$ V2 q5 j$ I. f/ z        /*-----设置 ECCTL2-----*/. i* T# |  V; {/ A5 c* t3 [" H
        // 连续模式5 ?9 F2 f+ a" F  Y/ R+ `
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);) q8 t! d* J7 L: i: r$ V
        // ECAP计数器TSCTR持续计数% m" r3 k0 [! j8 N! |8 I
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);0 v2 [1 V4 m. _, [% L
        // 禁用同步输出和同步输入
9 K$ x% [4 A- [' _        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);) k3 m* I! g' o& g4 e
        // 配置 ECAP 2 为 CAPTURE 模式
. m  J4 k1 v$ t$ E8 k        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);/ O! J1 G; K5 f$ p& V

, Z. S& ^4 d3 Z  Q* D        // 使能中断: [$ t& _7 I3 e9 y9 o+ B8 s( X% O
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
1 j3 n2 z1 ~" F}
. m! w; u. z' j$ a1 o% {( U: t% _, N7 h5 x& }
/****************************************************************************/  f+ u# B, z* b4 }/ P
/*                                                                          */
' }) {% v. C+ z5 `: Z1 s/*              取得捕获结果                                                */
( e/ e  [) f6 A) x- e8 }# d6 a6 P$ F/*                                                                          */
' |7 V" |! `8 g/ S- V; Y/****************************************************************************/6 E# ^5 S, c( @7 e- S4 B
unsigned int ECAPRead(void)
+ L9 ~1 j, D5 ~  A; R$ u3 `% o{6 {. P0 f) J, k: C& c& c$ c6 `+ e
        unsigned int capvalue;" o# A8 T# R! A4 B5 y
        unsigned long frequency;
) X: v+ Q1 o: @' j% R
/ }6 N/ z$ C# ]) j; J        // Event1 中断标志
1 x/ W! _1 c# {- h2 g' Z+ e) N        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT)); U9 W% g8 I, R9 b7 W
        {* D# L' X) H2 j5 c: o! a1 n
                // 取得捕获计数
# @5 ^  I& k6 L% p: ?, Y                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);0 v5 |  R7 ^5 W! o* f! |
                capvalue = ECAPResult.cap1;6 j# I" u: e1 c. Q, d8 C6 m

5 G0 e8 C2 O$ `: A                // CAPTRUE 模块 228M 时钟主频
% \  b0 S* |+ F" u2 J                frequency  =  228000000/capvalue;+ H3 r6 I" A9 X* O
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
0 e4 [( }" k0 J- w( _% o0 h7 J7 {, J) o3 B/ K' v# ?4 v% E( S0 i
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);# L: o. n1 M- a
//                IntEventClear(SYS_INT_ECAP2);
0 K4 J4 r* [* o+ z, c3 n" m6 R        }
2 F6 t9 K9 M. w- Y; T        return frequency;" S) H+ V7 N- k/ r
}
% ^, O% E  l$ N+ C& ?0 O
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
! D/ s2 x, J8 Q4 e2 v9 [

本帖子中包含更多资源

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

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-17 20:01 , Processed in 0.042845 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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