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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/
9 `3 @  l5 s! P/*                                                                          */! |$ |3 m9 Q' c* B+ |5 _
/*              宏定义                                                      */
  y' }- |. a2 }, F/*                                                                          */
6 G3 N) h7 C& u9 S- B7 o$ S. e( K/****************************************************************************/
( {! q5 k+ S1 F+ Y// 软件断点
7 g- p% @4 X- ^& l#define SW_BREAKPOINT     asm(" SWBP 0 ");
+ ~4 O. P5 Q6 ~1 K5 W
  c. a5 h( V! q: Q; ]// 时钟分频
& i' i, |/ @/ J: a6 {+ U/ M#define CLOCK_DIV_VAL     228. l! W) f* t# C3 i
# K, J% @% B4 m. g
/****************************************************************************/
$ z0 D' |) Q+ P- W% Q/*                                                                          */
6 s+ l, H3 v( _9 j" P  n/*              全局变量                                                    */
0 {5 R& l+ v) L1 E/*                                                                          */$ A% P5 w. y- f9 J
/****************************************************************************/* f" t  o! @  ^8 L
ECAPCONTEXT ECAPResult;  K1 r: {) n4 s! j) G" a1 u
* [& Y5 B! G8 e! u, {/ t
/****************************************************************************/
8 ?. d2 C. D! |7 z. q/*                                                                          */: ^7 a9 J$ J) }/ M0 e
/*              函数声明                                                    */
4 d' {& q  c0 [* D/*                                                                          */3 W5 i& O3 a  }7 ~6 u( y
/****************************************************************************/
, W" g- g% _5 f) L- U// 外设使能配置4 ?" M" y6 u( j, l9 t: m
void PSCInit(void);$ j4 v+ C* q, m4 X5 ~: Q9 O& D

' Q* Q6 ]! p8 M7 P( O  N// GPIO 管脚复用配置9 }& k+ S1 l# o6 N7 `5 L! ^/ E9 L
void GPIOBankPinMuxSet();
. F7 h- `2 V8 K, g- ]' {
' _, D3 B: Z' O6 ~  c3 j4 \0 ]& q// 产生波形
5 X1 @; p/ v/ Q) a2 ]0 x& V: }void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);) Y+ \3 n5 J/ k; Z
void ChopperWaveform(void);
- }7 P! d( |& U. T  s
( `! O# x, j- j- `: y$ v// ECAP初始化和读函数
- t& H) c. p& B, _6 j( h5 Yvoid ECAPInit(void);: j/ z) G! z' l$ {; K
unsigned int ECAPRead(void);, S6 t* x6 r- p) {* O- O4 T3 p. D4 I2 F

5 A( }- j: j: W5 r, g//ARM 中断初始化6 q) Q. Z' k4 Z; X$ F
void InterruptInit(void);
* z9 K; P* U( Q/ C
$ t- q' ]* |) k// PWM 中断初始化
% i0 x, M% U( [' Q* C; evoid PWMInterruptInit(void);
$ B; u# [* b& v# s% n8 |// 中断服务函数
9 q8 `0 G6 ^( _// PWM 事件: X' w) q0 ^# ^- h
void PWMEventIsr(void);
! F) I  C' w0 Y9 c" _// PWM 错误控制事件
. L6 i7 }# \& l* ]' Avoid PWMTZIsr(void);! d1 @* X' n- `* }, V
* H7 \9 ~  n* a  H! K* U
/****************************************************************************/; x" h/ \( n: c. L
/*                                                                          */% y  u# W6 e& P9 R& j
/*              主函数                                                      */* U3 v) g# y2 h4 b! x
/*                                                                          */
" E% x9 i; \8 ]; e' M/****************************************************************************/7 Z: P8 `% n+ r
int main(void)
( \5 ?7 T- \7 E2 m{
; A2 W. ]1 c* R5 ?. t+ X. P" F% ^        // 外设使能配置
( W; T  l' l2 I) k4 J! d1 R- H$ V        PSCInit();
) i4 V, K' M" x4 [* z( E, A
3 ~* q9 H- l  Y* ], R9 b5 Q        // 初始化串口终端 使用串口2' e& u1 _! s4 V. w& i
        UARTStdioInit();
# o! m! c3 a! |% C       
9 u9 ~% U+ b5 T        // GPIO 管脚复用配置- R" w/ o6 f3 b2 P1 W
        GPIOBankPinMuxSet();
1 Z( _( k7 M8 v9 q2 Q2 L& s  I0 Z4 d# V/ i( M) s' e5 O: }
        // ARM 中断初始化
' M5 T9 w0 L+ h        InterruptInit();
9 j+ _7 W1 M! g, ^8 M; r* d7 O! ?# Q- C3 j+ H' p: L
        // PWM 中断初始化
/ [  {. A" X+ o* F        PWMInterruptInit();8 @" F0 J- C$ c7 {4 ?# [9 U

/ ^* s1 E+ |8 K6 j" Q        unsigned char i;
) R8 E! l* y- ~, q1 r        unsigned int j;
* _. a  O6 Z: e) o2 y. k  A6 O3 h$ q* `
        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);/ @, T9 ]% \3 c* m: O( q3 U, n
        UARTPuts("------------------------------------------------------------\r\n", -1);
1 H2 U1 l- W+ l# S5 u        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);! U& e- g+ O- T
        // 产生波形3 Z% R1 A8 f2 x3 E: h' n
        PWM1ABasic(25000,50);
8 M# u2 _0 ]. c
2 n8 M" ~3 F7 {# B        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);" U+ A/ Y5 L9 Q  s4 Y6 Z9 w4 e
        UARTPuts("------------------------------------------------------------\r\n", -1);
. G  u: b: z6 U- ~$ t
# H# l% G$ h8 N( j2 B# t1 T2 [
: }7 J+ Z8 E( ^
* f5 \% k/ W3 |2 g* _- R( {, }        UARTPuts("------------------------------------------------------------\r\n", -1);
$ f* ?4 }/ Z1 k3 t2 q" v2 _        UARTPuts("                    C6748 ECAP Test\r\n", -1);& v' e1 @) ?9 o% p7 `( S1 j0 ^# f
        // ECAP 捕获初始化6 Q; J* ?( _! X4 k: N
        ECAPInit();# e/ L% a9 z# `# l3 L$ @' F0 t1 C
        UARTPuts("Initialize ECAP.......\r\n",-1);
9 E% C! S8 L# f, N5 {6 M        for(i=0;i<5;i++); _0 P9 s& m) P. E" M; K
        {6 }- R4 q$ O' q. {! ?. B, @
                    for(j=0x00FFFFFF;j>0;j--);            // 延时2 |( S3 D& O+ ~- |% ^
                    ECAPRead();
2 T+ b5 C" S& E1 g. H        }( C  G2 T/ x, i; `: Z/ b
        UARTPuts("\r\n",-1);& ~, H; i; P& ^6 c4 p) h9 v2 Y
        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);8 d, h: m% I) d1 v6 N
        UARTPuts("------------------------------------------------------------\r\n", -1);
* i) \+ X% C( M* s! }7 ?
8 x- I) `: O+ Y7 y  }$ |        // 主循环
9 X( i4 L! X" n: q9 q6 Q7 m        for(;;)
1 y+ M  p6 E) V% i; H        {
' U- |+ Q2 p+ E5 q2 D  I5 f/ i% ]7 t8 i! h! X# x1 S( N* W" v
        }
3 K. ]6 w8 Y. T# p3 A; s" \% W, S}2 S+ @$ M  C  T' x3 \/ _. r

& V, P2 `- [6 U, j, Q( h/****************************************************************************/
1 `2 g0 J3 A* T* E6 Q, |( R" B* _% U# i/*                                                                          */
7 {2 m/ T9 D' K5 v0 V/*              PSC 初始化                                                  */
. g  l8 |, j% o) j/*                                                                          */8 S8 A9 K! h. O9 ], D( @  Q. ~
/****************************************************************************/0 N" Y8 P5 Z  A3 @- F
void PSCInit(void), t6 k/ x4 N% @
{# C* o6 X5 ~8 c/ ]% q* i' _
        // 使能  EHRPWM 和 ECAP 模块, c- |( [0 Z/ g  s5 t% D
        // 对相应外设模块的使能也可以在 BootLoader 中完成1 K( ]) C0 ~' }) t
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
" U% `/ r7 [6 B" r$ g0 P    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);/ b: [  E* W: L6 b( X
}# i' r+ d3 D1 e' m8 ~  ^* q
' Z# u+ m0 T- o6 ]) s( P
/****************************************************************************/
* p$ q! E" C6 E" M1 _) z: X/*                                                                          */
3 w6 H8 z. K- E/*              GPIO 管脚复用配置                                           */
+ k) b- T7 E- R5 }8 T/*                                                                          */- f6 M' _) ^6 @& z, g- x+ n
/****************************************************************************/" i* Q/ r. r& \8 \. L( M  `
void GPIOBankPinMuxSet(void)
- ^: O; K* w( z7 Z3 b{1 M2 H. d0 W- E- Z  R
        EHRPWM1PinMuxSetup();# n$ h' D4 V1 g( V, Z- I
" {4 _; g' V3 g& ~, Y
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)
; T0 Z# w0 K# P7 e* C2 e        // 作为捕获功能时管脚方向为输入
" n0 ^8 A1 E; n) J. g) N6 H        // 作为辅助脉宽调制时管脚方向为输出9 h+ ^% a, q/ `7 Q$ ^, r
    // ECAP2 / APWM2
  }2 z: D' [' C  ^) q        ECAPPinMuxSetup(2);
; `  N* |, c5 [) i- _1 g5 B& ~# e# N4 y6 h1 m8 T5 u) c
        // ECAP2 / APWM2方向设置为输入  b4 o4 K: p- N! y
        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]& @4 e% |9 ~+ \) A8 l
}
' d! k% C4 Y) G+ {2 y9 X7 ^; Q* q/ X3 @" J6 q) B0 Z, a1 w
/****************************************************************************/  C5 J8 e' z, y! ]8 @
/*                                                                          */# x" q7 o7 U! Z: @) C/ V( a+ V
/*              PWM 输出波形                                                */
- }6 D% T. W( P) A/*                                                                          */
5 d, m0 M- G4 o# u5 ?/****************************************************************************/4 b6 Y3 X  ~& _! j2 W" y8 v# w
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)* c" g5 K, K5 e+ c. V
{
- [& W, y7 ~7 e; Q6 y    // 时间基准配置- Z1 L+ v1 X- I7 F
    // 时钟配置1 ?. U, d- U$ G
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);! o3 p( \" ]6 R4 x* Q

$ o; \0 Y1 y" S% m    // 配置周期3 N/ _$ b  l* A, C7 y0 k& m
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
1 j7 i+ L9 {/ B) k& ]                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);1 H: x( X1 \+ e+ ~: `
. j! y5 N0 g6 I4 Z, p7 f8 V: c
    // 禁用输入同步信号* q# p# V, b+ H5 m- E0 H' y/ E
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
) \6 n6 i3 w/ y, J: a: ?
( E1 \* }" w! ^( |( ?4 J    // 禁用输出同步信号
8 _- q) C0 B. D+ E    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
( I$ t+ H/ G( P+ z) \9 R* X, f) W5 ~
" a% i: \3 n+ }* D! D+ B, M    // 仿真(DEBUG)模式行为配置
+ ]: i: }/ \( j  ]9 }' p( U    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
, q0 n5 h% n9 Y! H# |
0 b% U6 y" u9 B; o, ?$ \7 C! l. F% R    // 配置计数比较器子模块7 `" `2 J$ Z4 @
    // 加载比较器 A 值
: V5 g) u0 H& Z. r, k, W" R8 M, h    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
% j: B* \4 V, m/ `- e7 m8 K                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);; M; h$ R% |2 d8 m$ |. q6 d+ l
7 R/ Q+ R5 S7 ]  I
    // 加载比较器 B 值
' b( @7 Z7 P5 G6 @' N    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
* q, m* a' r/ p                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);. d  k& K& |. D. ~- M. A' J

6 q/ t) W# `$ H2 `0 e6 I( o2 j  X    // 功能限定配置(输出引脚触发方式设定)) d) u# p  l# V0 k+ N( k( R
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
' m8 E' y- O! m6 n* N, t2 H6 y    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
0 _2 ~$ g9 A& l, b$ B, q* f7 M                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
% I# p) u2 K: z+ X% L8 Y/ U+ ?4 m                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);9 G& z& q3 V7 |/ J6 ~' ?

' L* E1 n; r) w6 P' h. ]    // 禁用(旁路,信号直接输出到斩波子模块)死区模块
3 E% m% s0 O7 @! K5 l    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
1 l' \$ c( H( K5 _- j% j6 K; m2 L3 l+ ?* t0 S$ b- b
    // 禁用斩波子模块
( `. [0 K" v1 O. x! ~    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
. D8 a: ^0 T/ i# S+ B$ E6 d" F" g- r: o7 [) `- d, n8 Y
    // 禁用错误控制事件6 M5 X8 i8 L! e, h( s2 s' o
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
0 w4 j8 x% J- j+ {    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);3 a  o" a0 L, }) R, T5 H
9 O8 p) _, B' X% V# z' `% H
    // 事件触发配置
1 y6 V( i! N$ @% z0 K    // 每三次事件发生产生中断
# P5 ]' l9 o. F- l" D( h' t    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);& c- g# ?, y& Q% v) j
    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
! y2 u' H: `7 }6 R9 n    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);$ g1 v4 |% I  h5 t2 B. d. ^
    // 使能中断
7 U" f* u7 N% b, J, w: _    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);0 v7 G) Q8 X7 G- P% W

( N, K* n6 w. `& d1 s8 ^7 z1 y    // 禁用高精度子模块! D$ n! P. O( M! i; m3 F. c1 p, j0 w
    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);9 f1 A/ P; x" n' Y7 ?6 I+ J; x, h

' w# C" }7 K2 M9 _! Z3 ]+ `# O    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
) ~* S$ k0 k/ {5 q* N}
! R6 e- p+ a; R6 M
2 Q( z9 e8 B0 l1 ^: y3 `void ChopperWaveform(void)' T3 U8 b' y' q$ }" q7 `9 ~
{
: U* c' y# |6 v5 d, h5 h    // 50% 占空比" N8 }3 w, r4 E- G) A
    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
; ?/ R1 {% n. E    // 4 分频
8 o: ?+ P. q  h0 Y    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
/ k% ^: W. S9 F$ k$ W    // 单个脉冲宽度
6 F' _: N+ l# X- \# ^    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);5 E7 R; g5 _: A% _; Z
    // 使能斩波子模块
- k% _$ U! f9 a! a: H' i  A    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);/ j# ^5 @  @. j8 a  z" S2 |
}
$ V. e  g' c$ `9 h2 J2 M$ L* d$ `/ C
/****************************************************************************/
5 B/ i/ H7 s  O/*                                                                          */
" s  a( Z' G  }! L; K) T, T/*              PWM 中断初始化                                              */
* G" t: A+ d7 u8 r/*                                                                          */
" r. s- M" [; Z/****************************************************************************/
4 S( `. M* m  e) X! lvoid PWMInterruptInit(void)
2 f* t( ]) M0 ~# J5 h, h$ H% n0 t{
8 d$ Q. U$ M1 ?        // 注册中断服务函数+ N; V' x$ p5 ], ]# j; f* U
        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
7 L! D( b, O) V; S+ ^        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);8 T! C6 s) ?  a

1 m- o0 X3 V; {' n$ G        // 映射中断4 X  V( a* C0 {7 k
        IntChannelSet(SYS_INT_EHRPWM1, 2);! ~- [- K2 Q5 T
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
& z- O2 Z4 U9 z' n; j3 M7 y
6 @2 T2 g; ^/ B& Y( h. N        // 使能中断
" J1 n+ U  E3 |' V$ ?. Q2 t5 y        IntSystemEnable(SYS_INT_EHRPWM1);
# m  b  V8 B! S" t' A( ?+ t0 x        IntSystemEnable(SYS_INT_EHRPWM1TZ);
' s2 i) W5 u8 R, @}5 z4 q( o' t) [9 P% {1 ]
+ C2 ?* ]7 u; f4 L
/****************************************************************************/  H8 k: C( M6 u; q; t
/*                                                                          */; E; Z% {" S" m/ q3 N/ ?$ l
/*              ARM 中断初始化                                              */
  n: k' I5 |5 r& N* \  }/*                                                                          */
4 O) _1 W3 P% w/****************************************************************************/
/ z/ |% c* |! N' m7 gvoid InterruptInit(void)
# h% x! k0 Y) l" `, j{
& x: u  y3 e" D& L  Q/ _" {        // 初始化 ARM 中断控制器
: f1 _+ a* Z2 O$ W7 S% b        IntAINTCInit();. B; L/ w; q: {
5 ~2 r! s; s  _( g
        // 使能 IRQ(CPSR)
6 m/ x2 u7 c6 H; _  }- [- {        IntMasterIRQEnable();
7 g+ S# X; b4 i4 m" Y5 [( k+ {0 V, c, f
        // 使能中断(AINTC GER)
: B8 U4 T3 [& L        IntGlobalEnable();
3 O7 S% ?& V' ?4 Z8 ?% g% l3 A6 V3 R  f# B+ N
        // 使能中断(AINTC HIER)
- U. n4 l+ ?7 U9 r! H" _        IntIRQEnable();: V) W- {0 N4 C9 S! v, }1 |
}. W) Q3 ^5 |6 h7 T6 D
  a+ T! ]; {! V# `$ u' i4 S2 B
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
; [2 Z: j1 k& v" g0 K; ~: P/*                                                                          *// C& z$ e) F4 K* D; i0 q( N/ [
/*              中断服务函数                                                */4 j( c; ~: F/ U7 H9 ~
/*                                                                          */
& U# P8 L, x8 K& }5 i/****************************************************************************/
' K8 Q) e5 I8 Svoid PWMEventIsr(void)4 ?9 c- R6 e0 k* y
{7 v7 v& h1 c# d2 ~, x& Y
        IntSystemStatusClear(SYS_INT_EHRPWM1);4 |9 J$ T8 A- X
9 D8 t/ R" F$ Y' |) N3 p8 l
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
+ ^- F  ^% Y% ^}
& v8 P9 \3 Y9 b1 I5 w7 U; i0 F" O# B" v7 P3 L7 g' G
void PWMTZIsr(void)
  T' }* z1 _+ t/ y{) ?, f+ v# T9 c0 R
        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);- c$ [5 ~# n! r( J3 l- p7 f# E% h2 j

. s5 W' }) X# M    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
. O. i4 V9 M# }/ K8 \- v+ [}. t  N) i2 w7 a" \# ]! x& M& W% v

7 L. r5 V4 b, @9 {5 ^; U3 _/****************************************************************************/
# p1 L: o$ X6 @" E/*                                                                          */+ r, W; G2 {: P3 c4 ^/ p
/*              初始化捕获模块                                              */5 E6 A, y& z5 R1 ]9 U5 r
/*                                                                          */
, W; G7 v+ D) J  B8 v) ?/****************************************************************************/7 R$ {7 c+ }! Q9 U" }; L
void ECAPInit(void)
* D( c' x  O0 O+ F$ M{7 G% N2 r+ e$ a8 G6 G# b: y
        /*-----设置 ECCTL1-----*/) }2 g$ g  r; G0 l1 g
        // 使能CAP寄存器装载
) Z' y, a5 h7 P  v        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);* V7 c1 A( E& z& J4 ~' r  L
        // 设置预分频值.
4 Y# |* n, n; c        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
) Z. W3 j2 F0 j0 a1 `$ {. w        // 上升沿触发捕获事件( ^/ j9 U3 c# ~4 g' r) V
        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);4 O8 f7 l8 b4 e0 ^1 u+ i5 B4 A
        // 输入捕获后重新装载计数器值.
4 N# v6 j2 B2 k9 s9 X        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);$ ?+ \# I4 d2 F) _3 M- R
( l% A( s2 U+ ]% L7 x+ J
        /*-----设置 ECCTL2-----*/
7 C) I: n' O8 A, t) k" c        // 连续模式1 }/ g# Y+ ~2 A' ^4 `
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);' \3 d( K2 w* n" T
        // ECAP计数器TSCTR持续计数
7 H" c( R- ]) d6 D5 G% r1 v- _        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
, P$ V9 P- j6 k- S; U# }        // 禁用同步输出和同步输入5 e% z3 x  \0 Z' P& m1 `" G
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);+ i* P8 I" ~8 q1 y
        // 配置 ECAP 2 为 CAPTURE 模式
9 N; R/ c7 Z2 r, h        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
+ @$ M. [0 N( _" V8 R  _  V7 w5 E( u  K
        // 使能中断% W* k3 f0 b& O% b6 l4 ~5 J
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
- W& V* R9 [9 v. E. H7 o' O}  K: V9 E# L' Z% i

( ?% `5 n% x# M1 t7 I5 O0 b/****************************************************************************/4 R- d" C, l' j8 Z$ S1 l9 I
/*                                                                          */
' W4 |$ o- r' a  |1 K# p/*              取得捕获结果                                                */
5 }7 s3 H2 s2 `' U8 s/ |( T5 ~/*                                                                          */
( l" e' L! t3 L$ R6 A% W/****************************************************************************/1 K  s, Q- u5 W$ K+ ?; V
unsigned int ECAPRead(void)
% K7 D3 D6 I  ?  _& ^{( ~/ h+ l& \, \* x8 K( M( F
        unsigned int capvalue;
. H6 r: s% Z9 @        unsigned long frequency;
# }+ N0 \) i* k$ J/ A
. b( r2 I2 ]& ?" S        // Event1 中断标志
& v* ~' A% a. N7 W        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))
- K6 p. b( M  u) l: o        {
' W2 w; S+ v3 j, Z                // 取得捕获计数/ C* y# ~* r4 Y: {' c5 r6 M
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
. ]/ g$ [9 m2 s7 T  F                capvalue = ECAPResult.cap1;
8 ~: i& r! ]/ U7 p
! X: Y  \8 p5 g4 c% }& G6 P6 `                // CAPTRUE 模块 228M 时钟主频  h% b7 h7 W" \' L1 D" t% Q
                frequency  =  228000000/capvalue;: _& x5 C; @& H! k0 n
                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);/ @) T! ~! [# ~7 `; o# x
# r8 t- n3 N$ J/ \, g4 h
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);2 k( ]' I6 m) [* Z8 Q
//                IntEventClear(SYS_INT_ECAP2);
1 y, c9 y: R! f( n7 Z        }+ J  u3 J: o1 V% l+ {( q: }5 b/ d
        return frequency;" A( s! `* Z. J1 i% p* r7 C
}
9 {7 E7 @: I5 w8 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波。我们有相关例程,请参考。+ ^. A  X% A& H- U! _. B

本帖子中包含更多资源

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

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-27 06:02 , Processed in 0.045746 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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