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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
6 z3 {; j' ?; E( ?/*                                                                          */6 ]/ ]- y; P% L, t# C+ K" }
/*              宏定义                                                      */
8 w% e9 D* X5 e1 k$ i. {6 P/*                                                                          */
- E9 W) y7 L1 ^& J, J6 r7 j( I( |$ Z/****************************************************************************/
" g# S3 j2 s2 @! @// 软件断点
. Y: K& x  ^0 `; ~# @4 o3 _#define SW_BREAKPOINT     asm(" SWBP 0 ");. n8 i2 K& t+ E2 x$ o

/ N% B# M# l" p% n2 `6 W// 时钟分频4 u/ c; n! K. I4 _  Y
#define CLOCK_DIV_VAL     228
- }& X1 V: z" b/ X4 i
' x" V: z4 I, f5 H. b/ X/****************************************************************************/
+ _& Q5 w" n* ?- A/*                                                                          */
2 C! [, Y0 ^% r  p/*              全局变量                                                    */
( U* K, m7 D: ]9 o$ |, i. e/*                                                                          */6 g( o3 B3 h) m8 C
/****************************************************************************/
0 |* Q& z6 A; _* K. ]ECAPCONTEXT ECAPResult;: F4 z' G* \* {2 c) }) }2 z$ o+ A
; s# j  J( Y5 i1 W
/****************************************************************************/
3 I: v  m+ K* K  L! o: h% c/*                                                                          */
- s' p. l' K* b5 p, m' K2 j0 p/*              函数声明                                                    */
! O" t6 l. j- M9 j4 N2 t: g/*                                                                          */7 S) f! m$ b3 ]2 b
/****************************************************************************/
. @% m' o$ N4 y% C8 {3 [6 C; A// 外设使能配置
! h7 ?8 R3 k: t3 `( ~+ X+ hvoid PSCInit(void);
& w0 ~1 S* }/ Z) _! z1 T! I( s8 {. p" l. [, s; [
// GPIO 管脚复用配置+ t) Q6 H; T' Q, K( ]$ A2 C
void GPIOBankPinMuxSet();7 X# h/ P9 z3 n4 ]$ I. Z+ g! k
+ B9 R- v! }& ^) e9 Y
// 产生波形
+ j! N0 g/ }7 x) r6 b. u& \void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);/ Q! b: g/ Z! _" |) X. P
void ChopperWaveform(void);
5 F: ^' E% \0 c4 g( h  J
% _. p8 H3 e% x; U$ N5 ?// ECAP初始化和读函数: R2 z! S! H7 L1 `! z$ T7 R
void ECAPInit(void);
$ p3 U, L! r. L* J- @1 h/ @unsigned int ECAPRead(void);% P1 ]) N* w  F; m' L3 U: E
1 ^$ Y5 ?) F6 U& S8 i
//ARM 中断初始化
6 n5 F8 [! q, m* G" rvoid InterruptInit(void);
' T) N. k! T# Q. K) N& [1 \$ H8 t- g
// PWM 中断初始化: a  A! q+ ?0 Q* w, l3 f5 K! l
void PWMInterruptInit(void);4 Q  @1 Z8 x, r3 e# E* }; @
// 中断服务函数; |/ T% \% L1 a1 w
// PWM 事件3 I% G. c* R; E
void PWMEventIsr(void);
& I( g+ r) j0 f$ G: q: l// PWM 错误控制事件
- |/ x! N7 @) f9 H3 q: Evoid PWMTZIsr(void);+ y5 R7 h/ a$ E0 O& q

. Z; A& y# c$ f) n! Y! z" g7 c/****************************************************************************/
) [! B# ?( [  V* n: ~/*                                                                          */
, Q% ~# Q- A8 P/*              主函数                                                      *// s1 l1 F/ }6 h) |2 Z4 ]0 E
/*                                                                          */- m" i3 t2 F4 `3 K6 z# v, I: n
/****************************************************************************/$ [9 J5 @' ?2 N+ O6 `8 ^
int main(void): O8 Y- M; G" @$ r1 ?/ L
{
! f+ D( p6 [. x3 w# [        // 外设使能配置
/ |( I: L/ N/ [4 T, q- P        PSCInit();
! D1 I. e( I0 w( K6 U9 r4 |! {( H0 B1 P! ?' C" U- `
        // 初始化串口终端 使用串口2
0 V0 s% w- f( P$ V- h        UARTStdioInit();# d. q- C( `4 ^1 R' H
        " y+ s) P$ E! n& p1 {1 f8 Q
        // GPIO 管脚复用配置  q% J1 M% Q& x6 f
        GPIOBankPinMuxSet();9 M/ ^4 d) \2 z+ X7 k: k
- D! }% y. k1 p; _8 n
        // ARM 中断初始化$ ]" a% P3 v, |% ~/ J9 N/ r( E
        InterruptInit();
- Q1 ?+ [- X+ ^$ M
- ?, x( N* b; v* G! m        // PWM 中断初始化: A0 x& y) D& c0 Y
        PWMInterruptInit();
9 J1 T! D) v# b! a  n! L/ ?( f  f: h2 `
        unsigned char i;
0 y: H2 z) p+ I8 ]# n# U        unsigned int j;5 I3 K% `4 E5 R& W6 t6 q# _8 p( `+ l
3 M! k. n: {1 M7 R0 F
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
2 H" J# c; s, F* ~/ b% N7 h        UARTPuts("------------------------------------------------------------\r\n", -1);- W5 u& [' ~% a0 C
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);+ q1 `1 j8 z. {3 ^1 G9 ^3 J
        // 产生波形
2 Q0 T# w- W% R/ b( D, M* K, e        PWM1ABasic(25000,50);
4 C. Y: {7 d6 `
; [/ z" H9 O) k( j# a1 p        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);; m, I; o" r3 W+ ~# x5 J
        UARTPuts("------------------------------------------------------------\r\n", -1);
0 T) p" d2 ^9 m( y" X
( ?- K) ]' F" d- K7 O: n
5 u/ g/ s4 G" j5 C( D% Z3 _" y: F9 D4 I( [
        UARTPuts("------------------------------------------------------------\r\n", -1);- v% B- k; d) _! N
        UARTPuts("                    C6748 ECAP Test\r\n", -1);# a- W! Q1 O9 I1 g/ {; t
        // ECAP 捕获初始化
$ d0 X! ]' q! B. m        ECAPInit();
. ~% p1 B* T1 P) ]7 A, L7 v        UARTPuts("Initialize ECAP.......\r\n",-1);. n3 ?3 t. N4 F5 ^
        for(i=0;i<5;i++)! B3 v/ Y. G& H6 P1 j" q
        {
6 k- F- p& {8 J8 p8 h$ }                    for(j=0x00FFFFFF;j>0;j--);            // 延时8 X4 F# }% b2 v$ Z3 _- A
                    ECAPRead();6 b- i# j. ~% F" I) I$ E
        }( k  ]5 d8 _& T1 _
        UARTPuts("\r\n",-1);* A! X' L& h, {. A0 {9 ~
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
' F: G8 }8 q8 s        UARTPuts("------------------------------------------------------------\r\n", -1);$ a& I. R4 c# \0 H4 V1 k: ]

( w$ e$ Y5 W. o9 o. [3 D& Z7 Z        // 主循环* F+ g! `, `! z1 D  K
        for(;;)
+ L9 `* [' {4 b$ e& D9 W        {
/ n7 @- ~4 T5 o4 }+ l# ^4 N8 M0 [! G4 ~; S8 u5 Q
        }
6 ~6 P- l8 Q* z0 D}0 }! K" X+ q: i2 o
& u. _& B- U6 _4 i4 v+ {
/****************************************************************************/
/ ?- i* F7 b# h6 {8 [" ^7 P9 l/*                                                                          */' m, M* [5 F- S0 ~: Y; c
/*              PSC 初始化                                                  */& {; M  h2 {0 J; i  F: D& E: u$ y, Z
/*                                                                          */
! T8 M6 o& Y/ K0 Z: P# y' G) T/****************************************************************************/
. h; N/ `- L5 ^6 Y2 Avoid PSCInit(void)& d1 \4 x, m1 o9 C5 X& d+ Y
{2 y! ]5 ^! ?- G' t, ~
        // 使能  EHRPWM 和 ECAP 模块; @) K( Q8 \' e0 H3 v1 `$ A& a7 |& F
        // 对相应外设模块的使能也可以在 BootLoader 中完成2 s9 x7 i6 U9 U5 w. R: Y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);0 k9 D5 G/ s3 O( {( ?0 g8 F
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);* O3 _3 t! a  `. X" `: q
}
% R" j% Q' B7 E8 z+ ^. B7 ~$ C) D% L4 \+ B- Y. L
/****************************************************************************/
/ ~( k7 L, O/ C  `4 V/*                                                                          */1 p  v( z2 I; J0 O
/*              GPIO 管脚复用配置                                           */* `3 N% T2 N; }: }0 B
/*                                                                          */
3 S) e# w. ?. a- L: a* j/****************************************************************************/
/ }' a5 h: y9 f9 a, t. Pvoid GPIOBankPinMuxSet(void)
6 i1 q! \: n% }. Y% V{
( t) Q+ u1 ~/ Z3 H# P1 g        EHRPWM1PinMuxSetup();) d2 q9 e# I+ F9 s
# z- w: g3 A1 y2 p: b
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
% i/ A% Q9 I2 c        // 作为捕获功能时管脚方向为输入
( D/ O  F# I+ J8 Z% y% I$ v        // 作为辅助脉宽调制时管脚方向为输出
3 `; N2 _7 B" {, T- @    // ECAP2 / APWM2
9 ^5 H4 t/ u; a9 }* I# A        ECAPPinMuxSetup(2);
3 O2 b- {6 ]8 R6 F. O, {
: t  X0 P7 h! n( |$ L0 a        // ECAP2 / APWM2方向设置为输入, z! O  f% Y/ t: T' X* j* R
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]- Y2 \, {: ~4 G& X1 B
}* _  G$ q) N( I- U% C

0 R! x4 ^& `- P1 }5 p+ B4 b/****************************************************************************/
" G* c$ ~) M" G( g2 D$ T/*                                                                          */
7 D2 u8 _9 w4 S8 G) S0 F/*              PWM 输出波形                                                */
& I' J$ }$ L+ `, a6 k8 T/*                                                                          */
- k2 U, ?3 ]2 K3 x4 b/****************************************************************************/
6 Y4 i. w/ I- o7 F2 ivoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
; p6 R' m- G' u  j  j- F{
: r, _8 [6 d2 E% y, m# a- O    // 时间基准配置
' u" j, H5 |, \- g/ g/ x8 M1 n5 V. ]    // 时钟配置
% {# `+ A) e" K% b    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);" E/ H) c. H# @. b3 T5 M

* q" S! u; o0 s; H    // 配置周期
; H# n& P" R9 V1 q/ k    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,/ ]" ^1 D! `0 p9 G% x
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);! C: t. d% n, D7 A* p" G+ ^

: I# r' k, z. y    // 禁用输入同步信号2 A" b" Q% f6 r# T
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);5 ~  h( n" u& S9 z! c% P

4 ^1 E0 o; q1 p+ b* j/ ]4 w+ l    // 禁用输出同步信号) g) B1 E5 ~$ O9 q/ X1 h
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);1 l! i: L. }3 o2 _1 ], D

, V5 p+ r( g: }! c. r* K( x0 ^6 G    // 仿真(DEBUG)模式行为配置. {8 [# F! Z9 `  f+ Z  X% `
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
! Z7 s) G. m, J  b3 b3 g* K/ g  }  ?0 o( p7 x. U* E
    // 配置计数比较器子模块% t' ?1 D" N" ]! u. z8 p
    // 加载比较器 A 值
3 p! d" n% A" M' S: {    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
" f7 }4 ~& L* y9 ?, j1 ]" p9 n: u                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
% ^% c9 U; c& K! }( B  C
& T3 ~$ D, g4 n: q$ w$ f    // 加载比较器 B 值" U2 J+ y0 ?+ w' \6 }
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
7 h( z5 B7 A4 g# h, C; q7 z, V                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
7 q6 J& l$ t' ^( u6 f$ ~0 a4 T4 K) u& t1 f5 I8 Q, L
    // 功能限定配置(输出引脚触发方式设定)/ y( `  f8 i" Q" T
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出: J: P/ E$ `/ _8 f( E# `' H
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,$ q; q' b7 L  ?
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
- C: O% w: l. d" }. c                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);" T) |8 Z! F% K/ g

; R; M4 C/ g- e* ~: v    // 禁用(旁路,信号直接输出到斩波子模块)死区模块* q1 l4 p( h0 ?- I  B) K
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
2 n8 }8 t& U" P
. v4 n2 u+ H0 e7 E& _, B    // 禁用斩波子模块6 b5 |$ X8 X& W; `0 l  k
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
5 i+ _8 D" T5 v* N! W1 @" H2 S8 _  d8 W/ g+ ^/ H" |: u
    // 禁用错误控制事件
7 P; a  F9 o- ^3 B* J3 Z5 n+ @    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);1 ~  y6 @. j( W/ j$ N  X
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
' I8 M# ]4 ^, P. `2 D* F0 ]8 z; R4 z  i) C
    // 事件触发配置
  Y- Y5 \: C+ |* f    // 每三次事件发生产生中断4 A! _% \$ \5 I) F4 n% K
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
$ v4 R) q6 C4 I6 q    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
1 ~9 r6 o! p+ l+ \    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);7 I1 p% p9 |! N
    // 使能中断
0 G/ ?; R$ |4 B0 W    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
/ I, @- n+ A. r8 g9 b# J8 ~, j6 V/ N
    // 禁用高精度子模块5 A* U+ G# a) m: A
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
/ w7 A/ p7 |, @+ `: A5 z1 c, c' R* W; }: v6 J: s7 q7 x; X. G* }" |
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);5 y$ Y0 C7 T9 \5 Q% n5 m! G. r0 W+ x
}
6 i$ f' T* L1 v$ _5 P
" T5 g( ~( T$ D4 w" ?  yvoid ChopperWaveform(void)+ c3 _1 b1 {' z0 f: Q: |% A" \$ N
{
: y0 p' g! v3 i' p3 d" L    // 50% 占空比
* Q0 b! O. f/ W9 O) I7 p4 e    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);9 r2 O" z* a* W1 N1 g6 L
    // 4 分频% ]# f& Z1 ?. I  L
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);) w: L9 T) n' T
    // 单个脉冲宽度
! _. U3 U3 h2 `5 z  k  |9 q    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
! Q4 H; {0 ?( E6 w; g1 @7 m" e    // 使能斩波子模块8 [2 I8 B4 J9 Z
    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
+ `7 A. B( U5 b) V) e}0 X+ T. [; y1 W5 S& ~; w" t7 A
; n1 ^' ?7 H7 A) K+ |! a8 W
/****************************************************************************/. ?% y% y# _+ a2 ~8 l& f
/*                                                                          */
/ f) `6 q% K, F0 l# P) [/ n0 f/*              PWM 中断初始化                                              */7 C, g! f7 S+ L
/*                                                                          */+ c& z5 v2 J9 L5 z# e9 g1 u2 Y
/****************************************************************************/
: e; d, Z! e- q: C* {* s0 Ovoid PWMInterruptInit(void)1 Y* \; E1 P$ Q3 W1 z7 \7 t
{
+ J% u4 c' w( @4 Z0 K        // 注册中断服务函数
9 f2 w; n3 I" |) V% i: a- @+ y1 l        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
; K$ _" |7 G# M# B5 \        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);# I9 `! K% h& Y+ Z! D
4 ^4 O) G" m/ f3 v
        // 映射中断# W4 D1 ~4 O' O) e" E
        IntChannelSet(SYS_INT_EHRPWM1, 2);
0 e0 J: Q- h. B. j+ N( |$ c        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
5 n5 u. A, q# p4 ~  a( h0 V5 `5 P3 R' [4 z- O
        // 使能中断! l" [" D" d" k  [, Y0 c+ `
        IntSystemEnable(SYS_INT_EHRPWM1);- g4 X  C9 s  l* t& [
        IntSystemEnable(SYS_INT_EHRPWM1TZ);" t) H3 P. e9 W6 j2 V' s2 b7 Z: X
}3 r5 P5 L" d% e0 V/ j/ ^

/ e( G" U6 y7 A, c% h  W/****************************************************************************/
4 }. J# Z7 j& @- |5 y/*                                                                          */
% s( i6 x) Y2 Q8 g# p/*              ARM 中断初始化                                              */' q2 v! \) K. {$ `4 j# |
/*                                                                          */' T7 Y! i& _7 x* m+ F9 d
/****************************************************************************/
$ V) L  h" x7 F: W1 Tvoid InterruptInit(void)
4 n( x" m2 c8 E" V{% m  X* B7 Q7 I7 N6 {
        // 初始化 ARM 中断控制器
  R7 J! k* w- D" E+ b        IntAINTCInit();
& g) l$ F; _* K: h' H$ J6 B) W3 S
0 ]6 x; N6 w5 k. z! p        // 使能 IRQ(CPSR)6 `! o2 n3 m, D! n- q
        IntMasterIRQEnable();
* A: N: k4 Q/ g; t  B, p
! S6 {4 m! M& ~* `4 U        // 使能中断(AINTC GER)
" V. J$ q/ q8 \1 v1 t5 ^        IntGlobalEnable();
! V; F  d" {5 z! S9 v6 d: j6 P
; @$ S; X# m( A# k. A        // 使能中断(AINTC HIER)
9 w$ c6 H7 \3 T/ a# {  q# X( F4 r        IntIRQEnable();
. T/ U& A; W6 ]$ l' P$ m2 ^5 b& k1 A}6 ^; e3 N2 w; y3 P# @# \
/ N- S, B6 }1 `% f0 Q
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/- H, Z: H: e9 n6 Z; W  j; V6 I
/*                                                                          */5 h2 D  ^3 U: }# L# m
/*              中断服务函数                                                */' I( X' ~' u+ K3 G3 H: d: k
/*                                                                          */
5 G: k, X2 z& l0 `2 Q1 _/****************************************************************************/
( L" \7 q$ P( U3 V+ B/ [5 Mvoid PWMEventIsr(void)* E; B+ {$ d4 e8 y1 I# t- s" U
{- N) Y% s& ^) o9 D3 ?: q
        IntSystemStatusClear(SYS_INT_EHRPWM1);+ C1 F! f& \; F$ G
0 K/ @7 n3 I& `8 J7 v/ M9 y$ J$ `
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);: [; }9 V9 o& ]* L2 T9 Z: a9 |
}
: Z& J# G, m( j4 c/ h8 E$ I! q
1 F7 v, D, G# }  y. @# Z5 Z: T: Wvoid PWMTZIsr(void)( m/ \, m; F: `2 W3 v- a! l
{/ K  [5 B. o4 m% R
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
, K: l1 T" a5 Z/ w. g9 m4 ~: o9 O
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. h. b% P. t" d- G}
0 \3 H7 M. J2 D- m* K2 y% X* \4 \) f
/****************************************************************************/
- ?" i4 K. z3 q5 S, v/*                                                                          */
( d6 ^+ x. }. D6 U; F( i, W/*              初始化捕获模块                                              */4 M- o5 x( i% P$ S; V2 E; S
/*                                                                          */1 |8 o0 ~0 w8 }4 g% m1 Y+ R# K, a
/****************************************************************************/0 y2 d( O! |2 }+ f# o7 L% B1 _6 X0 a
void ECAPInit(void)$ b7 z  c, t+ x0 ?7 B- ~) v
{* J1 L1 t  X) Z" k' G0 F3 j2 c2 m9 z# y( t
        /*-----设置 ECCTL1-----*/) U4 K& P7 I) ]+ n/ g' \- Y+ }' X# x# _
        // 使能CAP寄存器装载) m0 D) S8 j% `) F) F
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
) L" k& [* _$ P6 r5 A/ q. n- u: T/ M        // 设置预分频值.. N' s  T! G7 v
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
  K! H# |9 D/ e- K/ O2 t% K        // 上升沿触发捕获事件
1 X/ `- Z4 y' h( k1 X! z        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);2 m1 _8 p4 F) V
        // 输入捕获后重新装载计数器值.
/ T3 {9 m6 r6 ~        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);3 w9 S8 @$ x" L1 B

- P; w9 ~! s- t+ J, t        /*-----设置 ECCTL2-----*/
: i# e1 i7 S# [0 f* f/ O        // 连续模式& s. Z# E- j9 m. v+ y1 E
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);) ~0 v* L2 c# p/ u( E
        // ECAP计数器TSCTR持续计数
4 s3 `1 F7 {$ G# `- {& F        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
9 K2 Z3 ~; q! X8 p1 b$ r        // 禁用同步输出和同步输入( q: |8 [3 w0 g5 h; L, z
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);) p/ ]6 g: w( y. L
        // 配置 ECAP 2 为 CAPTURE 模式
) ]1 a. G- f- J5 G6 b        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);2 h" C; o5 @! ~

) _. z# n5 l8 [% {# j- W        // 使能中断
; t) v  |( C7 }% O  L' A1 b" |//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);$ n* Q" l6 W" V! G
}
2 Y1 W3 W6 @' c; ]( o5 a  O0 a$ K, u/ K* D) G
/****************************************************************************/
9 d( ]/ ]% ~" ~/ H/*                                                                          */
# T2 I, t8 N. C4 a/*              取得捕获结果                                                *// w* O. t, [9 A! `9 W9 S2 J  w$ U
/*                                                                          */5 Q1 E/ p! n1 v
/****************************************************************************/9 R. p7 o- Y9 I8 W7 _. X( m
unsigned int ECAPRead(void)" ^. V3 h5 W9 _
{2 {' C5 F: z- I% ~
        unsigned int capvalue;
7 @( S( |/ `7 }$ A! H        unsigned long frequency;
! d6 O7 s, U, k3 m1 i5 e# l
0 {$ I% S  R; y$ H7 g6 H: e/ H        // Event1 中断标志
$ h1 @2 o& @* k5 `: {8 z" f        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))" r' z" k- N  ]' b
        {
1 r: V) l0 k8 }& u: i                // 取得捕获计数
" T2 q" {5 ~. a" o" V- f                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);, [6 U3 w1 o" A  u0 H
                capvalue = ECAPResult.cap1;
: x0 U! S) _) }& e* Z: ]( T/ Z9 B: c6 Y3 y. @$ O
                // CAPTRUE 模块 228M 时钟主频
8 O1 |8 H1 {( V. ^                frequency  =  228000000/capvalue;+ Q% f7 v* o, p9 ^7 N
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);. `' k" Z9 y0 z! L! I

  _/ G: `$ T4 l/ \                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
; N) w7 f- V& K- U//                IntEventClear(SYS_INT_ECAP2);& c7 G* d3 B# y- n
        }& p9 t6 f& O7 A3 W3 M& l
        return frequency;8 t" @* V6 g7 C' p6 z
}
# n* _( S8 N! [" Q; z
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
5#
发表于 2018-10-31 09:08:16 | 只看该作者
OMAPL138/TMS320C6748共有两个eHRPWM模块,可实现输出PWM波。我们有相关例程,请参考。% J; ~; }( ~4 t$ |- X! @

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 00:43 , Processed in 0.045725 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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