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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4940|回复: 6

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
发表于 2018-10-30 16:46:13 | 显示全部楼层 |阅读模式
请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家
8 k3 N2 o/ m6 Y2 F# n
回复

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
 楼主| 发表于 2018-10-30 17:00:28 | 显示全部楼层
/****************************************************************************/
, G9 T5 ~6 l0 X( k9 Y, y/*                                                                          *// d. v7 q4 n6 ?8 N
/*              宏定义                                                      */
) ^0 H0 H/ `0 F' X$ C/*                                                                          */& Z& o7 M& I$ \6 e( ]' M
/****************************************************************************/7 C5 A* y# m1 A7 q( x! A
// 软件断点
0 P1 S" D" G7 @4 f#define SW_BREAKPOINT     asm(" SWBP 0 ");
% n3 m1 S1 w8 x& I
& ~" u# ?0 b0 T// 时钟分频
. a: q* a" G' o2 }& s* T#define CLOCK_DIV_VAL     228
( V. J. d7 {1 k: |& X0 x
/ x8 C3 C" k4 _0 k/****************************************************************************/& }2 b  r# o& Q. ~3 P/ A9 \; U
/*                                                                          */+ `. Q- S1 d7 D3 u3 z; p
/*              全局变量                                                    */
- Y+ e% ^/ Q( w: t* o/*                                                                          */
, ^% a3 Z% y& V6 l5 @) ~+ c/****************************************************************************/
' {: Y8 x7 n% l/ c6 l6 cECAPCONTEXT ECAPResult;* X( C7 A# X8 \, w  b

% u& f* a  B. l7 m5 n# c/****************************************************************************/
( g& I: |  _1 O$ U* `/*                                                                          */" V8 J# G7 o: I5 Q! R
/*              函数声明                                                    */) H' X+ d9 u+ V( r3 B* C
/*                                                                          */0 p( k  f4 u2 r0 E8 l+ I/ W
/****************************************************************************/
, D. v1 D) r8 m  w: c// 外设使能配置
4 k4 `; Y, Y8 L# ^! p, [2 s" rvoid PSCInit(void);" J+ n# G. r- ~9 E; @
" T' a% X5 s0 p" t2 A0 ~5 F
// GPIO 管脚复用配置( V7 G/ @0 r6 m
void GPIOBankPinMuxSet();/ [2 }! I0 [' t8 l. \) a3 Y

5 y: I9 _: O7 ~) R// 产生波形
3 [& R8 w' K+ O4 R; V& L% E! wvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);6 y. {; u4 ]: s$ k/ W
void ChopperWaveform(void);% C1 l, I  W* Z0 Z

7 \" i/ T; E1 A% s" Z( i// ECAP初始化和读函数  Q, `) A. N4 ?' o9 x4 y3 Y
void ECAPInit(void);
2 z% `) F1 ]" m9 y" \' Junsigned int ECAPRead(void);
$ e/ i# A1 y% K. w& X: z5 y0 S3 h# e* y: q" |5 s. L
//ARM 中断初始化0 S# ]- t: M8 ]! Z: n" U! |* k, U
void InterruptInit(void);0 x) e3 s: a$ r6 T8 F4 [4 G" ]

; l+ \0 o/ d/ W' R, T+ b/ m// PWM 中断初始化, O) u+ [& }! R2 G4 z0 ?
void PWMInterruptInit(void);: G9 ]7 w+ h& Z! E5 _7 \. f
// 中断服务函数
5 V$ A# T2 `5 M. e// PWM 事件
3 t( T  E: b3 b& [void PWMEventIsr(void);
5 y9 p+ w" W; _// PWM 错误控制事件
- o" R# ?0 ?( _% U  w! Q9 c: d8 z( t4 Y% ivoid PWMTZIsr(void);7 v3 F2 c1 s0 y, Q3 w4 X
' ]2 p7 O; ^  t1 c$ f1 C! ^
/****************************************************************************/: s" H4 C% I$ b0 r% w& {/ m
/*                                                                          */. y4 f% \9 S; @/ {+ w; q% V1 h
/*              主函数                                                      */, y( h; O& @' c* _
/*                                                                          */( j& J" E1 f/ W8 T7 x
/****************************************************************************/. _7 R" d( w" w  H# G) r
int main(void)$ ?( ?1 q4 @. ~
{- B8 f( P0 i! t3 s0 s
        // 外设使能配置( q2 o4 n  ], j  O
        PSCInit();4 |  v6 t* k9 I- r# c" R% `
/ p* `( I% `) S! X! n! l: R
        // 初始化串口终端 使用串口28 [. \' H$ I3 U+ h, j/ G
        UARTStdioInit();5 s& A7 J  K) F( T" i
       
; R2 v; y7 M0 m        // GPIO 管脚复用配置
6 B3 n* V8 {+ G6 N: Q* e7 D        GPIOBankPinMuxSet();! x0 f; S! F* Y1 {
3 q+ h+ M" B. G3 P3 K" T$ K  u
        // ARM 中断初始化
; o: h. a/ ?6 J& E        InterruptInit();
2 d; q, l: U5 S* [8 i+ e" F) Z: X  |( u8 }! J- f+ t
        // PWM 中断初始化
+ ^2 p8 k# D2 b; Y  C1 u4 s  p! x1 o: p        PWMInterruptInit();
# p0 k1 U) h9 j+ ~) r8 Z' d/ {
% q# ~- b5 g: g+ ~' `# N        unsigned char i;
8 J7 M& W9 d3 I' K9 f* c3 W        unsigned int j;; \  l( v+ i5 ~7 ~3 P/ I" e/ G  @
8 Y. `) s; @9 a
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
/ j2 H) ^0 G9 F3 n: b# V# [        UARTPuts("------------------------------------------------------------\r\n", -1);
+ F  y& d/ |: b/ k        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
! i$ ]* A2 o$ ]6 M) |2 a+ X        // 产生波形0 X3 j4 Q# y+ c$ H3 c
        PWM1ABasic(25000,50);9 D' }, M5 _4 n2 ]9 {& [

6 R, e4 H9 s) ]! x  ^" z        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);$ Y2 Z; r' [+ I* }2 {# A
        UARTPuts("------------------------------------------------------------\r\n", -1);
- K7 Z( }# Z3 e. ?; T: F( T+ `
3 T/ N* ?, x  k, [# C) s6 H$ a% J- d
) M6 r' _! ]0 W  I
1 q% e4 P9 T9 C# t5 R' ]        UARTPuts("------------------------------------------------------------\r\n", -1);
5 T8 u6 r2 s, x  l7 `) `0 y8 H        UARTPuts("                    C6748 ECAP Test\r\n", -1);
' Y8 @' {* n: q  R0 B" `% l: V        // ECAP 捕获初始化
! W) [) M6 b8 y1 E5 u( U( Q        ECAPInit();
& {4 u* k6 x8 z1 ]& V+ I* l        UARTPuts("Initialize ECAP.......\r\n",-1);, }) j6 }/ g& w" I" O: k
        for(i=0;i<5;i++)
) P, ]) Y2 `+ K2 `, A" C        {
' B+ T2 {( t" u& M/ I$ w# M                    for(j=0x00FFFFFF;j>0;j--);            // 延时
1 Z" w- T( Q% u" s: O% _8 |                    ECAPRead();$ q+ y+ J+ Q; q2 m6 O/ W3 D
        }
  D3 l% ]' n1 T; E+ B' J* G) F! b        UARTPuts("\r\n",-1);
' m8 T' \- @: m9 o1 q  y" ]        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);% q# w/ Q: ?1 S& u" b
        UARTPuts("------------------------------------------------------------\r\n", -1);
" q. g" I3 ?# [# V% ?
- h5 |6 G. r  Y+ G/ ?        // 主循环
, v' \% ~: ?  m3 I  L        for(;;)
( b: A. x, g' `) X' i- F- ]+ {  a        {
% O  w9 }4 C4 [3 B6 C7 z% d% l5 n9 m; v( o0 f( q
        }
1 V6 P7 O: P% q$ M) ]" P6 O}
7 R1 z5 f) \9 n! g& P7 }+ ~& T* h; p( g& J
/****************************************************************************/
  d1 o6 ]! Z9 u; o& ]. L& Y& @/*                                                                          */
. u3 D/ Q% h0 O% I4 U/*              PSC 初始化                                                  *// o" P, @$ }  d1 _* g
/*                                                                          */
2 o5 p/ A$ P* J' N( t/****************************************************************************/% M8 z+ H* ~( U4 L1 b1 h/ l: s. W
void PSCInit(void)) w' \3 d0 A/ p4 z; k0 }6 y
{0 A1 t; L. X- D+ H/ |. f: v% M
        // 使能  EHRPWM 和 ECAP 模块5 N/ U4 U; a2 ~5 `' Y6 u  J. s4 H
        // 对相应外设模块的使能也可以在 BootLoader 中完成: N$ z% G5 f' S3 _# ~2 y4 ?/ c# ~
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);  X$ u0 g- s& Y
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);& @  N% I8 F- g: Z9 d: P
}! h7 b* g* z3 `, Y- j1 ^, u5 H+ K

9 [9 ]. M# v8 M& J* H' `& u: F3 k/****************************************************************************/2 L7 j& D( ^: e+ @0 C# o5 d9 ^
/*                                                                          */* B. u) k8 c. \: z% O. E9 o
/*              GPIO 管脚复用配置                                           */2 T) `. p+ c5 l$ e2 X! H
/*                                                                          */
- j7 G  ^5 g0 Y: ?1 \0 W$ ?  I/****************************************************************************/
+ \+ O3 C! V2 A% d; Evoid GPIOBankPinMuxSet(void)
+ \# O. o: f: @! X9 z{
/ |0 y6 D; e( ?% G        EHRPWM1PinMuxSetup();
6 a0 H( P$ ?; W5 t" g' `- h2 X# m! }
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)! q6 i0 C& c7 t2 B( a" B; f
        // 作为捕获功能时管脚方向为输入
; E0 e4 w3 E& m        // 作为辅助脉宽调制时管脚方向为输出& z+ n+ Z  S. E# R# \
    // ECAP2 / APWM2
' J7 P1 |* m# x8 C2 E        ECAPPinMuxSetup(2);
; |8 E* f, v2 F+ K! o5 R# w) B! P3 C% U
        // ECAP2 / APWM2方向设置为输入
) X% F1 W) y8 Z7 [        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
! j$ [6 u$ [5 T: A: c& z}! \8 [: j! j6 k+ {' P: ]' H0 J

- g+ R( r' C, ?/****************************************************************************/7 {3 U) A( A- B5 W" E
/*                                                                          */, u. g% g$ p3 @; I6 `# u" K
/*              PWM 输出波形                                                */
1 P# h" K2 W" U& `/*                                                                          */9 Y, i/ w8 t; |' r* W+ J* B
/****************************************************************************/
9 k, q# U: z$ g7 J# Fvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
* U: h+ z! p# n8 `% U{. U- D/ |" A, O& C6 r# A
    // 时间基准配置; A3 `7 s1 }6 q2 F7 ^
    // 时钟配置0 u8 k5 S4 h# E1 t0 e* [
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
1 y+ [( H$ T: t5 B. D2 N8 x4 s& M5 ]( X# o" k8 K' W% Q% m
    // 配置周期
( Y3 L( G& A  j7 h% z    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,2 [# l7 o* e; _  ^# x3 p* [
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);* ~7 J# E3 }5 {& Q  v* i; d

( c" L; L- f8 q7 y: |    // 禁用输入同步信号
( }6 z. Q3 u- B9 u    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
% D/ J5 `' s7 Y, z2 m3 w
4 Q% g& S; y$ |    // 禁用输出同步信号" h0 ?5 t: h% f& P/ D9 V2 C7 H% K
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);8 l  i/ T; D6 |' r

2 P5 _" g+ w: ~    // 仿真(DEBUG)模式行为配置& u, n! u0 `! u
    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
. ]3 R# t8 A$ p+ g- E
/ K- _! m2 h$ D0 Z! \    // 配置计数比较器子模块; i: K3 T+ |6 Y4 r7 z
    // 加载比较器 A 值
' C9 S; J- b' O  v5 u& k& K# \& |    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
8 `; f, c" [) m3 `4 t1 e+ ?) Q                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
% F1 I& ^, U; f$ N
& N: J% Z  |$ P4 k9 V- c1 d( B    // 加载比较器 B 值
# I- c# s; j9 ]7 \" G$ t6 C8 \. J    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,4 H- f8 {+ U( I* g8 C5 j# n
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
' b- z. i- Q' j6 M5 z
+ ^' e( c) o" n; e& k8 d' \2 o    // 功能限定配置(输出引脚触发方式设定)
6 }: X& l3 D1 D9 B    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
* |) d6 e3 l9 F5 U& x, K! Y* @, \2 G    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
' w9 w# Y4 }9 Q# o                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,! ]  T1 J  Z: e/ N8 f0 H4 g
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
: C3 Z& @: o( f8 V
" q8 S4 p, N% a) D& Y    // 禁用(旁路,信号直接输出到斩波子模块)死区模块6 l: T& g* {$ n: {. ]0 L9 y
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
7 x$ K! [9 R3 Z- Y
; k5 L% P) f( _& i0 A9 f% V    // 禁用斩波子模块
8 `. A9 A( x% P2 C; o  ?5 o2 `+ [/ k5 N    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
1 N8 ]. F- Q6 t8 H1 V
+ Q- c  h, o: {) i' W" h    // 禁用错误控制事件0 n/ L/ q8 u# _  j6 Z( c* @) Z7 W
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
. q) V2 ]! [2 U: G6 e    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);2 M0 ?& q0 n6 Z/ X" d0 I/ w

% v8 `& ?( g( A    // 事件触发配置+ e4 Q" [- I& J0 b+ e+ G  R
    // 每三次事件发生产生中断
. ^$ i# ?6 B+ Z! k6 }( P: g    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
. _& @  O5 p% ?- k1 X7 X; c    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
7 Y0 L6 T/ Y, H    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);- v' C& y" n0 J1 z0 u
    // 使能中断
! W3 ?0 ~: s- H1 U    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
9 e$ g# f" d8 r: Y. z- |$ x8 B* S' y
- F  ]+ U# P0 @0 W4 Q: P    // 禁用高精度子模块
1 y  C( q8 H4 F+ g! q    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);# I2 U) b& n4 A: J# q

, h% M1 c" ?& r; U    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
" a  a- b1 Y1 g( n9 |4 C/ m}0 a0 l# j4 w- _0 Z4 [  D# Y' f! c
* `% w8 B* p. O+ x  j
void ChopperWaveform(void)
. K0 ^" V& v" ^1 T  t  G" D4 g{
3 R5 P' T+ l) L' z+ U    // 50% 占空比
& Q/ |& y' d5 r4 v    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
1 |% [' F: E3 S8 `1 A6 S" C    // 4 分频
& K* B# v  ~/ N  I    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);: K2 X) [' j7 e1 X% ~$ ~
    // 单个脉冲宽度
2 v$ {9 i' T- N4 i7 R+ e    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);( K8 j8 g- {& ]4 n
    // 使能斩波子模块
" M5 a5 x0 R$ S; B1 F0 L( o& p) F. d" N    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
1 c4 x7 o, r% O* ?  J}
1 [+ M7 E. L* A0 h( C) X7 Z' t9 B2 t
/****************************************************************************/
/ \/ a; I- R( u4 A6 @' b( [2 }0 F/*                                                                          *// s" j) W- ~5 d7 o# P, @. q
/*              PWM 中断初始化                                              */
, n! e2 }- b. c, w  n/*                                                                          */3 L; r2 b- p% D3 @, J. O9 o
/****************************************************************************/; |" P' z& c+ |9 c& @! b
void PWMInterruptInit(void)
8 P! Q6 [- ?2 i0 o0 y" z+ F{
+ r' _9 O  ^) D% R2 [        // 注册中断服务函数2 v6 {; s! V" x) {6 j9 E
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
3 k+ T8 J& X+ L' U        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);  V+ l) r' _) ?% I. B
, {3 F2 [3 s$ U: B6 i; X
        // 映射中断! T" f. M* i: {$ b9 `
        IntChannelSet(SYS_INT_EHRPWM1, 2);
* b; v. u6 T# p/ A5 P: m  ^        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
6 r' l" q# @) M2 S- X1 I! i1 L( R4 s' i9 _
        // 使能中断* O4 h3 a: {. u9 Y5 q1 r8 ~; }0 b4 K( z
        IntSystemEnable(SYS_INT_EHRPWM1);
5 x3 Q* r0 ]: s# ]4 r# E* O, L        IntSystemEnable(SYS_INT_EHRPWM1TZ);) [0 Z% U; j" s5 y! }. J8 i, x
}* `' Y4 u, b  R) X3 A$ i( P; n4 B
: ?& [1 K& J/ q, m% X1 K
/****************************************************************************/% H& L: K$ ^- G$ W( A9 X" |
/*                                                                          */4 X' i& P! y' f  T6 P
/*              ARM 中断初始化                                              */
" x$ A+ m8 @& T  E, n3 Q6 X/*                                                                          */
6 ~) h# t8 Z) c- x  M$ K" u0 Q+ ]! L( S/****************************************************************************/& F7 w; G/ a. D0 \5 k$ I! s* I2 m  \
void InterruptInit(void)' }" Y' V( n  h0 Q% k. u. m* Y
{3 A- B. |* _( a! Q/ [! P$ R; {4 _
        // 初始化 ARM 中断控制器
7 a+ G' d$ K9 W        IntAINTCInit();
7 N: u/ U3 }) Z( _; I& b/ s. C6 f& e, w2 Z  A& y
        // 使能 IRQ(CPSR)2 p! {3 F3 k$ K- ]* n; K+ O4 W
        IntMasterIRQEnable();
. v0 }, w( o: q( H  I/ i
/ I% L+ U& _7 V9 Z! _6 ]        // 使能中断(AINTC GER)3 e$ S& W9 Y4 {6 Z- `1 V' a+ b" Z
        IntGlobalEnable();
/ h2 i/ n+ y; k* Y# n1 ]
2 n, a! }/ U( q# c        // 使能中断(AINTC HIER)
, }: D3 j* I8 m+ `        IntIRQEnable();" A) j4 V- [) U
}
, |2 z% `3 ^8 z- L; K% S1 K2 T  K/ a% [) J
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
 楼主| 发表于 2018-10-30 17:03:18 | 显示全部楼层
/****************************************************************************/" l. p* A/ N/ A2 x. e# a
/*                                                                          */7 Z6 g! x$ o, v7 t; V& C( _
/*              中断服务函数                                                */: g1 e; ]; S. ]9 W2 N
/*                                                                          */# o2 ~$ V$ v2 J: \* l6 I
/****************************************************************************/
0 T% N0 s) d9 d, X- C9 @+ evoid PWMEventIsr(void)
  Z" h! F2 ]( F" B{
) U6 L4 T! g1 n! n6 |        IntSystemStatusClear(SYS_INT_EHRPWM1);3 p! _% O4 ^8 M7 I! U% h# e
0 N. F" _7 G" L0 k( S. R1 j+ v) J* \
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
4 v, V! ^# K; Q* L* E}
# L% ?5 Y" a0 A# _1 W9 X9 Y
8 s) S' ~2 _* ovoid PWMTZIsr(void)
# Z- z3 E9 S; H7 f7 ~{! j& [% U3 c9 v0 w) f: b5 G" Z
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
. ]* I7 j; }+ m4 O0 x2 Q$ p1 z
/ G: y  w8 k* m0 i/ j' Y- q    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
0 P8 V+ L8 p1 s: }}1 Q1 U9 J" a. y

0 D& v6 C" ]( r/ e( N; b; B8 z/****************************************************************************/
2 N6 F( _& L' |( l( a/*                                                                          */
+ M5 s# f' q# L0 R# H/*              初始化捕获模块                                              */
$ K+ K+ A4 X5 r/*                                                                          */
5 O/ O0 {9 c6 C# ]- [0 }2 s0 g. A! Z/****************************************************************************/1 ]: r9 [  C7 e: Z
void ECAPInit(void)
, G4 B7 T% g2 }( s{
2 @' J. Q- x7 _0 }0 w1 b        /*-----设置 ECCTL1-----*/
( s5 C. O6 \) d        // 使能CAP寄存器装载* P7 D9 E2 W$ r- b! R, a
        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);7 u8 o9 |2 J/ w, y1 y$ }
        // 设置预分频值.
7 J. h, w1 O# x* u9 z7 r1 J5 s        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
6 C, j# K/ ^) f- S3 j4 a1 m        // 上升沿触发捕获事件
. N# k0 i) [" m9 e! o        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
# W7 F2 D0 Q& u( F8 J        // 输入捕获后重新装载计数器值.# F7 X- d7 y0 b# K
        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
5 n- |; X$ d$ d$ x4 p& ^, ^) Y- m6 T, N+ `
        /*-----设置 ECCTL2-----*/+ W2 R  g& C  N
        // 连续模式
  F# ]- p; t& k2 a        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
' r0 y  f8 M- |        // ECAP计数器TSCTR持续计数4 Q+ D% g8 b4 H& ~# l, z- |
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);* X9 j/ I) D- [& j. p' g" Y. I
        // 禁用同步输出和同步输入
' Q3 s' Z6 @7 n" m" S        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);+ s+ T. z+ s! D7 E- a0 N# @
        // 配置 ECAP 2 为 CAPTURE 模式
' }. Y0 L6 O4 n% K2 Z* k        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
4 q- ~1 b7 b9 f5 n6 B& u: n. R; _% m( k) e  v2 c$ `7 ]! }
        // 使能中断
/ ^2 ?" A$ G% X0 i) l7 ]; K//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);. C: h" i3 Q% ]
}1 d. y/ P* Q- r7 w5 a
& n, H  \7 _5 O
/****************************************************************************/
( `  f4 ]- H$ ~" ~5 ?3 D* P" I/*                                                                          */( f9 h* S# ?/ j; g7 A" S% }
/*              取得捕获结果                                                */0 e: c3 q% U) e5 e% \) I6 l% k
/*                                                                          */6 n* p/ x  K" x+ }( O2 g3 @  W
/****************************************************************************/: Q% V1 C# D8 {5 d. R
unsigned int ECAPRead(void)
7 i0 [: }* h0 O! @) ^{
, ~+ M1 }  M- u8 d# O0 @) O8 B% n        unsigned int capvalue;3 c9 A, \7 R  t( U1 y0 u: a7 d
        unsigned long frequency;6 _% y$ @7 ?7 J5 k& |/ O

' M) ^: e. @) a. J) J# Q- r) ?. W' @        // Event1 中断标志
0 H7 v5 n) v. {7 x8 g! L/ f9 o; b1 l        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
. u; C" o* t, Y( z" u3 n, m        {
7 z9 Y8 T/ n, I& k1 }                // 取得捕获计数4 z% z* Y6 l  ]; v2 M: e4 b
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
4 ?1 {1 c# C- g- r( G                capvalue = ECAPResult.cap1;
6 `6 k3 n7 n: P& h3 Z' ^' z# A- c/ m7 {/ d" f$ U; o3 `1 E
                // CAPTRUE 模块 228M 时钟主频, c: Y6 l4 N, j: }/ G
                frequency  =  228000000/capvalue;
* \2 `$ T0 q' T( I                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
3 ^, o0 k& c& c) e" Y7 ~7 w
, o" G0 l& m. D8 K- Q/ p+ [                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
; U; C/ C1 J6 j6 s//                IntEventClear(SYS_INT_ECAP2);
- _' n. K% Z$ ]        }
" U# a& S8 Y: J' }- G7 w& ]        return frequency;
5 t: u: ~/ W: U( H; n2 Q, Z}
; G: [2 B3 E% d! T4 I/ `+ |" s- V
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
$ c6 K' ]* u3 D/ N& @" K

本帖子中包含更多资源

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

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-28 23:46 , Processed in 0.048194 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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