请问一下怎么产生PWM波 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/, K9 b, R; E9 [( M4 b8 w4 o
/*                                                                          */3 e' x' n% J+ T: R- x- t" Z
/*              宏定义                                                      */
1 d' z2 ~, Z7 U, Z+ S/*                                                                          */- L8 c" u1 w9 \' q' q% D8 r
/****************************************************************************/
7 b+ Z" |, f6 h; Z# `// 软件断点8 q/ g5 Y7 Y, p3 P2 r
#define SW_BREAKPOINT     asm(" SWBP 0 ");
  ]2 l7 `; Y$ z  V, C2 p" t# V5 r% E# |; A; U
// 时钟分频
; b; ]- Z+ L6 `6 ?0 F$ Q1 a4 v#define CLOCK_DIV_VAL     2285 E6 o* ]" E0 L& y( X* T% V* |

$ T+ g2 q2 k% o/****************************************************************************/
5 v3 W* X9 m( T: q) M7 e/*                                                                          */
  x& V- w' s- }0 O0 @9 s+ O/*              全局变量                                                    *// z5 A3 x, y; X4 f$ m7 g5 @  \. f9 z
/*                                                                          */
$ y! O. a9 k) ]& u4 @3 A/****************************************************************************/
+ C2 ^. b: M2 n; p2 D" y( DECAPCONTEXT ECAPResult;
5 B+ J& G- W2 o( P( ]# [/ ]7 s  X2 B0 ^
/****************************************************************************/9 v3 W0 l/ x! L, n7 X
/*                                                                          */2 [, W6 v# \, S( A: [
/*              函数声明                                                    */
# _2 y, J! B! f' s( |$ ]/*                                                                          */, t& \  m3 D2 X3 E0 l
/****************************************************************************/
1 L$ f9 q/ w0 X1 n: p// 外设使能配置
8 t; [% C) x. {" x! N5 hvoid PSCInit(void);8 p& Z0 y* |5 e$ Y( T+ O% n) i
! B7 b, ]2 f7 k5 [3 N7 O2 x2 l" }
// GPIO 管脚复用配置
( r7 R6 F0 _: [' e9 F! Pvoid GPIOBankPinMuxSet();% R. a- `! F  D3 i
" J6 m$ t) j4 Z4 z  W, S
// 产生波形
, I: y' p4 I& V7 y: d% e' V, e- }void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
8 W* M7 V! B& r% ivoid ChopperWaveform(void);
  f& a; {1 e$ z) s- n
+ S+ |& {0 D8 ~// ECAP初始化和读函数
2 G9 ?$ z2 G6 j; ?void ECAPInit(void);
0 Y& l$ Z1 V1 J5 Runsigned int ECAPRead(void);, d6 o( J  A+ j, r& {" \" D

9 K8 @/ {2 I& b3 Q8 R//ARM 中断初始化
1 I! @9 W  w5 N  p4 @void InterruptInit(void);7 m# I/ N4 j/ H+ H6 j& c
* x3 R8 L7 K* @8 ?) l: D" Y, \
// PWM 中断初始化, q8 S# H3 J. y
void PWMInterruptInit(void);
: N+ k. i4 U9 Z// 中断服务函数# {$ E1 g! _; Z2 S
// PWM 事件
( S3 t! T, Z0 l7 g' p/ m2 kvoid PWMEventIsr(void);
4 {- t- m. s) b) E* I// PWM 错误控制事件# U- |" ~* @1 P. q) {0 c0 g8 K
void PWMTZIsr(void);
9 p: }7 K0 L+ T2 W* ]6 C1 n7 Y
9 R$ z1 P4 v$ n+ i/****************************************************************************// @  O: G$ h) z3 G$ g3 R
/*                                                                          */
2 o* Q3 B5 n: v1 V4 X/*              主函数                                                      */
% e: I8 ~4 U9 ^/*                                                                          */
, L8 F. D0 E6 k# ?5 |/****************************************************************************/$ y* D2 X. {- S) f
int main(void)6 b7 g' O. z4 p
{( g" q- l; E! G+ N
        // 外设使能配置
2 }3 a6 g: g* F        PSCInit();
2 N1 y( \6 n, Z1 i% |1 l7 x- \; c. @+ v7 c7 j
        // 初始化串口终端 使用串口2
7 H& u" L- K2 u; q/ C        UARTStdioInit();3 M. ~) c$ \" o" N4 P2 I7 {5 Y& T
        5 c- P( |6 r+ K9 @" D9 L
        // GPIO 管脚复用配置
% }/ g$ }4 m5 Y# m        GPIOBankPinMuxSet();# H' Q& [* I& B8 e4 ?
& b; ~" B# U0 r" @! G  |
        // ARM 中断初始化% ~5 m5 p; u$ b
        InterruptInit();
; ?, f, z" Z( x2 v( i; j4 {, c
# t) r. X$ N  y  M, Y        // PWM 中断初始化# h6 \9 R$ U$ p2 v- j
        PWMInterruptInit();* E& \7 [% R; f; ?8 C6 r# W% z5 ]
' C7 X" u+ }/ N$ s" h, k
        unsigned char i;
5 S" U* \/ q* g1 B" h$ y        unsigned int j;
& H3 G, ^/ ^0 J0 l+ L) Z$ P$ ?7 f3 V3 _$ c+ {7 j; E
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
, C8 o. L$ r' O/ {- s$ ?+ J        UARTPuts("------------------------------------------------------------\r\n", -1);; Y- M' W/ f' e- _
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);, k4 O; D* k! P* l5 k5 @" L
        // 产生波形
/ b$ H* n  g1 Q& w        PWM1ABasic(25000,50);3 _4 ^, m! D$ b* }8 ]" W( M

5 y5 g/ P, h2 ^+ g7 y# k- M        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
9 K4 \1 S7 K' k. u3 R0 G( w        UARTPuts("------------------------------------------------------------\r\n", -1);
9 c/ t- n# k* y; u' m( |
. e* T2 y( e$ t$ m* x9 ^, j. j0 E3 p, a  {+ r3 J) |
2 C  o6 ?% t* B! B, {" e
        UARTPuts("------------------------------------------------------------\r\n", -1);
7 H- U$ t6 b+ ?: D5 w1 X; z        UARTPuts("                    C6748 ECAP Test\r\n", -1);# e: V9 ^( v7 f. H
        // ECAP 捕获初始化9 ^* e- @$ @& Z4 I' E
        ECAPInit();
2 b) \& I# X2 |( ^! K        UARTPuts("Initialize ECAP.......\r\n",-1);
# c) X' ~' W% r$ p; _  c* }3 E0 y6 v* \        for(i=0;i<5;i++). n# f+ d4 A/ b8 k; j6 ~
        {3 m6 j, j! f) x+ ~
                    for(j=0x00FFFFFF;j>0;j--);            // 延时$ _- a0 X; {2 e2 p2 p
                    ECAPRead();1 F! {1 y7 B* f9 ]& S+ r# B0 D* d
        }* H' `/ v+ M& s1 ?8 B0 d* a: r# L7 W
        UARTPuts("\r\n",-1);
! }% ]! w" V' n9 l0 v7 o        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
& L1 D6 u7 X- U) {/ ~6 O        UARTPuts("------------------------------------------------------------\r\n", -1);6 E/ D( r- y( u' U3 `/ r1 Q% a
* M  m! g' C5 d+ n6 w; I
        // 主循环
# b* P5 {% e6 t4 D. Y8 ^- A        for(;;)/ a# n  K  \- Y- V# P* B( F
        {
# }, L# F; [" S5 m4 n4 Y
1 L& |; s# X4 X* m, L        }
' B; S% `# j% Q7 v* _}
. L  y  Y! Y/ \( x3 M' A( y4 q9 d
/****************************************************************************/8 [+ J+ o8 Y/ _& ?2 u& l
/*                                                                          */5 C% h. F$ A% ]7 ]  }
/*              PSC 初始化                                                  */
1 ?0 Y) D8 R. a) C8 T% l/*                                                                          */
+ g' Z* l" n7 ^5 X7 {5 p/****************************************************************************/; y5 I* c) n% R9 q) }$ R
void PSCInit(void)
& q7 |9 L5 i7 \! m* x{
1 M  Y* k3 f& c1 \1 S' ]6 L3 F        // 使能  EHRPWM 和 ECAP 模块
: u- \. G/ L1 H" @' m& B9 G- h6 e        // 对相应外设模块的使能也可以在 BootLoader 中完成
/ m, {( q" S! e" t: H( }) G7 Z    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
1 ~% J( _0 J# o8 ^: E# Q  F    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
+ a2 V+ P3 r! d! E( N4 a% V$ }}: B2 `: ?: x) z6 ]* J

3 g7 Y( ?: R! K& j& D/****************************************************************************/5 P. u' \' S0 b2 ?
/*                                                                          */
) _' b# x5 j8 [6 h6 e/*              GPIO 管脚复用配置                                           */
. x; O: `) Z# ]1 P, Y/*                                                                          */1 B' X, T% U# j- u
/****************************************************************************/
5 s1 Q  A2 L4 P1 ^. y5 r' vvoid GPIOBankPinMuxSet(void)
0 c( N4 w$ C6 o. ]{! e0 y, ^4 Y% z" u: a
        EHRPWM1PinMuxSetup();2 E( M4 Y0 g# l

9 r. M' U, G3 O1 Q5 y        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)4 `2 j; q5 e' }$ ~2 |
        // 作为捕获功能时管脚方向为输入1 x6 ^, o5 x6 V# o7 k
        // 作为辅助脉宽调制时管脚方向为输出# o, A$ I0 o4 u3 F) D' X
    // ECAP2 / APWM2
, d" k+ i, q  R' s0 y- V! H5 _4 B7 F        ECAPPinMuxSetup(2);& \+ `* Z  m: T% a! H' U+ \
, D2 V# `& f, O3 m! O
        // ECAP2 / APWM2方向设置为输入) A) i/ j/ N" U2 V6 G& `
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]. J) w0 q! m; d9 k. f0 n
}
" W( l7 f. q) m
3 D2 P7 `$ Q' C( \5 [& n/ _/****************************************************************************/8 ]1 K+ q, h8 j. t- j9 Q) d/ @
/*                                                                          */
, Y- i+ K4 a( }: K; _6 Z/*              PWM 输出波形                                                */
' a& Q. I2 y% t/*                                                                          */) @( V  n+ T! p
/****************************************************************************/
: F2 e$ k( a8 R- Cvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
$ W; O3 f' @# _/ `2 u  z{
2 x$ |8 Z  y+ v    // 时间基准配置- w0 D3 ?) C, E  |9 A+ Q
    // 时钟配置
& S+ W+ j; I% a7 c. x    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
* R8 c; v3 ^: V
& Z- q, z0 f3 b4 \. m    // 配置周期- [5 ]4 R% @/ u& M/ R
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
% b8 Z, O& I+ _                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
0 g# Q6 ^7 B" s
9 B" S3 p, P% H- U+ O3 `% \, t6 f    // 禁用输入同步信号
0 W' M+ }# o& ^9 L    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
3 ^" [+ i1 J+ }4 m/ u
* K3 i2 P1 I( s6 g, G" n; u    // 禁用输出同步信号/ C+ o! r" U& Z- w5 n
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);1 r% o) |" b7 X& k

' l. v% \' @3 j! b% Z    // 仿真(DEBUG)模式行为配置
- g% t  X( b! N7 s. h5 @& x! v) e$ V    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
# W, M  W/ z+ f( H
' ]% ]" z( M2 Q" y8 V    // 配置计数比较器子模块
' l0 ?( S: o: l/ G; `2 l7 f$ m, @* V* m    // 加载比较器 A 值  {- K( m) S+ g5 W0 f: a) T3 r
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,, w/ F! |7 G8 f5 v, L
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
  z  q# e3 {) X9 h) J/ g
6 m: M2 {+ a' M    // 加载比较器 B 值6 S9 B: r; V' m. `- p9 X
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
, n0 i8 _- s% J/ [! U, B                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);2 i4 r' x# ~3 A9 [2 C! X; s
6 ]( Z& E6 I5 t
    // 功能限定配置(输出引脚触发方式设定)" j' S1 r- d5 _( L
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出8 w7 V, v- u5 ?$ q* V& n0 E
    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,! N( H/ m/ u9 T3 X- E$ Q( y
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
* [6 f  Y  N: J3 p                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
9 M4 ~# M+ u3 X# A
# O! Y9 ]# M- H! H, B& s    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
' w  B6 m" H# W$ W/ M7 e    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
0 e" ^) U. e1 x7 ^
- L1 \5 a6 @6 R7 D    // 禁用斩波子模块
+ u6 ?6 j; S' d/ U! o8 M    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);+ c9 w0 a7 O, Y+ J5 F6 o/ A' m
+ ^, e+ z8 F% }( A* i
    // 禁用错误控制事件
+ r5 B+ B+ S1 `3 X) j    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
4 D: q9 W* ~" h% T6 O0 F2 K    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);3 R9 ?/ V# G0 s0 Z- R

. ]; Q2 R! K4 G' \8 Y$ q% f# J  @    // 事件触发配置
' s* s" }0 R8 j% y, k3 {, G( o    // 每三次事件发生产生中断
1 \3 Q& @) N" V3 U    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
, O  ~' P& F8 L4 T5 `" n3 g    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件( p2 }, `8 l. {3 P: ~0 Z& r$ M
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);: d8 J$ z, S& u" v. x3 R
    // 使能中断
3 e2 s* u+ O6 ]5 l- e3 T    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
; \6 Z7 ?2 U* g, d7 U. A: ~) X+ P& `# d  t4 A% r5 }3 E$ K! @
    // 禁用高精度子模块
2 D5 R; I3 d6 E  f  u* ~    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
5 ~) d+ m$ {0 }5 J4 x
: u' b7 X4 G4 M9 r$ D    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);5 H* z9 Y6 T7 a8 A
}8 ?! x$ E" M7 ]2 h: I! D/ m8 l! L

9 d* o/ h6 \2 q% O# D* j" ^void ChopperWaveform(void)1 Y' q+ I  L- q0 d4 S
{
( r. v* ^! m$ R* k- P: s    // 50% 占空比
! v* n3 w& {4 v6 N; T0 Y+ ]4 I    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);$ x# z, U$ z+ u
    // 4 分频  U6 L' f- c$ Z2 \
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);0 f/ Q$ U  e9 A
    // 单个脉冲宽度( Q0 @  g/ Y0 j/ x, o
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
1 q7 s: Z+ t% o! k, m+ \! t    // 使能斩波子模块
8 x# l  S; ~2 Q" p7 j/ c9 N1 ]    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
+ I) r5 m- J& m6 w" D% m}4 }3 c( d$ [! A
% S( B  T: t  X$ s
/****************************************************************************/
6 ^' C3 G( S  U2 ~% {  ~, j! X( |$ o5 z/*                                                                          */
( l( z0 ]  Z# j& x7 S6 B/*              PWM 中断初始化                                              */
' a- v  u0 c5 y/*                                                                          */
. U/ _, ]# S1 @7 E2 I+ |/****************************************************************************/
# W; p( B4 w8 x: w- P; _0 Bvoid PWMInterruptInit(void)
. q& `  t: Z2 l9 ?3 [1 Q6 @{# w; L8 ?' p) N5 g6 Z# V
        // 注册中断服务函数% Q2 W1 N0 z3 g' Z
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
3 X5 V( [0 O1 h. [, j6 j/ [        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
; _' Y, s( F! r# D! G5 c
! b0 Q1 F2 y0 ?' `+ D3 Z" u        // 映射中断
1 d+ G% u" _$ j        IntChannelSet(SYS_INT_EHRPWM1, 2);
" w8 ~4 x% R( G: I" b, E- w1 e8 x        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
# X' }! H) V+ V  j) ]2 }2 f9 h6 Y
        // 使能中断
! [, K/ Z# u: A+ U: w; f& |  h        IntSystemEnable(SYS_INT_EHRPWM1);% O9 F3 O- L' l' P
        IntSystemEnable(SYS_INT_EHRPWM1TZ);! }  N5 n$ T( P- I
}
- F7 ?0 w; k( P5 X& g0 k# e. ^0 B. t- C4 N) v
/****************************************************************************/+ [# p' Z  X; r
/*                                                                          */8 A/ Q6 F7 ]% Z8 l
/*              ARM 中断初始化                                              */: I% D! P  J$ i; |- r6 W9 r
/*                                                                          */1 x& R5 \3 u1 C- U; G) u; q, s
/****************************************************************************/
1 s) A. S; z* v; R! evoid InterruptInit(void)! G+ p, h/ Y: X9 X' o3 e; z3 z
{* ^$ H, V+ y  \
        // 初始化 ARM 中断控制器7 F7 ~' D0 O/ Y0 [$ U* _
        IntAINTCInit();
5 m/ r' H# g% k& g) j) z6 f6 z
: }+ a6 ]( [* r9 J) W5 c; T        // 使能 IRQ(CPSR)
& R' }1 ^$ ^9 _  x( h0 h        IntMasterIRQEnable();
7 J' _9 x$ B$ m* O' G  {; A
, T! M0 v# L* s! _' L        // 使能中断(AINTC GER)
5 L7 v, W  B: y8 j8 D        IntGlobalEnable();
- D2 o. B6 I' W2 _+ w+ s" T1 g! j6 a  B5 V! B/ e" F
        // 使能中断(AINTC HIER)
4 V- B" ]4 H0 ]' S        IntIRQEnable();
5 F% ]" p7 J% q}
* t3 L/ E* B$ P; ~3 ?/ I* L0 ]7 d8 i6 \( t& L, y- k/ U. F
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
- g7 s: p- w! h5 d& R9 S" u/*                                                                          */
/ Y4 c1 Y; s* ]. E- e) E/*              中断服务函数                                                */
. v+ y% J2 X6 Z: S4 c4 E/ M- g/*                                                                          */) W) \' j/ s5 @8 }
/****************************************************************************/
2 E* v3 S- ^% G* }/ jvoid PWMEventIsr(void)
# s7 N1 c* `7 n6 {, U{
1 M( _& C+ h* M5 m; f. l0 o7 s- P" h# u        IntSystemStatusClear(SYS_INT_EHRPWM1);
9 ?! _1 e4 _# e( `0 W, m1 n( i* r
8 u8 J: `- }* [  o% I7 e. J, c" @' C7 z    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);+ d( P4 R8 X& `- E# F
}, T: o/ u8 f  W; _  I2 s# x

! T& L' o. w" p2 l+ M$ P. nvoid PWMTZIsr(void)+ [, r8 Z& w: V' n3 @
{4 }% M- H5 J6 L5 t& c# \! z
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);* O2 U3 A7 K1 U0 ]- a
# w! @+ Z9 r- s
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
' c0 b$ v  ?+ _& \}
* ]' B! Y2 j: K4 }( i3 ]
3 s+ b0 p2 s( F% l' t# Q  S( L% p/****************************************************************************/7 S" T" R+ `# P+ e( D, n4 _* q
/*                                                                          */
6 J; f) r: i& F/*              初始化捕获模块                                              */5 }2 A& [/ w8 A, o8 z& ]
/*                                                                          */" R5 |# O) [- I8 Q7 {
/****************************************************************************/
" u" `9 T6 ~+ w8 n+ ]  t# L* U$ uvoid ECAPInit(void)
4 H) X- _& T- j/ T+ J4 c{
  t5 r5 Z8 _$ ~! w( t6 r) s        /*-----设置 ECCTL1-----*/7 ~: @0 L- x0 ^8 _% @: ^
        // 使能CAP寄存器装载
2 D& ~; J; \6 m5 Z        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);5 g4 N0 z! L. z5 b5 }
        // 设置预分频值." ^; A' I. m) ~
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
% x6 o& g( M+ l9 v, g5 L        // 上升沿触发捕获事件4 v' b) u7 l# w- j8 d# E
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);( C' ]4 @+ U4 y1 w0 q
        // 输入捕获后重新装载计数器值.
. h, n4 f6 p. e% L        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);# ?1 H- N; W) p) ^- a7 o) Z

! Y$ a" n4 f4 d) |. Z        /*-----设置 ECCTL2-----*/
# `5 |( ^  C# ^# ^6 ^* I3 {        // 连续模式- X& j6 }0 u: }3 S7 p9 w1 a
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);9 r9 e1 e8 N' r+ B& ^- N# P
        // ECAP计数器TSCTR持续计数
/ `9 W. r8 t9 ]  P5 ^        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);+ t1 P; M% t3 r/ ?  t3 ~
        // 禁用同步输出和同步输入2 {, ?( J0 K( _$ M' t
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
# P+ O$ ~4 _3 H* i! O- C        // 配置 ECAP 2 为 CAPTURE 模式) @! ^+ ^7 B/ U0 w8 o2 E# W1 \' R
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
$ f& g9 ^* m  q% n8 ^0 D& p3 d# a  g
7 J6 U! a( B& [        // 使能中断
: t3 C6 j4 ^6 R0 p' _+ W* D//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
8 J0 Q. @8 |8 o# x}
4 A+ s' r. p- l3 P
$ P  _& e% h; \- H- d. i9 _/****************************************************************************/1 U/ m, i. a: n/ x  g6 \
/*                                                                          */
; B  }. x  n$ w& u9 V/*              取得捕获结果                                                */
" B" ]2 b* C* i) D3 I9 ^/*                                                                          */
  [- o" f# |+ f2 C/****************************************************************************/: r$ b+ f- U" c. E; c2 K8 G2 r9 w
unsigned int ECAPRead(void)0 \' i& J) r( }1 h! V" `# q
{
/ ~1 ?3 P; s7 I' w/ l0 m5 B+ V        unsigned int capvalue;
* t9 k' V. w: d. v  ~        unsigned long frequency;
* H- H% z: h& J( x- R
2 W; W* O& F2 q9 _5 i2 L. x$ o        // Event1 中断标志
+ Y1 Y# v3 w( K+ Z* }        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
/ D6 a% m/ t2 q- Z        {" b9 Y0 W$ R3 `. R. f7 y
                // 取得捕获计数& i$ }5 _/ s/ E1 y/ b
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
) k4 |% \( K: l) }0 q4 A" \9 R                capvalue = ECAPResult.cap1;1 J. `) R: h( `: }$ e0 N8 L

& ~. N! z, E+ @- q: r& y/ Q                // CAPTRUE 模块 228M 时钟主频  P7 L6 e3 i! b, ^# E9 I
                frequency  =  228000000/capvalue;- U0 U. d' Y, h" F* b0 |, l2 H  B$ j
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
6 h2 B$ M8 C/ {
3 \. k0 x5 m- t                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
! j& B3 }/ G/ V4 R/ c" d( T//                IntEventClear(SYS_INT_ECAP2);
$ P( |: B  N3 @+ c, v        }
# w7 S' m' R' \: C4 P: y( r        return frequency;
! {* E0 q/ {. y0 k}
. e7 Q" O3 r# O+ E2 R
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
7 ^1 H5 m9 c/ {2 V" y: s

本帖子中包含更多资源

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

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, 2026-2-21 19:58 , Processed in 0.047666 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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