|
|
沙发

楼主 |
发表于 2018-10-30 17:00:28
|
只看该作者
/****************************************************************************/
* }/ A0 j! O) Y, h/* */( v1 O m2 `9 f) n7 _# T
/* 宏定义 */
4 W; m' B6 k! ]1 R. i1 e/ V* x8 [/* */7 j* A. t2 }1 z+ U% o% j' w
/****************************************************************************/) |: ~7 e9 ?& R! s# k+ q, g
// 软件断点
4 J0 M. d- k! p( s& S$ X' p, w#define SW_BREAKPOINT asm(" SWBP 0 ");
5 d, n* C/ o5 L$ j
& U4 u$ b6 u9 L3 C// 时钟分频
& g1 I8 Y1 {3 R" s( c#define CLOCK_DIV_VAL 228
3 A7 z+ z- `' Q
# V3 b, g+ U1 M. l' A/****************************************************************************/! q2 g2 v8 g5 s6 F8 w- q5 b
/* */
2 x5 \% S4 c( D1 Y/* 全局变量 */
5 v, \0 x- u* A) J8 k/* */9 ]7 e+ e) y5 F' c s! y9 C0 k
/****************************************************************************/
" m7 u6 E, ^8 xECAPCONTEXT ECAPResult;, a r1 N: B( w( ~" g: R- x) T6 O
( r4 E4 r* l0 A( E2 e/****************************************************************************/
% v k7 G1 `% s Z/ e/* */
1 T# K! ?: U) ^8 c7 c' T/* 函数声明 */, j5 v2 n7 |: Y% S# ?! c* |9 v
/* */- f" R7 w$ m7 t) W& \; v6 c
/****************************************************************************/* N/ i) s8 ?4 H6 d
// 外设使能配置
2 M1 Z/ P3 B2 H l( X# f/ Q! [void PSCInit(void);
& z: A5 L5 i2 _. ]
0 m8 ^8 v2 v f8 K// GPIO 管脚复用配置1 e. R- |' b9 V, Y) S: G" _; j) d
void GPIOBankPinMuxSet();
- d' }- h3 D# _# I* n' H
, r+ t) V. m7 L/ j: _/ \. O3 N' p// 产生波形
0 {! S3 ^. e: N# C7 F! X! o+ \- avoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);
4 i$ b8 Y6 x* X% i, R$ Avoid ChopperWaveform(void);5 G9 r- ^8 }2 `! _1 }6 Z- I* u! r: m
- h3 J+ [/ i1 @1 O// ECAP初始化和读函数! X' s9 X( W3 d$ H
void ECAPInit(void);
8 j K ?* l$ }7 bunsigned int ECAPRead(void);
+ h4 s5 P+ g4 m9 t6 S! Q/ W5 J" H
) [) ]& |2 i5 B# D+ }//ARM 中断初始化, [ F8 Y. ^- o2 {
void InterruptInit(void);" S$ J% F8 M' c1 q @+ ]6 X, R' I4 p! A
" V+ Y. ?$ X" }( Q2 ], H/ M// PWM 中断初始化
* ?+ U6 {- c) Fvoid PWMInterruptInit(void);4 C" j! y. S, ~: V6 T* m
// 中断服务函数2 b4 X% Y# s) ~# I; @: H
// PWM 事件
( A. a6 q7 d4 m% g' `void PWMEventIsr(void);
$ {4 V. z6 v- N/ K& _, A' n( J2 r7 H3 N// PWM 错误控制事件
1 W. ~1 C3 b) e6 mvoid PWMTZIsr(void);# e3 _% R6 A3 s6 p( g
% f4 G1 V1 ?# E1 ]7 k6 p
/****************************************************************************/
) l8 ^3 t6 y- t# t9 [+ N/* */
; d/ `1 I( g3 _$ {1 X/* 主函数 */
% H7 G4 Q; Q* ?: U/* */
5 F' |. V& ]; o/ ?) A6 q; f% H/****************************************************************************/
. }: W3 i: w) ~) a! h3 ?8 sint main(void)
% Q W/ h$ W# o{
. p3 X @- [( }% @ // 外设使能配置5 i! f; A3 j! ]0 F1 f) ]- m
PSCInit();
, @6 Y8 X& a4 M0 a5 P1 W: @4 F4 L' y' _+ @6 s1 b$ e# Q, n
// 初始化串口终端 使用串口2/ e- a9 `" K5 D6 U; m' }
UARTStdioInit();- e0 t. ?" ]' H1 X& g* r2 j
, J4 a, I5 F* R) K `* H( l
// GPIO 管脚复用配置
) f2 U, Z3 G' W GPIOBankPinMuxSet();& u8 l( A* x: O/ x# x
+ n5 k8 h7 K( `& e
// ARM 中断初始化9 b: f8 }0 R8 x, Y! j4 g
InterruptInit();& ~) l0 m3 y/ ] T
) C; s' T: ~# I! P1 l // PWM 中断初始化4 U' l/ ^2 Z3 F. t2 C6 A5 E O2 |
PWMInterruptInit();1 \1 C# v) a& J5 K6 u
# S! P3 U3 Q3 z2 M unsigned char i;! F* b4 n* c* i* B; B
unsigned int j;
; j4 h% R7 Q4 U" [
# k' p" S$ U: O, C1 V/ W6 e0 H% P; Y UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1);
9 c. Z3 U9 T* t ^/ i( {* Y UARTPuts("------------------------------------------------------------\r\n", -1);+ \% b! y! n- p, ~$ J5 j. j
UARTPuts(" C6748 PWM Test\r\n\r\n", -1);8 f+ f3 H2 B6 A5 s( x7 @; a, ]; `
// 产生波形( [4 A. u6 C4 ^. \/ R
PWM1ABasic(25000,50);
1 b5 w# F6 \) M5 D3 }8 L
' ]3 s6 e O# ^: ~+ ?1 }6 ? UARTPuts(" C6748 PWM Test Over!\r\n",-1);# u* p! |' W( p! P. @8 x+ d3 l. a- ?
UARTPuts("------------------------------------------------------------\r\n", -1);7 |5 X3 {& V: d8 Z7 D; T8 V6 U
$ U- W- N8 r% T4 c
, Y( h- J8 w4 L* E
* b! }8 e1 z2 b
UARTPuts("------------------------------------------------------------\r\n", -1);
* I, T( b8 c' i5 ~8 [" d UARTPuts(" C6748 ECAP Test\r\n", -1);
' R, o, |9 ~7 V* q: f // ECAP 捕获初始化7 K( V: \' E% e4 n: X
ECAPInit();
/ ]& ]& `7 J2 B/ `) V2 |# ?4 ? UARTPuts("Initialize ECAP.......\r\n",-1);7 _: H3 Q9 r8 @
for(i=0;i<5;i++)
- w( t8 ^, R6 e {9 B' p' |+ Q3 K
for(j=0x00FFFFFF;j>0;j--); // 延时0 V4 U) w b: w
ECAPRead();
1 S, B U) ?* e$ H5 M) Y }
; h8 w7 ~8 J8 p3 l& K7 k8 g UARTPuts("\r\n",-1);
0 I8 z" j/ r$ u$ x7 v UARTPuts(" C6748 ECAP Test Over!\r\n",-1);2 k, {* d% P3 J* z; W
UARTPuts("------------------------------------------------------------\r\n", -1);5 I" k/ R: e/ }" g
, }/ E8 O7 n5 Z$ x# ~
// 主循环
, b# W: D d6 k$ @0 c9 K for(;;)! V4 Z% |, x, c: w, f! U9 _; j
{2 X# c) |; {1 `# a( J
% G* c- p) ]5 R5 r5 \( |( }
}
. q1 [! |1 i+ T0 H* } X}
) C2 |/ [! E: W6 R( F
! `9 W! f0 Z0 g. s: ?8 m0 ?) @/****************************************************************************/
' ^8 H1 k+ X" m& A$ V/* */
' d7 G9 O3 `4 ]; O/* PSC 初始化 */7 S2 w2 C5 R. j( r* E5 g
/* */
) m6 V. _0 v% y" [9 S' G, I/****************************************************************************/
9 J7 `& c2 S1 r7 B* y8 n W$ H. fvoid PSCInit(void)
: z- X1 l0 C# ^# K9 ?9 R{
+ \" ]8 W% T3 ^ // 使能 EHRPWM 和 ECAP 模块
: H8 h- ]0 }, p; t$ Z& h // 对相应外设模块的使能也可以在 BootLoader 中完成
# W; K; p' j- c PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);5 b, c/ `$ Z" _/ @& ? o3 x% k8 f
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);) F1 t4 {) i3 x4 O$ y- B8 d" ~* U. x( A
}
0 B$ @4 u; V4 F7 }, U7 W* G, @9 a) y: `, ~/ x
/****************************************************************************/0 _% |6 A( z$ W
/* */
* w9 @0 I7 T6 _/ \. w8 f, \0 _/* GPIO 管脚复用配置 */$ h( Y4 \8 e) F* H' s
/* */
0 z6 x( ` }: v/ e6 ~- b, f/****************************************************************************/
, u- g1 O& `. J/ Vvoid GPIOBankPinMuxSet(void)
( d) c' ?( r5 A. k, ^* b{! [0 Z6 n6 S( f& k
EHRPWM1PinMuxSetup();
5 I5 k M( \ |2 M& l1 K3 v3 m5 X; E1 Y- `
// OMAPL138 / DSP C6748 有三个增强捕获模块(ECAP)0 j: a. t9 n* c. ?# f, T$ [$ W
// 作为捕获功能时管脚方向为输入
: b! g+ _+ q% ^$ S' ^) O // 作为辅助脉宽调制时管脚方向为输出
2 U" D$ I' W5 j. R; f( b, [ // ECAP2 / APWM2
3 o0 y( x( B' f4 Y( K4 b( D ECAPPinMuxSetup(2);- m- K, Z0 B- C( h* x, W7 z
" _! V. z# ^) q+ Y( y
// ECAP2 / APWM2方向设置为输入
4 y9 {, z' g! y* Z+ h( X5 s8 N GPIODirModeSet(SOC_GPIO_0_REGS, 8, GPIO_DIR_INPUT); // GPIO0[7]; [2 m2 e& D6 j- c% d
}
4 k' w; P1 D( A5 w+ u# Y1 e' {
$ j' F2 }; D3 C! \3 e/****************************************************************************/
$ A/ I3 p$ j6 T, {. f# z/* */
7 M |4 ?* |! P: h1 q9 L! g2 {/* PWM 输出波形 */) o7 Q* v7 G4 S* F3 [$ \# \
/* */
) D5 `7 F- y# q/****************************************************************************/
9 c$ D! q5 Z, V( ~8 mvoid PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)! g# O1 q6 o- H+ i6 u/ H
{
/ {# |, T5 ?3 r // 时间基准配置
$ T- } z9 ? o! l { // 时钟配置. x& T H3 g$ {9 M& |
EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);, G3 E, m4 \% E0 |9 B
2 T- B5 N9 h6 T8 t6 ]; R Q // 配置周期
8 B7 ~* t. x5 c2 J EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
" R; `- H/ l$ T: t( `0 l6 W pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);$ d& |1 U q% b2 U$ T9 Q" \
: g- }* k0 X. [) V {3 t( W // 禁用输入同步信号
& m- J2 L' V5 ^) P6 j' i EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
4 U( H1 A$ D4 G1 p. F* L- `3 q0 Z( W: b( ^( u9 V. L. P
// 禁用输出同步信号
& _$ z# t' K1 Y4 [" x) F EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
g4 T' u$ L- O; d" k5 u# ~7 e2 ~" ?6 {( E, @" U, w. m: M; @
// 仿真(DEBUG)模式行为配置. y5 i% t! n# W4 N
EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);2 \- n5 T0 ]# M+ c/ A2 }1 r5 f
+ q9 ?7 G* V+ [- c7 @: X
// 配置计数比较器子模块
3 Z/ c! [! ^5 o // 加载比较器 A 值& s9 q' F7 z E# q3 D8 U. ~
EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*duty_ratio/100, EHRPWM_SHADOW_WRITE_DISABLE,
1 U9 f7 P: _$ O5 d/ ~- y& D2 e EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) P: i' M \2 n" Z8 o- I3 T# l
' p. a1 H, b: s7 p# K. |/ u
// 加载比较器 B 值
& Y0 A, Z* }( a. }2 I9 K EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,2 i! @. n/ ]. M( \" y6 |2 c! O% o
EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);) F- u+ w9 z; x4 O
* S$ h b+ o3 Y J/ k // 功能限定配置(输出引脚触发方式设定)7 F" F$ Z+ r- y' ^
// 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出3 S8 x, x& Q- M8 y
EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,( O% ?8 @- h) I8 m% a7 ~" K# X
EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,4 t4 A; C2 ~, `1 X. g1 X: |
EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
) X& w3 N8 x, n: Y! l% x- y1 q7 J, [( E4 `0 l. y
// 禁用(旁路,信号直接输出到斩波子模块)死区模块0 g, G& Y* P9 y$ A4 j: c. O1 d
EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
) _6 p" J7 ~1 p! e
' p" @+ y, `* h // 禁用斩波子模块+ C9 Y6 z0 G' c' \+ o
EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);5 u( v- A% g8 q6 N+ u
+ s: U" b C, L! {
// 禁用错误控制事件0 B( d0 S, P" R# {
EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
8 Z2 Z' ?7 Z) ^( I) p EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
6 S1 J* Q/ o+ ?- f- O* I: e% G
9 H3 R H; {6 B, x ~& w // 事件触发配置1 |0 j2 u3 |$ F6 r
// 每三次事件发生产生中断4 n8 Z9 Z, e; \
EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
4 U; H. W0 U2 X3 |) g# b // 时间基准计数等于有效计数比较寄存器 B 值 产生事件& M# a1 W! @5 W4 N; A
EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);6 \; z) @+ l* y# c# h
// 使能中断
. ]' W9 @# s0 G1 Z7 o) W U3 ? EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
. A% q+ y( Q' @$ {# j, B5 s9 [4 I* p% o6 p7 P
// 禁用高精度子模块( |; H7 F( _+ V3 t2 j' a+ ~' j
EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
7 P8 G. \' W. d
$ z. U- m4 [$ U4 [2 B& `( O q2 n- J UARTprintf("--- PWM_clk = %d ,PWM_duty_ratio = %d ---\r\n\r\n",pwm_clk,duty_ratio);& O% H: D0 W$ Q9 U: n
}
" B0 P- j: `4 ~( Q+ E
7 O: o! m2 d4 s1 i4 i( v( Bvoid ChopperWaveform(void)1 ?0 L( L! z* i1 l& |+ I
{
' R5 [: r7 z1 k' `4 ]" q; t! S // 50% 占空比8 h+ d- {2 H2 o1 @, |3 @8 P
EHRPWMConfigureChopperDuty(SOC_EHRPWM_1_REGS, EHRPWM_CHP_DUTY_50_PER);
! X5 D6 f( e1 `' [, Z // 4 分频
9 H3 E* M ^9 A+ l; g+ w7 ~ EHRPWMConfigureChopperFreq(SOC_EHRPWM_1_REGS, EHRPWM_PCCTL_CHPFREQ_DIVBY4);
4 k9 j% N3 b$ X& O // 单个脉冲宽度
) k7 U* W* P8 E$ J1 U, v- J9 b$ D EHRPWMConfigureChopperOSPW(SOC_EHRPWM_1_REGS, 0xF);# P( l$ ^! I; z* m
// 使能斩波子模块
6 H6 D& N$ x$ @6 n0 W+ F EHRPWMChopperEnable(SOC_EHRPWM_1_REGS);
5 D% e! u; @, _0 Z9 U}# Z5 R$ T: M7 k8 O+ r* {( x% J
# q* T, k5 W1 |2 j5 Y/****************************************************************************/
; N7 d; E+ e; b: D! D2 |: y- F8 a/* */* a: a0 a5 \8 v' o: g8 Z
/* PWM 中断初始化 */
8 y- E0 R7 q1 e9 B. t9 j/* */
E/ W- v: p3 q3 B/****************************************************************************/3 |0 S/ \) x N# E
void PWMInterruptInit(void), s' g0 q- m. W2 D
{
) l5 m4 b" F1 b2 }8 I/ b // 注册中断服务函数
- X1 ~! ^" \1 W: r IntRegister(SYS_INT_EHRPWM1, PWMEventIsr);
! {" @% Y# Q, ^( `2 C7 i. }# I IntRegister(SYS_INT_EHRPWM1TZ, PWMTZIsr);
2 V8 \! t6 L! v+ a \0 Y4 w+ W8 X4 F5 {. M/ s# m g
// 映射中断
, J+ a$ ~: v* k6 D1 [+ ?5 t" j6 Q7 f IntChannelSet(SYS_INT_EHRPWM1, 2);7 q" {! P! _+ m+ j
IntChannelSet(SYS_INT_EHRPWM1TZ, 3);/ S. B/ P& `; C$ J) U
- R' N' R/ n# K6 |# e; [
// 使能中断
' F/ D7 W9 q, E0 \ IntSystemEnable(SYS_INT_EHRPWM1);
! q( I/ {! o/ y/ H, ?5 I) v) ] IntSystemEnable(SYS_INT_EHRPWM1TZ);& q4 T' J; g" A$ [+ a5 p2 U2 ^+ X
}( v# K5 m5 }2 a' F
- h3 x( C# o$ R9 L
/****************************************************************************/. E/ {0 s# [' ?% }3 }7 S
/* */
) ]1 h6 g- u2 k" u5 Q/* ARM 中断初始化 */
/ m) f) Q6 W1 D9 T! a/* */
+ g: Q' c' {! b' s/****************************************************************************/. D) n' M' k7 T
void InterruptInit(void)
g' Y0 t1 u0 z) Z5 V* O{$ P: ^! ~7 D5 T" x
// 初始化 ARM 中断控制器* a. p+ |8 _3 E
IntAINTCInit();7 ]- d1 {& e( ?' s# ]4 i) }
& X6 Q4 U9 K2 E( I
// 使能 IRQ(CPSR)) l7 U, @( g* c5 \9 A
IntMasterIRQEnable();! n. I1 o" z& T7 P
7 r: s9 C/ A! i2 `! Z! c // 使能中断(AINTC GER)1 M0 ^/ @( b {5 T
IntGlobalEnable();
- h# O' U! U! }/ y7 W* x) o: @6 h4 P. P' J2 L! r' v0 z& p7 m
// 使能中断(AINTC HIER)
0 h2 s4 i9 b# K* ~" G3 J IntIRQEnable();9 H7 r" f2 f: Q. r
}3 F' T" z/ \* e8 L- }
4 ?9 }* w2 Q J* ~
|
|