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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
( b6 c4 C* }" x( d/*                                                                          */
7 V3 c* d9 c3 b4 @/*              宏定义                                                      */
- m& s2 f, A- @. f) n+ p/*                                                                          */
. L; {3 R6 ^! _8 f8 b8 z2 B/****************************************************************************/5 J0 v1 D2 |8 y
// 软件断点9 D3 j% q; c6 s7 @) w" b0 Y
#define SW_BREAKPOINT     asm(" SWBP 0 ");+ o& r7 P+ J1 o' o$ v
  p5 B! N" R1 `: y% y& D& a
// 时钟分频
" k( B1 q9 }1 T0 f. E2 T4 J: ?#define CLOCK_DIV_VAL     228
. L2 R8 A5 m$ m6 g
4 a& A5 o0 z1 h/****************************************************************************/
/ T8 ~3 U+ E* E0 S& @/*                                                                          */
! O% ?1 T- T* B7 |7 k- _/*              全局变量                                                    */
2 P# N% U( T; y/*                                                                          */
; b0 F( O& _! ]$ v% x/****************************************************************************/
) y/ E- U+ f% l+ f" e$ K) BECAPCONTEXT ECAPResult;( Y* Z" Q& _4 |$ g7 p

) G2 q% ], E  {0 J, f/****************************************************************************/
' y/ S  ~/ E: u! R4 ]/*                                                                          */
  @! U9 a7 c! q8 q0 a* Q/*              函数声明                                                    */0 g* c* ~+ J* p6 A" [
/*                                                                          */
6 p( E* S. B1 O9 y6 P: I) |7 n/****************************************************************************/. W2 x* G2 p0 A5 B$ h4 `  E
// 外设使能配置
! |) e+ s  f: V# v( ^void PSCInit(void);. R  F2 t* L4 f3 ~$ t4 D
3 j8 f; Z6 H. F
// GPIO 管脚复用配置0 x9 s- B" U/ i$ W9 A" ~
void GPIOBankPinMuxSet();( w# J$ W  ]3 q  d8 Y, u
& p: c, s* @( J( L, M" a. a! P
// 产生波形8 a) ?4 s1 x, i2 b3 T! @& D. f
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
3 {) y& t# F; Lvoid ChopperWaveform(void);
; m0 K* r* e- u$ }: W
# K8 W) o$ ^% r& n  J% E- O// ECAP初始化和读函数
; I5 I+ m9 D/ w  p& I- \void ECAPInit(void);
% @" ^1 T* T7 ]. ~, z) a2 L1 v1 punsigned int ECAPRead(void);! I6 R. v" A6 K, S  s

7 ^/ u$ t! d7 H* Y4 o& W# @" c//ARM 中断初始化' F5 W. P8 X8 G; c3 _
void InterruptInit(void);
: N: D* u7 G( ?+ l4 |1 I3 l5 v/ s, A5 O% ?
// PWM 中断初始化
" C  f5 [' x3 U1 T1 M* ivoid PWMInterruptInit(void);
8 S9 p8 ~& x0 F9 a// 中断服务函数
) U; L; I7 r) ?/ V# A// PWM 事件; m* @0 T" F2 m2 g/ X( Z0 m
void PWMEventIsr(void);) E5 c& c) N" d) Y
// PWM 错误控制事件
  P+ r3 A+ q# P) M& Q  M) `void PWMTZIsr(void);
4 G) o! c4 `# D/ Q( t" e2 R7 L" U6 e  H9 s6 K
/****************************************************************************/! u7 D/ `* ^" I7 P7 E
/*                                                                          */
  ]0 u' r% R+ M4 q1 M/ E/*              主函数                                                      */7 g2 t! ?7 l9 Z$ s( @& v
/*                                                                          */
# ?: j8 T; z7 D, M+ l) K: k/****************************************************************************/" G, n4 W# h8 i0 g- A
int main(void)
5 H7 J: C/ Z) S' r7 N+ f1 b; m{" q+ ^# t' d0 i7 a' h9 S; F
        // 外设使能配置% i1 O$ Q+ A' H$ N( q3 a0 n
        PSCInit();# Y* E' V: ?- W* V+ h

: ~# h: K5 [& r! Y3 F; ]        // 初始化串口终端 使用串口2
1 \. M8 D; s, n# ^8 l" E- y4 t        UARTStdioInit();) y  i' G8 j9 o. M. n( P5 u& s5 \
       
2 w( @( j" n; T) V        // GPIO 管脚复用配置
0 T0 }1 R' h" P6 j+ k: m0 V        GPIOBankPinMuxSet();
& w6 ^" C) ?$ y
' g+ V1 }9 O) u( _3 s' t+ ^        // ARM 中断初始化
: i/ b$ G4 u' ?  E( _; B        InterruptInit();9 P; v9 A- M) M* g/ q
0 p- W( z9 d: ^/ v6 a
        // PWM 中断初始化
. h4 @9 W; Y- E: n        PWMInterruptInit();
( o1 ~, p# E+ `2 ]( t* F: Y. x$ }9 K4 Q* ]
        unsigned char i;9 ]6 i( h6 H. l! D. ^! ]6 M  T, H
        unsigned int j;% G% }4 ?5 @: I+ d1 |4 M. `

& [, g& |+ @9 g        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
6 {/ y/ P3 r( M' A        UARTPuts("------------------------------------------------------------\r\n", -1);4 ]: R( \6 }- Y" D' B& h5 u
        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
. U3 w1 J# K% v! k  b        // 产生波形) ?7 G  v- ?6 I6 O1 \
        PWM1ABasic(25000,50);
2 P$ W% v% p, y
+ l5 v8 S9 i; G' i        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
1 T( \! r5 z6 C4 I0 r, A1 x+ V        UARTPuts("------------------------------------------------------------\r\n", -1);; I0 a0 t  T4 m" `; N

' ]6 C% }  E& B" I
* j) i) e/ @# q0 E. v# X" q
/ e0 b+ U1 \; m0 A' y& P; B4 s        UARTPuts("------------------------------------------------------------\r\n", -1);. E) J  Y% S$ |) [: H5 I) ~4 j; C
        UARTPuts("                    C6748 ECAP Test\r\n", -1);
6 D6 R  X; i. j9 F( y) z. t  @7 a, q        // ECAP 捕获初始化8 A! J* ]" x+ [, [
        ECAPInit();- `$ F% k  ~" ^# Z  H
        UARTPuts("Initialize ECAP.......\r\n",-1);9 D$ x0 X) Q& c4 m& |* i
        for(i=0;i<5;i++)8 d  w6 e2 O+ i2 F
        {
) y! N/ q" @- \: Y: t7 r                    for(j=0x00FFFFFF;j>0;j--);            // 延时4 m1 |" w6 X# D6 C1 c! G
                    ECAPRead();. t9 y4 D( F  j* S! z- Q
        }
% d9 X% h& H- k, C# ?8 u        UARTPuts("\r\n",-1);2 a8 v3 t9 `/ i" z7 x4 Q) q
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);$ C$ m( O  k# D. E1 x& k4 u
        UARTPuts("------------------------------------------------------------\r\n", -1);& ?6 e& T1 t/ l) Z5 v' z

! Y1 M/ @4 W5 i7 @        // 主循环" Q# c8 ^% l4 g. R
        for(;;), G2 R6 G- W! J3 E" W
        {
6 p0 U7 `! @$ o) W% |& Q' j0 {$ g9 _1 U/ N
        }
7 ^9 D, L% b" n. l) v7 I}! i; [7 o9 g1 o1 |& I, m

* C" {" ]' M7 y8 C/****************************************************************************/
. z; p( J$ R' c( y# d8 J/*                                                                          */
& a  E/ _; v: C. U( P/*              PSC 初始化                                                  */
. s# \2 i( Y! b9 \5 {3 `, G/*                                                                          */) I- d7 i6 o% h6 V4 ~
/****************************************************************************/
9 J$ d/ q$ k( N/ I. D/ i) A! mvoid PSCInit(void): ~8 f4 O9 P. R
{
5 D0 x# t0 ]6 R2 _& T        // 使能  EHRPWM 和 ECAP 模块
' A* Q7 {! a+ N. l2 G+ w( X8 s        // 对相应外设模块的使能也可以在 BootLoader 中完成7 l4 z: x8 i1 u4 A& L) _. o0 q' [
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
7 Z7 E& s7 S& ]8 _+ K: Y) i    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);  v$ Q$ x9 p2 U# F: U7 M% f3 \
}5 Z) y' _* m/ J  V7 n

- }+ w6 }1 s$ g/****************************************************************************/- P+ i0 X: ]8 X( c9 r
/*                                                                          */+ }! u( b* p6 ^8 i1 Q
/*              GPIO 管脚复用配置                                           */% f( c- b2 O: p/ A2 L0 z
/*                                                                          */
2 S. k( u2 r$ z, H" p/****************************************************************************/. S% L. z: T7 @# o! W8 V
void GPIOBankPinMuxSet(void)
* v* G3 t1 q. P. X6 k1 k{- Q. q8 D1 O4 ^1 z; B
        EHRPWM1PinMuxSetup();
/ r' F( @" Q5 o2 O, r6 n
9 u- [9 `# `& T. `        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)/ `/ {3 k5 P9 q6 Z: V% T$ W
        // 作为捕获功能时管脚方向为输入5 c1 \; {8 \( _
        // 作为辅助脉宽调制时管脚方向为输出
; N$ d, D& ]* r# [% g: }    // ECAP2 / APWM29 U. m6 w' {( V( T! {
        ECAPPinMuxSetup(2);
; g- e- @) l7 v( Y: w7 ^
$ A4 `4 w) z- [) Q1 w, F        // ECAP2 / APWM2方向设置为输入
( [% e% ~6 W7 q$ y# P        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
. q! V7 p, {- a/ t4 q}
5 _/ F' i4 e" g" R) ^8 X
, D5 n* Q! A$ o: Q8 r3 l1 e/****************************************************************************/
5 A+ @) d2 o) N( W, O7 x7 d/*                                                                          */: l* l, `, z3 j5 h( X+ Y% @
/*              PWM 输出波形                                                */
  c. j" \& N4 ~  H: E! d$ k/*                                                                          */
! K- K& O" f5 W9 w/****************************************************************************/
. i2 f9 \6 @6 j6 C- f+ O0 Q! ?3 Ovoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)3 P. d3 x# F/ F3 R/ C# M* F6 `
{+ u4 r3 z, ?4 q6 m$ @
    // 时间基准配置' y$ n% B. y9 ]- G$ ?
    // 时钟配置
# ^; e* V6 y& M" u# V2 ^    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);% z$ l8 ^5 ~' v: Y+ f: Z/ \' n( M

; Q/ h+ O3 s; u9 r- [! x' g! x, j- D    // 配置周期
# v; Z/ W& V. [: G    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,# O' c5 Y) T8 |5 y* G
                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
+ h* u! }- X8 V2 Z1 J8 A" r; m% m0 X; ^: d
    // 禁用输入同步信号
1 _6 b: P5 T8 J    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
/ K/ N+ {" |  Y8 e/ t) U2 a, _8 c; o7 y) S0 z8 X
    // 禁用输出同步信号+ m, g9 A, J( o$ F* f
    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);0 B! T$ e" x3 t

) ~$ E- m: ^0 F) d    // 仿真(DEBUG)模式行为配置
& t, a- ], D, t' P5 B- I! d    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
+ E# E' h" \" S" d) D2 E
9 g' J0 R8 y8 W9 K6 H% `    // 配置计数比较器子模块
* _0 E/ z" v7 U6 w& c: y    // 加载比较器 A 值
6 t  ^& ~2 J, N! Y    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,1 Q7 `  Q( L! q7 n1 ]
                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
$ J4 q: k8 R+ f9 ^' ]* u1 Y6 B9 S+ L- ~$ \& ^1 U* ]
    // 加载比较器 B 值7 v+ m: b6 e# j7 @* j* E* \
    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,) B( O* Z! y" H1 Z3 x/ T
                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);0 @8 f, w4 c8 O" x2 @
1 Z/ B' @/ q* [$ s0 _
    // 功能限定配置(输出引脚触发方式设定)
3 m1 s. y, P: L6 L" Z1 z7 w7 ?    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
; }1 g* z& j* z9 ~( @1 T    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,4 j+ [0 b0 _$ r9 L
                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
+ n9 z. m4 n' _' {                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
2 q8 h# f. S+ f7 h# `% K2 W7 R5 ]4 M& l) Q" F  a% g+ \
    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
2 ?+ A- }0 M3 Q# U    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
' n0 A0 q8 k: p, ^
# m: b: O- L) B2 y1 p( L( j    // 禁用斩波子模块
0 f# n8 G4 x) o+ G7 a4 r) B    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);/ A9 y5 V7 q+ z, v

  K2 d$ @5 Q; A7 C    // 禁用错误控制事件
) {  R5 J4 r+ p    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
) [: a: b9 Y4 ]2 J6 N    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);8 {4 @! ]% \# {0 P% Y9 N
7 V) @* T9 |) S) h, p5 _; X
    // 事件触发配置
8 ?* |$ x! L+ T    // 每三次事件发生产生中断
- E8 s: L" @& L+ V4 `4 O0 ?6 [    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);) L2 Y1 L( c! z5 ?( B$ c
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
# m5 w  A+ J7 e$ r0 H9 \- C    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
" {$ V& b* u9 M9 y" y    // 使能中断
! m- g' ~9 p/ j    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
) q: g1 e6 X1 B$ a6 `: Y/ p0 L1 s; A! H* C) _( }
    // 禁用高精度子模块& a/ _0 M/ r4 Q2 w# v  h( G4 i
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);' D( q; f& l; y, F9 o& Y
' [. n2 A! E1 y
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);; U. q7 f) J9 ]" N. i" f
}6 n$ `( p* l; ~6 v

! ~3 M  d( p/ e) }- I2 f5 mvoid ChopperWaveform(void)5 h1 ^# G% K; ?& {4 c# z
{2 a: V7 G3 A4 v* W, a, f
    // 50% 占空比8 S# x& L  W: c6 |3 n
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);; a& l; v7 n4 j% _
    // 4 分频
9 i2 {* i# i( a+ A: N    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);' H) d0 H2 `1 Q. r* X8 H  U, P
    // 单个脉冲宽度" _# @3 e/ t. _
    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
4 v/ R* i% d+ j7 t    // 使能斩波子模块
; b$ V9 j( W2 l% w* a: m    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 u/ c6 q' Z7 i; Q2 w  z  B}5 {8 d4 _3 C9 K! B' ^3 V9 j

$ F% a' b0 E7 e  c$ v% G/****************************************************************************/1 N) E: k& l% u; A9 R
/*                                                                          */) A5 h* A& `& `3 Y8 k, Z' B
/*              PWM 中断初始化                                              */: ~7 P; G$ |: }5 R  i& T" r
/*                                                                          */
& z6 U. y2 V# l$ w/****************************************************************************/
1 L5 d+ w; _" n' M! x$ Q* W* Uvoid PWMInterruptInit(void)
) g' f/ [9 l. b  t- X: F{3 G0 w$ o. s+ }  _6 q+ i
        // 注册中断服务函数$ ~8 p. I3 G& l$ y# Z9 V
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
* A& a  t  N0 Q1 C: w2 z& m+ i        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);2 z. F6 Y' |; i0 [& f0 i3 w
9 }3 ?; c( ^. W+ i& \
        // 映射中断, r, m4 w' i4 K5 q
        IntChannelSet(SYS_INT_EHRPWM1, 2);2 O# S' a5 [4 s5 P
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
( Q- {; p2 l; u! L+ g3 d
) o7 T3 ^; C; V, x9 f        // 使能中断
& ]- f  z0 q3 }9 H2 w; Y4 y        IntSystemEnable(SYS_INT_EHRPWM1);
! j( u. q; S6 y/ J        IntSystemEnable(SYS_INT_EHRPWM1TZ);: n8 r& ^' b1 B4 s% }
}
, l1 o  h2 s+ w4 }0 ]& |
' J) V4 s% r( c+ z! Z$ w/****************************************************************************/  D3 q  r" H' c  [" Q
/*                                                                          */
- O6 G8 S( c" r0 M/*              ARM 中断初始化                                              */" ^* \0 {, B$ ^! T9 {# a
/*                                                                          */
9 H7 f3 ^% |7 M4 x/****************************************************************************/
3 ?9 c/ Q; `7 W& J$ V) a$ ovoid InterruptInit(void)0 y$ q# h, X$ D3 ~  b
{
. F2 x" V9 R. ?0 p6 g1 A        // 初始化 ARM 中断控制器
* Q. t  r, Z& w& O* k! @9 u# H) a  D" @        IntAINTCInit();
2 X* L7 P7 ?& n
7 i% |  Q1 }& ]- Q        // 使能 IRQ(CPSR), y. a/ \6 f+ e% Q, c% D3 \+ L
        IntMasterIRQEnable();
) Z6 i4 N2 U6 ?+ {/ m4 g: f
8 n& m. N& T& ~        // 使能中断(AINTC GER)
: d* b; o% p% @* ?' w        IntGlobalEnable();
# H# n3 ]% x  v) R0 ~7 \8 f4 \" C4 a- w! V- x& J7 j& o
        // 使能中断(AINTC HIER)- \' y  w5 s" o' B/ N3 P' w
        IntIRQEnable();5 A9 V, ?* M4 v5 p9 x6 a
}3 Y* ^/ g. B1 x0 ?% v3 W
. o! A& C5 I% _& A2 J$ h
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/1 _* @9 H. Y' z( ^) c. ^
/*                                                                          *// b+ f' Y0 `5 q0 g" ^
/*              中断服务函数                                                */
% f: l# s! j% X% Q6 c6 |/*                                                                          */
( {7 `, z8 D! i: d3 X7 A/****************************************************************************/6 O+ i: ?" K  l0 U! c
void PWMEventIsr(void): Q" i+ E+ U. D/ P  n+ G3 T
{' w, n; L/ ?- Q
        IntSystemStatusClear(SYS_INT_EHRPWM1);, J7 \+ G6 |( L3 [

6 _4 }' }9 V8 h7 M' M! z    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
# y. B7 z4 H* R}
/ X. H% X3 ?- a. b- E* N- y4 h* @
1 |' w5 ]9 s2 N/ uvoid PWMTZIsr(void)
3 P' ?8 ?7 v- Q) G{( n7 g% V5 t* R5 T
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);& U2 q2 w1 E0 V% i2 x( |
9 c- J: l, z& K$ g, L; X; J- E
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);) J* q  B" c' t& E
}* {( }7 L8 t- k) p7 z- L( y
( S4 d/ E4 S; o" P) A$ d* f. s0 B
/****************************************************************************/
3 n+ P4 I" ~6 C8 q3 Z! e& H1 |/*                                                                          */+ F( t) h# p- r" B+ m! p- e: l
/*              初始化捕获模块                                              */
& u0 f4 `  T- S/*                                                                          */( N' ]; x9 V  w# i. E  L6 {
/****************************************************************************/
6 j; X8 _( S3 Z) L# Gvoid ECAPInit(void): @# C4 B+ }" _! R: o1 Z  _  ]# z
{6 Q, m( e7 G. L; e- O4 `: v
        /*-----设置 ECCTL1-----*/7 ?" G' Z! e) O6 d; t, p
        // 使能CAP寄存器装载
) |) G# w7 y0 n        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);% D  f1 u) C) \/ h! k" I5 ^
        // 设置预分频值.
4 _. {3 ^8 M( g) |        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);: g- c; E* T4 C. L5 E
        // 上升沿触发捕获事件, V" S1 ?4 d6 d- D: L
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);. h5 f0 Q7 I9 [" O- k+ v; q
        // 输入捕获后重新装载计数器值.
0 D4 J( k6 W6 h1 g4 H' \4 \/ G% I) K        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);& b4 s& {. q' t4 I' D# B5 e; d; P5 T

1 K+ m4 g4 P; `5 }0 p; Q: j$ ^. l        /*-----设置 ECCTL2-----*/
) ^  b5 e) e7 r        // 连续模式; L0 o3 g: \4 p. G3 C! t, K
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
) A% Z" p: a) {8 d% a! r: \        // ECAP计数器TSCTR持续计数
4 T4 ]0 r  U6 y5 ^        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
# E: R5 D+ |9 y9 l# z        // 禁用同步输出和同步输入1 x  B/ D4 x( j
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);* s! c8 i: k4 @' o' ]5 W
        // 配置 ECAP 2 为 CAPTURE 模式
! s# B. y1 e/ j, f: _& ^        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
- y4 S; r, V- f( |9 H1 b/ a6 q1 j( x3 h) A6 X- v+ l/ F" n% Z: C
        // 使能中断" ?+ `- P& i' c; {  s4 ]0 T
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
8 ]1 m- N6 g, t- R6 N}
- o  y  g  B3 U4 Z; b7 ^$ q/ V! j8 {* z- a- l
/****************************************************************************/
) _) `6 r9 _, K/ `0 K/*                                                                          */
! |+ j" A4 [9 G, t* s/*              取得捕获结果                                                */
4 g. F% I# }+ d7 O! F1 J! I' t/*                                                                          */2 B1 F- ~8 _" v
/****************************************************************************/
) K. V3 o7 R) g: c$ z& O% ~unsigned int ECAPRead(void)
; r9 m0 ]6 s$ t{- E8 V" t$ t" ?
        unsigned int capvalue;& i0 m( `; S6 w& C, h1 u- |
        unsigned long frequency;' v( s6 }8 y! N: k% V2 m

0 @; l) g3 R: E; y7 y* N3 ^        // Event1 中断标志7 m# b& N! Z4 C0 k5 w0 s" M1 ~# e: h
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
. @! X. Q$ p/ E: v        {$ y. @7 n; i# |- c" A0 F
                // 取得捕获计数6 r7 ]" i$ }6 o+ s: c7 e' z
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);) G2 }6 g5 t' d, B5 g
                capvalue = ECAPResult.cap1;
1 C$ ]$ w7 L6 n) A& `' }& v8 g6 X! u8 q. ~
                // CAPTRUE 模块 228M 时钟主频
7 F% `; q+ q# {/ }/ ?) Q8 `                frequency  =  228000000/capvalue;
. g1 s" x# J$ [2 E/ a7 \4 d                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
5 Q) R; h4 q# ]/ y
3 ~9 H  j7 }0 @: r                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);
% j( ]7 }2 w! ?+ Y; n//                IntEventClear(SYS_INT_ECAP2);6 v0 ~* O) q  r: D8 x; P
        }( x+ n/ S! d" B; Y; A7 P9 D- D" `
        return frequency;
4 M+ d3 f0 A8 ?% d) n* n}7 r7 @1 o" F0 u* I- q
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
+ V7 J6 \4 k( L* D& r

本帖子中包含更多资源

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

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-12-24 00:34 , Processed in 0.046914 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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