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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
沙发
 楼主| 发表于 2018-10-30 17:00:28 | 只看该作者
/****************************************************************************/5 q' m: O/ I8 v: x6 P2 C
/*                                                                          */5 Z# ]6 q/ x2 ]# Z: P/ C
/*              宏定义                                                      */
$ y6 `+ ?6 W, |' G+ p/ I" I9 h/*                                                                          */
+ {7 b8 i8 i" }/****************************************************************************/
5 ]" i$ S' L. ~/ b0 S// 软件断点
) O# `: g$ K- d#define SW_BREAKPOINT     asm(" SWBP 0 ");9 S/ `2 W& [7 o5 H. r* \# Q
( A$ _# Q( h6 G# o
// 时钟分频. F1 r: ^* x3 J8 y; d& H
#define CLOCK_DIV_VAL     228' r. k/ O2 L0 r$ L' D) G

( W, i5 A, H; [# z3 V) R$ \* S/****************************************************************************/
' x6 j& r! ~: v/*                                                                          */; W" t( S2 Y5 _) K) z5 j
/*              全局变量                                                    */  @  c- E% H) z; D- z3 w) h% {
/*                                                                          */
8 d2 S2 \# |; J* C8 k* l8 a/****************************************************************************/
* j+ p, _* }2 w" d2 w! rECAPCONTEXT ECAPResult;
% c. h/ l3 W. o. b
( l7 h  U5 U" _% i; Z1 J: ~' q1 j/****************************************************************************/! t5 I, c' `9 ~! ^9 ?
/*                                                                          */, Z& X" `! t0 K' H9 W) D% P! s
/*              函数声明                                                    */. O# I0 ?8 F) v' A5 s
/*                                                                          */& X' O% B7 U' l% J" P. V0 `
/****************************************************************************/# c* L$ {" B& H, K
// 外设使能配置
7 W1 I6 c3 j- ~void PSCInit(void);2 \) }3 X% ~. \" e1 X9 R2 Q
5 \1 a: ^2 R% \6 ]0 s& ]
// GPIO 管脚复用配置  D7 f4 `3 H/ Y
void GPIOBankPinMuxSet();$ l7 `" z- x3 K

' w/ c4 e' o% H$ `9 _/ W6 S9 T# A// 产生波形
; y8 a8 i0 }: l' ^5 dvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
" n& A) B+ j, Y% M! F9 U6 \void ChopperWaveform(void);$ Y& V: Q; p  J: M! e  @3 R

+ q; i$ j) v) a// ECAP初始化和读函数
* ]% A0 `6 M+ ^. e  Y# R& \3 J7 v& ^: pvoid ECAPInit(void);7 G4 D8 V$ _. M8 m
unsigned int ECAPRead(void);
# F7 t7 e! X: s& e* L+ \8 i  Y
//ARM 中断初始化2 d  z3 p8 A0 c8 r
void InterruptInit(void);! B) V  X2 G) E9 m/ B

' \6 W6 o. u0 w7 W/ V/ Z" l5 {* y2 Q// PWM 中断初始化
% X5 k, ?3 t( u# C% d: v' ~void PWMInterruptInit(void);  i- c/ J. @; `1 X# V
// 中断服务函数1 Z7 A/ n; p7 j! E4 q# u! ~" u
// PWM 事件
  b6 K6 s3 i3 c6 X2 {" P/ H# xvoid PWMEventIsr(void);5 C2 R# M! i& U
// PWM 错误控制事件
  g: m4 K7 `8 z* m0 G: `void PWMTZIsr(void);) _+ i0 _; h- N% J

1 v/ `' z  Q! [# G8 A/****************************************************************************/
; P" q8 V: x6 Z/ r" j  k% m/*                                                                          */
7 N7 x% F3 z. F" l$ ]4 ^6 Y5 M7 C% s/*              主函数                                                      */% P: `3 W9 g. m, [1 n" y
/*                                                                          */
" _- H# p6 B& }9 Z/****************************************************************************/
) e$ O6 }3 M: [$ Y0 }4 `( ^int main(void)
, [5 l% P. ~( ~- ]% _- G{* n3 ^( c  k) |9 q; X
        // 外设使能配置/ V- ]4 y  \, P" o, ^, _3 r5 Y
        PSCInit();
* j% h% n) J) ?
6 S9 @6 }+ Y$ ^) y8 k/ P        // 初始化串口终端 使用串口2
: N1 h# X9 k0 y        UARTStdioInit();
$ W) o: ]- j4 @' E- A  C: i6 T        5 j0 D  B2 @# F" T4 |4 b
        // GPIO 管脚复用配置5 P) H. f3 X' B' q0 W2 R0 {0 |6 t8 i
        GPIOBankPinMuxSet();
1 y2 b) q, V, H, n
; i7 ?' Z" h. q" ^5 J. ?' }# \' |        // ARM 中断初始化
- Y# g" }- b. C        InterruptInit();- }3 J, ]4 Q! R
1 `( y  @' R7 A% c
        // PWM 中断初始化* J+ ]) w! M/ e
        PWMInterruptInit();
$ {4 C- U9 Y5 _5 I2 u: A) G3 c8 p5 d3 I( y
        unsigned char i;
& ^3 H6 j; X3 T: Y        unsigned int j;2 A/ E0 v' e3 {* @: i( B$ G: P9 t9 I

% k, s6 \0 }& ~% J3 r( x# |+ a        UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);6 _) N" T% x$ J& C' e
        UARTPuts("------------------------------------------------------------\r\n", -1);
# W4 S3 ?9 i6 W) f, D  P4 o        UARTPuts("                    C6748 PWM Test\r\n\r\n", -1);
" ?8 R9 u& t0 }: m3 c7 S/ _/ k        // 产生波形
* _3 y. a0 b6 Z. z8 N$ G: ?        PWM1ABasic(25000,50);$ I3 i8 C5 \7 G4 h
0 V; j( q) N6 _( g) w! b) U9 ^! Y
        UARTPuts("                    C6748 PWM Test Over!\r\n",-1);
3 f, }  K2 d4 g# N) r        UARTPuts("------------------------------------------------------------\r\n", -1);3 v! d/ l% e# Q' s8 |. ], m) ]
. V: K: W% C. q$ D- ]% T

) ~! S- G  o# b0 D. K6 g
( k, \6 q+ |/ I" z& h7 F        UARTPuts("------------------------------------------------------------\r\n", -1);
1 m2 F$ I+ c3 y5 J/ _* r  i( _% L        UARTPuts("                    C6748 ECAP Test\r\n", -1);7 }2 h: m* C, ]  y$ R9 y' s- h+ l: O
        // ECAP 捕获初始化- Y% I5 q: P* Q- R+ P
        ECAPInit();
% }7 [% z4 _  d# {/ D, u: }        UARTPuts("Initialize ECAP.......\r\n",-1);# l/ `7 u. V# d! q8 d3 `; W1 y
        for(i=0;i<5;i++)
( E5 h# g( M- K' i' c        {) {3 r% X/ H( O
                    for(j=0x00FFFFFF;j>0;j--);            // 延时! ?" Z8 i: Z2 \& R; L3 [
                    ECAPRead();
+ W) s+ p; B7 C) |; u) G  X3 Q        }
2 B1 {$ Q1 S' @7 ^. b6 E        UARTPuts("\r\n",-1);
) x1 d$ m7 o8 E5 i; N        UARTPuts("                    C6748 ECAP Test Over!\r\n",-1);& V6 y" ~+ j# ]' E( h3 G/ H2 P
        UARTPuts("------------------------------------------------------------\r\n", -1);) l3 \% l: B! @
3 ^( K1 {3 N: f/ e% |% s
        // 主循环6 @. l) L9 Z1 z5 I- r  |" ], A
        for(;;)
2 O/ }3 ]6 q3 S+ b  r& O0 m        {+ u, ]' h5 m, O' i) b9 J

3 ]7 _# W- W  @: E, s        }
& L! }$ B0 h) _9 a}, D) o; C$ i! g5 R

  W: O! @) g* E7 \9 v1 y/****************************************************************************/
# y# i1 J7 ]* U/ [8 ~2 K; H/*                                                                          */
; _  ^) C6 V* ~9 I. v/*              PSC 初始化                                                  */9 {! U" ^, h( |1 m; Z# L( w6 i
/*                                                                          */
0 L4 Z, H" _* B+ i+ s& t+ b/****************************************************************************/
+ C: a, |. h5 evoid PSCInit(void)
# i9 q0 i; t# B% V; G{
6 u: ]: v$ w0 a! }        // 使能  EHRPWM 和 ECAP 模块, X$ L% D4 N2 Q" ]2 m7 h
        // 对相应外设模块的使能也可以在 BootLoader 中完成2 z4 a2 X; l- I& {
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
% ]* R$ b1 H% z    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
) q5 _$ o9 ?6 g7 k' `! r) `& g* @}
% @4 e+ V9 [; i/ `% e3 N' Z: ]" j0 I# [8 x3 T" J' y; v  e' O
/****************************************************************************/
9 S3 r0 u3 C) q/ i/*                                                                          */
1 j' L" v3 B8 r) P# h& d5 T1 N/*              GPIO 管脚复用配置                                           */
% t* K6 k$ T4 R5 A" x; R: M/*                                                                          */# A! c2 p% o- Z& K& W7 x( t
/****************************************************************************/# X# @& G! Q  n2 j
void GPIOBankPinMuxSet(void)
2 g/ a5 U  A8 u( o0 ?& C5 x! l{
, S) l9 Y( O& N: y6 f        EHRPWM1PinMuxSetup();
5 v5 \$ K: ?( A% Y7 [5 O4 A1 |6 X4 m& c1 c: p, Z; l" q3 u
        // OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)( Q( I, \4 D# ~( E# V
        // 作为捕获功能时管脚方向为输入3 {4 g5 T& f1 }( a. P
        // 作为辅助脉宽调制时管脚方向为输出
" {+ a6 R, p  D& |6 a+ m1 w    // ECAP2 / APWM2
2 ^! W, Q+ R4 k8 A( g        ECAPPinMuxSetup(2);% E5 k5 n4 Y' ?1 g
: s' D2 e. J; ?2 W0 R+ J( c
        // ECAP2 / APWM2方向设置为输入
, d" G" l+ B: B5 o. ]! {% r- D        GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT);     //  GPIO0[7]
8 X/ G$ n, L/ C}; O! m  o- ~, @( A( l6 K+ K, R/ B5 k" B
4 g9 H; E! h1 ]- o  ~7 y
/****************************************************************************/" `8 X3 h8 d; Q+ o2 H
/*                                                                          */
6 H5 d( |: J- o2 s! w3 p/*              PWM 输出波形                                                */& \& i8 _% R9 c, e! G
/*                                                                          */
3 U- Z9 d' G4 T- O0 r& S1 O/****************************************************************************/4 q3 Z8 a3 j' n/ n2 Q# G
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)" h8 }% n9 [( K
{5 e6 y' g. w6 c3 ~# W# j
    // 时间基准配置
( M' t( u0 N/ P1 [( \    // 时钟配置+ l6 ?# }/ y: P  a
    EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);2 }" O+ M2 o' R- B

  _5 R$ i: s% M$ v9 R$ q8 h    // 配置周期  {# z& i( m) X; ~) R+ R( x7 N" V
    EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
2 `& |" V# {( Z' m5 l) q$ ]                    pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);" w. b$ S( T# z* V5 C# g+ ~

  w. p; @1 J/ k3 @    // 禁用输入同步信号6 |6 [% U& C( ?% P: S0 U
    EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);1 L6 s: |( `3 R

  Q0 X6 J0 R6 |* r7 K    // 禁用输出同步信号
- X! M) N: f% N  C    EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
# d% b. h$ u- c/ V
1 ^7 v1 i" M6 z" K8 B$ Z/ g    // 仿真(DEBUG)模式行为配置
8 R% r) x. a4 |7 K    EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
( i( a" F8 T; W% |: |0 e/ m
0 ]  d# [0 g9 b8 f9 k  w1 V& A    // 配置计数比较器子模块
: b# z5 `5 t! [' z  j    // 加载比较器 A 值7 t4 `# x4 Q8 H8 T" f5 e
    EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
8 z1 C6 v( y+ `$ r7 d7 d/ B, P                   EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);3 o$ g! P+ |1 q

& a2 o% K7 m6 w0 W7 y2 D    // 加载比较器 B 值
$ N; Y4 {) U  c2 H. K& x; C    EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
# u, J# R) x8 ^3 ~' n                   EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);$ k3 H& n4 L" t) J! j4 A5 \

2 f1 L: I$ Q2 h! ^    // 功能限定配置(输出引脚触发方式设定). B( M) _  ]; L: I6 D( K- N
    // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
- E( F; U. _) t& k$ n    EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
( R! `: J" n8 c$ ?                EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
* j) l2 A( [' F$ H  |( @                EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);( W% ]8 N  T6 }- u8 h* B

3 R$ J* z6 G0 T; z3 c/ z( U    // 禁用(旁路,信号直接输出到斩波子模块)死区模块! V" O. L4 {$ L4 C$ Y
    EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
) ^- z+ i( ?8 Z7 Z  c* P8 C2 f1 ]- V% i" B
    // 禁用斩波子模块
& l2 t: B" B. f1 T/ `9 G- y, S/ _( c6 W    EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);: d& h2 q) G: \# _
5 t1 E$ T2 @5 w. a
    // 禁用错误控制事件. H8 P' s/ z% t
    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
7 o0 s9 G3 F! ^3 |& {/ ?: b' }1 ]6 m    EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
3 ]* J, k0 V. M  g7 g6 R- r6 a
/ g5 o9 r. r, N( [' M6 M: G    // 事件触发配置
9 u1 S$ X; r+ G0 J7 D$ ]    // 每三次事件发生产生中断
( }# v; W2 n1 ^8 t* P3 |/ l. u! a    EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
+ t+ ~# r- n+ ?+ Z! \" d    // 时间基准计数等于有效计数比较寄存器 B 值 产生事件5 I0 w; a& a- C
    EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
# g- `* R& Q7 C1 e5 e    // 使能中断
& ~+ ?, u1 w- H  ?7 y    EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);8 k1 O8 X( F' N' o' `: A2 Y9 Z

1 r, M. D4 ]; z6 r0 V9 s" ?    // 禁用高精度子模块
$ |; \. C; q. i5 _0 l& L    EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
; T8 Q: n4 J  P, B( l1 d# H! G0 ?/ k% P/ }$ ?  _! ^8 V1 O! _
    UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);
1 N0 u% R3 N! O5 ^4 Z, g}: U" ]7 x5 d1 {5 @- e3 J

2 D& |+ {6 @* n" W0 ~. ~) Gvoid ChopperWaveform(void)1 o. v$ f3 ^- T& ~
{2 x: a# Y4 d; ^* E0 l; {. m! ?
    // 50% 占空比
% c* Z% W0 Y' b8 M, v/ `# {    EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);/ Y9 E( s$ n9 t! A# w) {9 _
    // 4 分频
3 [# A) N# G2 d& y; q    EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
" ~. V, }3 L4 v% |9 n7 W, T* b: S    // 单个脉冲宽度
+ l3 z+ r+ F5 N0 P; {' s    EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);
& Q7 f' |1 }+ K! t* v    // 使能斩波子模块
* l+ l* G6 L8 Z    EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);) V- O. {8 f/ F  Z
}
) e) Y5 u0 `: k$ N0 Q( ^
: v3 {* v/ y! d3 m6 }/****************************************************************************/6 z3 H) C8 s* f: N" v& u$ L
/*                                                                          */# \" L. B! u7 c6 Y
/*              PWM 中断初始化                                              */: B' X! s* I" x* O* d- M% k6 P
/*                                                                          */8 W' t8 T/ E; p5 @, t5 l" `4 Q
/****************************************************************************/# O5 ?9 t3 ]5 W
void PWMInterruptInit(void)
' R( B( o6 D; I{: j! ?. C4 w1 l6 o: q' f
        // 注册中断服务函数
% j8 {2 D# J% @8 b        IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);" j7 R' D6 ~: t
        IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);* g2 C4 ]5 n2 G, W2 b
: S, W9 b1 s/ w( ?
        // 映射中断
$ A7 Z( i2 a" b$ A- J/ R        IntChannelSet(SYS_INT_EHRPWM1, 2);/ a8 \/ H- }, `% e; l8 x' A0 m& B
        IntChannelSet(SYS_INT_EHRPWM1TZ, 3);
$ K: i, G3 D$ F2 P) \, j& }7 w/ C6 j* l9 L& }; ~) f2 I
        // 使能中断
7 `# m7 M/ j; s  ]        IntSystemEnable(SYS_INT_EHRPWM1);
# X, W5 P6 v/ O3 L5 C, ]        IntSystemEnable(SYS_INT_EHRPWM1TZ);
3 R9 |4 e7 l# u5 b7 c( U: y! Z}& Z0 H3 T6 L! V# @8 e& u

) T, e* b9 X. F" e  k' G9 t/****************************************************************************/
) p# F/ `0 k1 p5 K: r0 E/*                                                                          */
3 r' }; X+ e5 Q; V+ F/*              ARM 中断初始化                                              */
6 }7 o8 ~  o3 j. u: U7 Z/*                                                                          */( i! [# q- O9 c
/****************************************************************************/
  d! H1 c# ?3 E9 u& M4 ovoid InterruptInit(void)
: l- ?4 |+ B6 _( g2 S& s{: O. Z2 L: f  H9 A" i
        // 初始化 ARM 中断控制器) Q$ Q: Y! ?* U, \  J( e
        IntAINTCInit();
; {6 W4 o% x: s! _$ g( q# F: ~6 P' x0 O" l! j
        // 使能 IRQ(CPSR)- a1 U: {7 O9 @# m
        IntMasterIRQEnable();
# U& A4 ]: d5 Z9 g  D* l0 ?1 n
' y8 x1 @8 w4 b4 N, ~: s3 G* ]        // 使能中断(AINTC GER)
! V, ]/ E! S+ C4 d! {* E3 s        IntGlobalEnable();. k+ @5 p5 G( J3 T: u- C
$ S0 T- O& ]- M, i5 @
        // 使能中断(AINTC HIER)
% {1 ~+ }7 O0 J( \6 t        IntIRQEnable();
  M; p1 m& Q, L' U8 r}4 A: g% _8 |! F3 I- }' F

8 x8 K6 C! ]# I
回复 支持 反对

使用道具 举报

28

主题

45

帖子

1340

积分

金牌会员

Rank: 6Rank: 6

积分
1340
板凳
 楼主| 发表于 2018-10-30 17:03:18 | 只看该作者
/****************************************************************************/
8 G4 E! q) h% A/*                                                                          */  W% m/ Q- ?7 M* i$ I
/*              中断服务函数                                                */2 l" @( H$ i1 z* ^/ i: i7 ^
/*                                                                          */) a: E2 J* L8 m8 d+ q& P
/****************************************************************************/
7 s' R7 q' s/ ?void PWMEventIsr(void)' E5 K- T6 [! e% u; B3 F
{
% ?5 m1 {" o0 P1 V        IntSystemStatusClear(SYS_INT_EHRPWM1);  \8 f4 g# E% Q/ B
  {, X* E* u* p/ u$ _
    EHRPWMETIntClear(SOC_EHRPWM_1_REGS);
/ v; }% I! p3 M. ^& t0 X}
5 w- W) _9 H2 I9 A; x2 ^
+ ^# G. g# @* _; t2 h% Pvoid PWMTZIsr(void)
3 i, h: t( N+ u! f/ I' Q& Y{
! s2 O8 ?2 D$ B3 B8 e        IntSystemStatusClear(SYS_INT_EHRPWM1TZ);  _# w; s2 ]2 h3 I8 t
, _: b- _! S9 K. z. [. o# Y
    EHRPWMTZFlagClear(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE_CLEAR);
! c, L6 e0 {7 C. J}: p' j2 _* _9 [# n+ m( A/ ?! }5 i

& S( [  _6 Y  @" f- Y2 q/****************************************************************************// H" K6 F' s0 V: y) O
/*                                                                          */
8 Y& A# c& f7 {- m/*              初始化捕获模块                                              */6 y  ^1 o0 k1 ^( [7 e6 u3 G
/*                                                                          */& F+ o$ d; o- x% l2 X" u
/****************************************************************************/0 X/ S2 E( ~  a# x! ~
void ECAPInit(void)
9 D& E4 d5 D- J) j# a{
3 ^1 O5 j  W3 W- k; X  j        /*-----设置 ECCTL1-----*/
; ?& w; W( o4 C# F+ ]/ |$ _/ _* h        // 使能CAP寄存器装载
7 j" d. g. u( L- b        ECAPCaptureLoadingEnable(SOC_ECAP_2_REGS);
9 q0 s5 V$ r) L+ F& I8 W8 O- n        // 设置预分频值.5 b0 d: ]" L: z4 |. Z. g- H8 k
        ECAPPrescaleConfig(SOC_ECAP_2_REGS, 0);
4 z* B+ z# P7 [5 T  d8 c# G1 z3 K        // 上升沿触发捕获事件
3 C6 y  W, J* m( |+ V1 D        ECAPCapeEvtPolarityConfig(SOC_ECAP_2_REGS, 0,0,0,0);
' X/ e6 c$ b% t& i3 H: q) B        // 输入捕获后重新装载计数器值.
/ Y. b% [' o. {& M7 w        ECAPCaptureEvtCntrRstConfig(SOC_ECAP_2_REGS, 1,1,1,1);
; \) c0 a8 V) \% x% F. E5 S/ K" w* P3 `9 W, g5 A6 d2 K
        /*-----设置 ECCTL2-----*/, a2 Y. m( R9 v* o8 Y) Q
        // 连续模式" g& P  o- u6 [1 G
        ECAPContinousModeConfig(SOC_ECAP_2_REGS);
4 A4 M$ _* F) S0 k! ]6 J        // ECAP计数器TSCTR持续计数
- b2 w) G1 x* i        ECAPCounterControl(SOC_ECAP_2_REGS,ECAP_COUNTER_FREE_RUNNING);
/ m9 i' [2 |8 c1 @! B        // 禁用同步输出和同步输入. a: x0 Y! I$ M% i: E
        ECAPSyncInOutSelect(SOC_ECAP_2_REGS, ECAP_SYNC_IN_DISABLE,ECAP_SYNC_OUT_DISABLE);
6 T& Q, X$ _# y: e        // 配置 ECAP 2 为 CAPTURE 模式
. R, L  X; H1 }; M. [* O1 D& C5 u! j        ECAPOperatingModeSelect(SOC_ECAP_2_REGS, ECAP_CAPTURE_MODE);
; E( t; I$ K/ A) l2 |0 q9 X/ T$ r  v! v) ?( [  T+ G" j
        // 使能中断. u1 p# V& |: D. q5 J. n
//        ECAPIntEnable(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1|ECAP_CEVT2_INT|ECAP_CEVT3_INT|ECAP_CEVT4_INT);
1 j2 o& Q8 p- |}
8 F, V* U2 r* H" H* m/ |" J3 M+ t4 B; V# M
/****************************************************************************/) X9 N' }- t# C: `! S0 J
/*                                                                          */# v9 M7 E# E% H8 P' l3 A1 _9 H( Q
/*              取得捕获结果                                                */
6 ?- t0 Q" X! C1 a8 C5 K/*                                                                          */
4 T6 C$ i9 s! w) ?* c/****************************************************************************/
! F3 t- \* S* [7 v9 e) u& P3 munsigned int ECAPRead(void)' y) t# o( ]2 Y: I5 ?) G% P
{2 N! ?! ]4 o! i* k: t; ]
        unsigned int capvalue;
, h. y* E1 D- x4 s  U& g        unsigned long frequency;- i: D0 O* P" j; R  G% }4 {$ Z
* S: O3 ]3 |4 _
        // Event1 中断标志+ `  Y# r8 e* W. T7 _/ P2 U
        if(ECAPIntStatus(SOC_ECAP_2_REGS, ECAP_CEVT1_INT))1 G4 W# D7 c, |, W5 M, H/ {
        {$ I; m1 `- j  K- u) Z/ S
                // 取得捕获计数) Y. {5 H; @: P; J" h% s
                EcapContextSave(SOC_ECAP_2_REGS,0,&ECAPResult);
+ K% @: h/ B7 i! K                capvalue = ECAPResult.cap1;
! L# m! T" \9 H, H
: M6 N5 j4 q* ]1 T2 N                // CAPTRUE 模块 228M 时钟主频
% Z/ P( S" Z% n# z! y+ w/ k/ h                frequency  =  228000000/capvalue;
" @& ^! \. m  M3 ~$ a                UARTprintf("ECAPRead:frequency = %d\r\n",frequency);
2 |3 t! W" r" a. Y& \' J8 j, P+ _/ c- i
                ECAPIntStatusClear(SOC_ECAP_2_REGS, ECAP_ECEINT_CEVT1);$ W' P/ s- E* q  t, r# O
//                IntEventClear(SYS_INT_ECAP2);4 y! s9 k9 ]) G. g4 i- m  {
        }! P2 w% ^8 y7 V1 x
        return frequency;
& O( R& ^. P9 q5 X4 o+ o}- a8 B5 b4 d2 A; x$ L& o' H: W
回复 支持 反对

使用道具 举报

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波。我们有相关例程,请参考。
' x9 V: `6 C9 f" w% g

本帖子中包含更多资源

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

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-5-11 22:34 , Processed in 0.046068 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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