|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* T' T" T- a$ h6 fmain文件:6 E* a1 S! W( m& k8 \ B5 _1 I
interrupt void interrupt4(void)
# M V) f& U: g5 S/ g/ x& a{7 R' e" I3 v1 ^! A
Uint32 sample;5 o. ?- {8 E. g1 M3 x3 ^& f
( M* s4 r5 L9 ?; E" E. J
sample = input_sample(); // read L + R samples from ADC6 x2 A2 b+ k) J7 I+ F0 Y9 B
output_sample(sample); // write L + R samples to DAC
. V1 [: }9 C, S/ G0 n return;
( s, |4 Z+ a' Z; C}& {3 P% U/ ?: M) o2 J
. b5 x& d8 S9 ]/ Pint main( void )
+ I( t) P. }. G! N{
6 V7 x" n+ l9 i4 f }; i' ?9 G/ ?1 F, L1 R
/* Initialize BSL */
4 p( Y+ v+ a9 a! |4 x EVMC6747_init( );
+ m1 m5 J9 f# Y. t3 w /* Call evmc6747_intr function */
4 e# i% n0 g( P3 }/ d" ^ aic3106_init( );
. {1 w6 |( K- C8 L x0 u8 t while(1);
. a4 j) n J2 ?}# Z" k7 a% E3 ?7 r V+ K) F7 l
, G2 A* Q1 [8 L. M9 Z0 E
. L7 u7 m' B- ?- g" y2 R0 L5 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ j v }) d# p) G" n* S1 v# v2 ?
/* Initialize MCASP1 */1 I3 Q0 ~9 n+ P5 X/ Z& ^0 _; ~
mcasp = &MCASP_MODULE_1; d6 r/ ~; [# X( d" [( z' H
mcasp->regs->GBLCTL = 0; // Reset
2 f6 ?, F& a5 ?; k! X6 ? mcasp->regs->RGBLCTL = 0; // Reset RX' S# x3 L1 ?. g z/ u5 a1 g! K
mcasp->regs->XGBLCTL = 0; // Reset TX
. A; c7 V" i& @$ F mcasp->regs->PWRDEMU = 1; // Free-running4 e1 k$ E+ N4 n. o6 a7 ~
// configure McASP0 receive registers
4 X" S/ d" r1 w' Z) z7 L mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, O# p" W0 l, ~9 \- h
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; U" n1 w! G# i' z5 e
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) Z* B, @/ s0 u- A6 e
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 ]$ b8 \* e7 r; F( k
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), O& z$ [, F2 r2 g
mcasp->regs->RTDM = 0x00000003; // Slots 0,1. \) E" h; p) P0 G5 L) z
mcasp->regs->RINTCTL = 0x00000000; // Not used
# ` d ]3 v _ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 u% s" n- K# o) T8 N8 c0 N
- C5 X( i* o% S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; I7 c& D% ^6 O2 P mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ a6 W2 H: ~2 G1 a8 O7 t
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; E' H5 N& i" H/ p/ P) M [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! G3 z7 [1 d# `! x
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 v$ I! w" D9 o; P: p mcasp->regs->XTDM = 0x00000003; // Slots 0,1- D( J- }& u1 y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit3 y2 [! ~- i2 t3 n6 o
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 T7 o1 U7 A; E1 {) }& Z
8 H+ g* @9 p6 q2 n mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 U8 ^/ W! D* U% B2 D mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ Y9 }4 v- F i$ c, p/ M" F" k
mcasp->regs->PFUNC = 0; // All MCASPs9 J3 ~* B% `+ c3 Q' S% n1 _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- g e7 m4 s3 `" E
; E+ Z/ e5 A$ y. P# j mcasp->regs->DITCTL = 0x00000000; // Not used
' `1 n. c9 i$ K9 `" I' u6 ^ mcasp->regs->DLBCTL = 0x00000000; // Not used
5 {8 G) X( s( x* `1 N0 ~ mcasp->regs->AMUTE = 0x00000000; // Not used, {- j) x8 P0 i1 [ R. c N; U4 r2 B
4 |# I" T. B# J
/* Starting sections of the McASP*/
T3 g# ?6 [9 u7 b. Q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 M- i: k* C! h+ | ?' ~7 M6 H. a; z9 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 8 S/ n v P! ]' o3 I; @9 w$ ~) Q' H
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 t6 o/ k; v3 h% \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 j* X& z7 j3 A3 |
# t( K! ~2 ?8 k: R& M# r
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; Z+ l O# T( K0 z/ x) s% L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" v8 s+ x! U* Z5 Z% `* u: P mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) ^, O: L. m1 ]6 Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ q) c K3 J2 V$ g' E. p: A+ {
) D2 s6 W0 M4 \4 C! A% ~
mcasp->regs->XSTAT = 0x0000ffff;
# E9 ~$ w% d3 }1 j mcasp->regs->RSTAT = 0x0000ffff; ( d% A# X+ z3 I2 F! s
8 _9 i+ Z. @8 y2 H* a
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON; ?2 L7 d8 `( t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' ]3 h+ T1 h4 V mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 B y( E+ a, R. E6 M7 z9 O' T8 X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% c# m, n0 b+ |: P
: s/ n! m4 i1 @3 o( S/ n4 _6 H4 g /* Write a 0, so that no underrun occurs after releasing the state machine */* J- V6 w6 |* L" A
mcasp->regs->XBUF5 = 0;: C/ U; d. V+ v- n3 r7 n ?/ n- j
mcasp->regs->RBUF0 = 0;
; V2 I$ g6 ?4 g/ U$ v/ m; m7 t
# P+ d# \+ V& c+ m& n mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) G( A, {( u F! f# F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ F, r) a+ y7 ?' }* l6 f& h& o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 u ?$ v. E8 w; M. l/ F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" q+ B, m' R( Q% o. u0 _# @& s2 \, m3 Z' r
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : a$ y: y8 ~* P. z6 y( |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! I) i0 A f' }- R1 N mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 B6 ? l9 e8 t; z V+ \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ h y% |2 |1 J5 E0 A
4 @' d, e7 }/ u1 O3 K CSR = 0x0000;
2 q( y& t! h' a; `, Y INTC_INTMUX1 = 0x3d;, Y) ^1 w: z5 s( w' E
ISTP = (unsigned int)vectors;5 E* y$ R3 ~# f4 K' H2 P: q
ICR = 0xFFF0; : _! I- g5 ?) u( V; C
IER |= 0x12;
% B8 X M- f; B. M1 ` CSR |= 0x01; ; n ?# R/ u; ]
/ o R9 Y1 \0 x+ x# y* H$ N1 r' K
' j6 `* N0 b1 P$ |! ]) w2 U0 x7 g/ N0 X% g! k. a. S; v+ w
还有就是两个输入输出函数:
( D; l! d$ U3 N2 zvoid output_sample(Int32 out_data) k8 P# n7 j5 X* x; P+ E! o
{. _& V- E: B- ]" t
AIC31_data.uint = out_data;
6 r, f7 }. n& T0 O) ~ MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 D9 R3 A/ i- F# ^' G}
# V- F( J) Y% n) h4 {6 [* n
/ S* o( R) H6 s5 Z3 [5 }Int32 input_sample(void)
) A* A( D! U0 \: Y: O; h" _2 u5 y{
/ T0 k% @5 ]4 c: _& d0 } AIC31_data.uint = MCASP1_RBUF0_32BIT;1 r9 g) L$ P6 S& E: ]# a$ p1 z
return (AIC31_data.uint);' p i# f7 k+ `- A1 M
}
7 U# U+ s% o4 L2 k+ ~, U; A o0 Q! B- W2 G7 [# ~
|
|