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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
# {  y; @, s* ?/*                                                                          */
8 a0 ?. \: \* m; b$ W/*              宏定义                                                      */
  s, ~8 n, w; `5 Q/*                                                                          */! @; b  I. r1 m! X+ ^5 l, l
/****************************************************************************/
; k# K& n1 v9 ^' C: e// 软件断点
( H+ Q3 @2 }# N9 @# v+ s#define SW_BREAKPOINT     asm(" SWBP 0 ");9 Z+ o0 d& H2 W9 J, E5 q5 Z
: W9 y9 ^6 b6 U* ^) A- W# a: X
// 时钟分频0 B$ M. E4 b8 M9 x5 @* L
#define CLOCK_DIV_VAL     228$ s9 o* U! H% F6 z
9 D& b# g8 A0 r% Q: j
/****************************************************************************/! `/ ^9 ?5 ~) v7 L; l  ?( N. y( k7 m
/*                                                                          */! g9 k3 ^) X: t7 M! m4 [& I
/*              全局变量                                                    */
7 x0 S4 N- Z$ N# @9 Y/*                                                                          */6 \! M* a' o+ x( U2 v" n+ }
/****************************************************************************/
- Q# z; R& e0 }' c8 ~$ a: }. l9 PECAPCONTEXT ECAPResult;
1 d) n- @) G7 `( O2 n* n' W! B' D( O. `8 x" f2 f9 e' M
/****************************************************************************/5 Q4 \0 c: P  W$ M. K
/*                                                                          */
6 G" C4 ]4 n9 k) P( Q/*              函数声明                                                    */
' |7 x- ?0 j* y+ D7 H2 {: c/*                                                                          */% _' I7 j0 ^$ S% f1 O
/****************************************************************************/
& y+ q/ u) S7 P$ F6 k* n; T0 ^$ @1 S// 外设使能配置
2 i7 z( _8 |' ]9 ?, Yvoid PSCInit(void);( ^7 o3 K. P0 T

4 w8 U4 |, G; h+ B// GPIO 管脚复用配置5 z. M* K& ^% T
void GPIOBankPinMuxSet();0 [9 E) S9 q& s& K# f, T

/ d. f1 h5 z7 b9 }) F1 j// 产生波形+ r& P4 \  s& h# b  r
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);1 j2 s+ _3 J! d. c; @, W* h
void ChopperWaveform(void);. U. c; [8 l2 n( L

( p$ `2 Z+ t3 S% ?4 Z1 r// ECAP初始化和读函数
7 q% j% A) U) L0 R: a" u5 svoid ECAPInit(void);
3 j9 p8 U' Q! aunsigned int ECAPRead(void);  a# K0 Y7 R* z9 }

5 c6 P+ ^5 k* J; s. z' E+ i//ARM 中断初始化4 B+ e9 O9 o0 b  h! i6 F: h
void InterruptInit(void);
  n  v( _& E  X3 I4 J+ W. m; c: c8 l- B! H8 Z1 @
// PWM 中断初始化2 x$ k; ~8 v; d. i8 ?
void PWMInterruptInit(void);% \0 G8 g5 B1 ^3 l- G# n
// 中断服务函数
- r8 V! G0 L. B. P// PWM 事件
# d, j+ J" L" c. o/ Kvoid PWMEventIsr(void);
+ {' Q1 A5 B1 y4 ~7 Y1 y  y// PWM 错误控制事件$ U5 x! u/ C* A
void PWMTZIsr(void);
2 V* p- p& f' p/ ]
, G/ i& |) [% L4 v' V/ B' k/****************************************************************************/" d' I( g' U2 J
/*                                                                          */6 W2 N2 M" q- B3 E' M7 k3 }1 v
/*              主函数                                                      */
& ?$ p6 J, g' \; B' I0 b/*                                                                          */, x5 H6 Y! N: h+ p$ u1 f9 _: f
/****************************************************************************/
$ J! i8 Y9 m2 H7 `: Lint main(void)7 S$ w9 }9 Z' W+ f
{
4 Z4 w- }0 H% h0 Z9 p4 }        // 外设使能配置
4 x' e  r9 m2 M        PSCInit();
9 k3 v6 D% d+ g$ C- E: z/ `4 N; I2 |) J4 J1 W" {* v
        // 初始化串口终端 使用串口2
# j0 A2 v  z' R3 t8 q        UARTStdioInit();( D; e! Y9 b1 u* @
        2 l" Q9 ~. t9 N" v& `5 S4 u. X$ e
        // GPIO 管脚复用配置
9 w0 L- a# w7 \  {        GPIOBankPinMuxSet();" Q$ N9 J* q5 {" B

+ q, z) p7 e: g        // ARM 中断初始化
. _4 l: u) o4 c; @4 \% j5 c! ^        InterruptInit();: w; T; |7 j9 j" ^' ]3 e- c4 m

4 T+ D# \- Q, Q! `8 z! p        // PWM 中断初始化) j, G. G9 u+ H& h* L' N* {
        PWMInterruptInit();
+ m1 O) u. k$ W$ X( B- M
& R; e+ C( q& N9 Y+ M        unsigned char i;
. m6 L4 M( ^+ S( y        unsigned int j;6 C7 z' c* X9 f
2 u5 e+ d2 E7 _, I5 W
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
6 i5 z- b) U( g9 n( j        UARTPuts("------------------------------------------------------------\r\n", -1);! U) S) k  S$ p) I$ I9 T* j4 ?9 B
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);8 J* K: C; Z2 U$ ?* B% W
        // 产生波形
) T& |! ~3 k  o5 ?* C/ i7 w        PWM1ABasic(25000,50);2 Q* C( c  e7 u  [- w

3 Y7 l' a- v0 ?$ I$ `  |        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
1 y" _6 S+ Q4 T        UARTPuts("------------------------------------------------------------\r\n", -1);
$ y8 g( y8 Z# k0 j  U  p- H5 V" n: f4 n) u. j0 b' U
. h8 h3 E  H: e2 L) E+ V
  @3 ?4 Y8 U& u
        UARTPuts("------------------------------------------------------------\r\n", -1);
3 _4 a; D; O  [8 X, j        UARTPuts("                    C6748 ECAP Test\r\n", -1);5 Z7 L" a3 n8 L. U
        // ECAP 捕获初始化
' |2 }: s2 k! U7 E! x! e# X% V3 f/ T        ECAPInit();% g. y' Y6 h. K- W: t% h2 L% @
        UARTPuts("Initialize ECAP.......\r\n",-1);+ x% n5 n/ M6 I$ }7 W) b9 @$ B/ }
        for(i=0;i<5;i++)
9 ?" l/ N0 ?4 ^" H4 A0 O/ s        {* k7 V5 l6 @- H. E# p3 t
                    for(j=0x00FFFFFF;j>0;j--);            // 延时( B4 |2 J  S3 `' ]% v# Z
                    ECAPRead();
0 Q4 m/ I3 P) l8 z* r        }
  w, u; O) r& e- {" ^9 F        UARTPuts("\r\n",-1);9 C4 ^1 _, A/ w- Y4 o5 G6 a& I, C
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);
) l7 a7 a. P3 _2 F9 U9 m. ^/ H        UARTPuts("------------------------------------------------------------\r\n", -1);; p( X8 h; V: k% p, @4 r
/ l9 h* D- x$ R
        // 主循环
& G7 n' _/ p: r$ ]" Y2 |        for(;;)7 }* M* y2 |0 n% T! \3 P: ?
        {8 r3 h2 U2 L$ h+ j" N1 @' V! t. W

! O/ J: z3 u' N; z: u1 S0 |        }8 K* B% Q5 ~6 J+ _
}' G: Y/ |8 Q- z0 c

0 _9 L0 G9 S, |& n8 {3 J5 W: @/****************************************************************************/
1 ^% {! v8 D2 t) U* u4 ?5 Y( X/*                                                                          */
; k$ C2 R' z% _) x/ m! |/*              PSC 初始化                                                  */5 J( U+ i% g% i
/*                                                                          */
+ |. a+ v9 U7 q  T8 K/****************************************************************************/
$ q- H0 S6 B' ]void PSCInit(void)
7 K. E7 w9 \. V{. A1 h! X, i3 B9 K: [/ D8 A
        // 使能  EHRPWM 和 ECAP 模块
# r3 ~5 D, z: Q  m4 O: n6 e  u2 x        // 对相应外设模块的使能也可以在 BootLoader 中完成
7 C; U3 e2 e% u0 t) d% L) K    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
9 [0 H$ \3 s; m( c    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);7 k/ w7 J6 ]4 p6 Q. G6 {& Z
}
5 D0 k4 _, P  G0 s$ E
4 U# J1 }: h: ^" g* V/****************************************************************************/  J' g. x& W6 C! O' l! F0 j' P
/*                                                                          */
2 L) A' o$ p& C( l/*              GPIO 管脚复用配置                                           */3 ]* X5 M/ n3 F8 i/ C2 V+ @" X
/*                                                                          */
6 h+ l, f9 n) v- ]/****************************************************************************/' A$ @0 F2 {9 r7 B9 X# A' @9 m' S
void GPIOBankPinMuxSet(void)
. A, \. X  ^+ I: ]4 v) q{
8 S  b$ a- H% w$ A4 r        EHRPWM1PinMuxSetup();7 Y% B( v+ y7 S' T. U
8 P+ O+ H" m. x! v
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP); U. b. ~2 _' p# d
        // 作为捕获功能时管脚方向为输入
' f& |2 }+ N1 b1 Z( [% D        // 作为辅助脉宽调制时管脚方向为输出
; ], P5 ~5 L# a: W4 G+ P( A    // ECAP2 / APWM2
2 c8 D( H2 _6 n7 s, b        ECAPPinMuxSetup(2);9 C/ C- y4 l1 P* F: b

  z  f$ b8 m! o* k        // ECAP2 / APWM2方向设置为输入7 g# [  C" b/ B4 C
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]9 C  M8 O5 Q5 e7 q* F2 O/ L
}  P4 j6 }& C0 C& x* i* q
2 A9 O/ a7 g3 W5 {; L% Z
/****************************************************************************/
# |7 v% p5 P' D' L0 x* }* X' @/*                                                                          */, d7 Z. e3 E0 S% ^8 U2 ~. D
/*              PWM 输出波形                                                *// Y1 n, \7 A0 z
/*                                                                          */; f3 a/ O5 R2 a$ Z
/****************************************************************************/
( p5 f0 z2 g- y/ Z' O) z( Hvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
; P: E/ `! s5 t1 p- A: x+ _{
+ {, I2 D8 a2 \7 P    // 时间基准配置
. i( O9 I* \& |7 B" s  G    // 时钟配置
) [3 ]& l& _: s; ]* _+ ^    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);1 z6 }4 B! D1 q4 w0 Q
) |% t( t1 f, L; q8 F! t# G0 g1 B
    // 配置周期
- _6 u4 p) o$ {2 n. B    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,- S, ~! w0 r( _- |
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);2 n. U, G* F* Z* ~) E" C! }

- }8 H( r+ `9 v* r& e: f# }    // 禁用输入同步信号
, {; R2 `8 @, Y    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
5 l. n/ a, F- q* C# ~
* O  T' Y$ e7 x: l) F! t" O    // 禁用输出同步信号8 K' K* w3 M! H. c' {; j8 Z
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
( w2 M- Q' F& m5 m2 R6 o; B+ O( [
: l# x& a5 A! t2 V* v. }5 F    // 仿真(DEBUG)模式行为配置
$ j% |8 ]) b$ {3 j  b1 M) w    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
9 t3 n1 l& K% |  @8 W& o0 M2 M- E+ v4 R, I# F# h8 W- }/ S
    // 配置计数比较器子模块1 m& H9 C' m! ~& A) m& ?0 p& b8 E  e
    // 加载比较器 A 值. _+ Y- ^& y, \! S! q
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
3 l$ s6 A) o8 o: T                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);4 h$ h$ I4 V- r1 w. b' P) l0 e
% p7 l4 X1 c6 E+ t# P6 t3 w& w; e- D
    // 加载比较器 B 值
1 ]- s; ]0 t& F: x    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
: h; E! i5 L# h% I                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
! a, g7 p. c, j4 v5 l/ z2 N% ~7 ?
    // 功能限定配置(输出引脚触发方式设定)" T6 W6 B3 u2 v3 [8 g
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
- h( ?! W0 ]. p$ n. s% ~- o" ^    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
' |; U' _; y# H# d) A                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,& W; b, i( w- P5 k! W9 X. X6 Y  J
                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
4 F% H4 E) _9 o8 F' n4 ^
$ z" ~) @4 E* r' ]1 `$ w" I6 D    // 禁用(旁路,信号直接输出到斩波子模块)死区模块5 F" ?, h6 o! }5 ]
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);' [  c9 x9 D$ s$ R

* Y5 l  G& V& n! o5 U) Z4 w* r: A# i$ B    // 禁用斩波子模块" z0 L, N% l3 M: Q5 j
    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);$ U) q( E0 c3 G1 @) E' J7 k4 [1 i
/ J6 T  f% l" Q9 p2 T( v: d4 C
    // 禁用错误控制事件
& ^/ p9 C4 [; P) g4 ?+ A0 u+ X7 P    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);6 X2 e& l0 w1 @
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
+ f0 g! u6 ~1 z5 q" c4 j  `0 `4 ?# M3 L# m& M
    // 事件触发配置
1 `, h5 o0 e8 y2 z( B5 I7 Z) m    // 每三次事件发生产生中断1 y) h- i2 p% d1 a7 Z
    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);+ J7 d/ J+ ]- C0 @5 E' D7 ]; |- n
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件. s3 |9 O; }% F
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);( U+ m0 I% c; Y7 x
    // 使能中断3 O4 i" T; D7 c6 |
    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);" n8 [# f+ w7 t2 f2 d
+ A' r1 g$ ~: |- z% ~9 l$ z' R7 l
    // 禁用高精度子模块& l& m- \# g6 q9 j
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);) R8 m- e3 X8 {4 _6 ]
* O1 ^2 `- ~- L$ l9 U
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
" [) ^- w2 y& o: r$ c; I7 G* o}
2 Z9 M" G+ ?$ ?4 I- ~' W) v. [8 L% Z: d
void ChopperWaveform(void)$ Q4 f4 F% Y" h; p
{
: Y# n2 J0 }) d( k& ]4 h  N5 J    // 50% 占空比
# Z* w" ^2 X$ d; U    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);) k; w# _8 k! |+ `
    // 4 分频4 F  @& Q5 ]: L$ o* k: I  \
    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
. G+ Y1 `) E6 Q9 T% @+ L    // 单个脉冲宽度
( o& ]1 s6 M* Y* |0 a    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);% V/ J' c: q) |: `! s) L
    // 使能斩波子模块
+ G0 B$ N" N/ \5 D9 A7 Q    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
) T, \: @* V* N' ~}# k: D$ Z# ~9 {0 e; H
+ e: p$ P7 J7 m* i/ [# }3 d
/****************************************************************************/
4 w# q! ?3 D0 C4 J$ H/*                                                                          */
1 F8 @9 U  E% d/*              PWM 中断初始化                                              */$ q0 V8 s1 R8 n) H
/*                                                                          */
, y# b; L# C, D& o" V. _6 |/ W/****************************************************************************/
5 ~( K6 B; O4 Bvoid PWMInterruptInit(void)
% b; u( o6 C. k) }( s1 c{
" e( a* a  D  o+ w' F4 `        // 注册中断服务函数0 p, l9 z- @' p& g2 J2 r8 n
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
2 N: Y- R# p( {6 r        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);8 c3 I8 ?. u/ ^3 b3 O' B) ?

# D$ D& j9 Z. }5 Y3 P% i# L        // 映射中断/ x, {: N) q7 _$ f+ }; R
        IntChannelSet(SYS_INT_EHRPWM1, 2);+ Z" y1 O5 Z! k5 _- s$ j, }/ n+ {
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);5 ]' d$ O7 c7 Y9 A, ^
9 T9 n  M5 X% L! E2 O
        // 使能中断# F) w4 H3 `; a0 n' v* E/ f4 s
        IntSystemEnable(SYS_INT_EHRPWM1);. S) Y$ v% C" }8 b
        IntSystemEnable(SYS_INT_EHRPWM1TZ);- `$ ~3 v5 D+ B6 I# V, e6 J
}
- U& X* L6 f. T: k/ D& @. H: m2 u7 H6 a$ @
/****************************************************************************/2 z2 _/ Y+ M  B# N+ k0 x& Y: E7 O
/*                                                                          */  K* R1 H  ^7 M7 I2 c+ K  E
/*              ARM 中断初始化                                              */
5 v" ^8 f" x2 m7 d/*                                                                          */
. q0 p& P" a9 b/****************************************************************************/$ E5 W8 L% e2 c8 ~) f! {$ t- v9 o
void InterruptInit(void)
5 `, c, c  ?9 P$ C# M7 S{% N5 _8 v7 L9 E2 u* o& Q
        // 初始化 ARM 中断控制器
: x1 ^1 l3 x" j# u        IntAINTCInit();
2 j5 f/ d5 e5 I2 ~. t+ y5 }* k: m- V; X% a
        // 使能 IRQ(CPSR)
0 x4 l' H' t; ~, b5 X( O% b3 W4 ?        IntMasterIRQEnable();
3 |$ Q" q( p) X5 ?3 D
" D, R- m/ {' I1 j        // 使能中断(AINTC GER)+ r' L, L# ^% y" c: P
        IntGlobalEnable();# C: v9 @4 d( `( {

2 F" [, U( a% t! y        // 使能中断(AINTC HIER)
0 i* }# ?: U9 o& ^1 ~        IntIRQEnable();) r3 B8 {2 }% y$ t2 V* j
}8 e: B0 r$ h  J: C

( t# U* Z" \# Q/ [
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
; y* }: S8 g, g+ Y/*                                                                          */* Z6 r% i9 C( L$ Y- w# g
/*              中断服务函数                                                */
2 g# N- \1 t/ v/*                                                                          */% U( k1 [) P8 Z4 J
/****************************************************************************/! V2 }  E% N. \7 v: @+ _
void PWMEventIsr(void)
! p* ?) J$ U' n1 l, |{
  p+ @# X' x7 G+ [        IntSystemStatusClear(SYS_INT_EHRPWM1);4 x, T9 D2 _! v& f9 A
2 S; c4 x* f3 @/ Q8 p
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);* W4 @+ v3 X$ Z* A: E+ t/ j" ]4 A
}
7 S0 r5 s% z' S4 F, B9 Z8 \
) ?8 Q$ t1 E- ^# E( `void PWMTZIsr(void)7 U: h  Z3 s; a" C; u
{+ f* y3 \% T  U; S) \
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);
: t' e% h$ U9 G( Y+ V5 E- I
2 }, o) n: E. z* }( ]7 `& j9 d    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);5 R# B6 _' U+ M5 V0 _
}/ ~2 E& \1 G. n

, T7 j* e1 s) l. V* U4 _' r/****************************************************************************/
( s! Y8 Y. Q" }$ x$ P& Y" S! F/*                                                                          */
& \. ~# k& {3 r/*              初始化捕获模块                                              */6 E, e, y, X& _* T
/*                                                                          *// p7 a0 B8 k( [" h7 ~- L2 h& N" j
/****************************************************************************/
3 T! M0 m% F& X9 ~8 D+ `" jvoid ECAPInit(void)
% g  d1 z8 R3 p, V* S) ]$ ]" a3 K{
; i- P$ I. U0 C, T) @        /*-----设置 ECCTL1-----*/* n% j9 W) L2 P2 L4 p5 {8 q) C
        // 使能CAP寄存器装载
/ W$ k) H) ^4 G; p: p2 c: N        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
2 h" q( S7 M! l8 E( l        // 设置预分频值.8 |  ]' z; b/ T. M+ W
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);% t, t8 H) M3 D# l7 x
        // 上升沿触发捕获事件
( |# H$ o. j* S        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);0 c( _9 N% G2 E* }3 f; g
        // 输入捕获后重新装载计数器值.
" Z& [) B1 i/ ]        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
6 V/ W& d4 H& X
6 B6 r! @3 }6 h) n1 k+ F2 D        /*-----设置 ECCTL2-----*/
' y% U. q* ~4 E) J1 X% n        // 连续模式
4 w7 W+ U6 m/ ~/ r. }( F- T6 Y+ P        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
- h) t* ~$ g- O. {( X5 @6 i7 P        // ECAP计数器TSCTR持续计数+ r. c3 ~% b1 t* [1 |
        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
5 i/ t1 w- @$ C, f$ H  Q: I        // 禁用同步输出和同步输入+ j2 |2 C$ c7 T1 |) u" k
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);* h$ ]  y; |7 ?! u! r+ _, ?/ I" q
        // 配置 ECAP 2 为 CAPTURE 模式8 D& a: f  x( |. W
        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);1 _6 Q' Q0 ?5 Y) x; J( m

2 \7 [* [! m6 O" f% L        // 使能中断1 c: V3 \" s1 C# x
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
$ M" @1 F0 |) [}5 n3 o. Y2 t( A( O
6 U, A  t/ z# ^. r
/****************************************************************************/
$ V# ~& G; u" C  ~% ?  |: q+ B/*                                                                          */9 N* G% \/ M: l( w% `' @
/*              取得捕获结果                                                */" z; w( U& o6 o4 |# r6 i0 g3 m2 \
/*                                                                          */! O# u4 @$ ?$ X( t2 ?
/****************************************************************************/
4 Q6 a- U$ ]2 N; f5 q# @; d6 dunsigned int ECAPRead(void)
! u9 J( E2 {; _3 F{! S) \  `: U% ]2 X* Z
        unsigned int capvalue;4 Y' a% H2 M# B( k& M
        unsigned long frequency;6 Y5 M: Z4 f1 G4 ~
7 f' d7 {% u% i2 {
        // Event1 中断标志
; R; a9 q: V9 q  [7 U0 E  ~        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
% T+ ^; j4 m! H6 \1 N& E( q        {# N  N8 l: `0 g8 P
                // 取得捕获计数: j4 }; M) f5 c# ]: \1 E; N! q
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
/ f& s4 ~& N8 O* `9 Y: l: v                capvalue = ECAPResult.cap1;
& \6 N2 A! C- v* c/ K/ U! o& g- S- s; T) u' G0 p0 Y
                // CAPTRUE 模块 228M 时钟主频
: O6 u, P2 T4 {                frequency  =  228000000/capvalue;
) O+ w( y) F, ]  Q8 z; O6 `                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
9 @: @; p: Y& o! T" ?& C
2 t  C% Z* X! p$ {4 u6 U% m                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
: Y6 g+ w* B1 h5 m3 _' H" f. G//                IntEventClear(SYS_INT_ECAP2);" i3 {8 e7 d4 c8 m0 l
        }: q3 e: T* Y* v/ E, Z, g3 w: J
        return frequency;
- Q, a. F/ N% O; @. e$ E}
  p$ |) f$ {3 w: j: N1 t$ u
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
' i5 Z0 A7 V5 T0 T5 W& r4 j3 F

本帖子中包含更多资源

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

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-5-7 00:33 , Processed in 0.052825 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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