|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# r8 k3 D& i" v! k3 s8 ^; tmain文件:& f/ o. Y G* e5 p
interrupt void interrupt4(void) " s# e: N P0 A9 G e, ~
{
8 S- g: ~4 M2 l; E" B Uint32 sample;3 ^2 e- ]( O; _( u7 Z- c }/ o. j
+ x8 d5 X5 F; s! P9 y4 t
sample = input_sample(); // read L + R samples from ADC
" w g3 h; _, m5 @ output_sample(sample); // write L + R samples to DAC 2 Q4 V: M: B9 O% p+ ~1 x8 w
return;6 ~) U; n2 a3 T$ @
}7 L2 R5 M0 d5 Z8 S
" L L ^+ F4 h/ d2 f/ y! eint main( void )
) _3 a+ m. n; K{8 U* M4 A; _7 ~* j3 A3 L; q
- h2 k( u0 `- E V
/* Initialize BSL */! ]0 v8 Q0 l5 [8 ^$ R
EVMC6747_init( );. J5 _" f: @" G5 r. t7 t4 s- [/ y
/* Call evmc6747_intr function */
- [$ } N; {# |7 Q+ W6 y: R" W aic3106_init( );, }. N! r. w+ V" }: ^ F
while(1);, u4 P( p7 P$ t, z+ `7 ~6 G
}
" Q1 C. z; [7 z2 ?3 J2 w# N( P+ Z. H6 Q4 _
5 }6 J' S, g0 w9 C q9 P% E! p
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, q- F2 O) Z0 W% w9 J9 @8 ~) L4 b
/* Initialize MCASP1 */8 t! ? K0 a1 E7 L. }
mcasp = &MCASP_MODULE_1;2 R3 b& w. Z |/ W8 O
mcasp->regs->GBLCTL = 0; // Reset
* g2 }' G8 o1 ^' ^4 g) c) k mcasp->regs->RGBLCTL = 0; // Reset RX
% ^6 M+ L: _2 G9 A! H/ g mcasp->regs->XGBLCTL = 0; // Reset TX7 `: {& S. h, ?4 o
mcasp->regs->PWRDEMU = 1; // Free-running
3 g5 H# E ~5 e% d* |1 G1 N6 N // configure McASP0 receive registers. m' L7 N0 E8 u" G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: [ u; C9 `8 ~+ B3 s- v1 i7 Y6 T0 @
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- E9 k- ^+ I- T. s mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 y! ~0 {4 |3 J# g4 V mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! a h. c8 B! t8 @ v8 b mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" r2 X( d/ U+ @: P5 E9 b% _
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, T. ~$ i* L/ j7 M mcasp->regs->RINTCTL = 0x00000000; // Not used4 _& M( k: x. Z* |2 I- H8 I
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) u; X/ c6 \# w, B. j
6 n r+ ^8 i6 ^# C6 f, L
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
8 N7 l, n+ l/ C* q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus j: F3 r9 z& t* I% }
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 R1 i; d' O! u. g mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- x( B4 e( w3 X0 I# w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) u2 I# W" z8 l+ O" J- I Z
mcasp->regs->XTDM = 0x00000003; // Slots 0,1! Y4 t# X+ H& e! b8 o6 H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ ^1 P$ N- u. r: X% g
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 Q* j5 |" e" M2 {0 v$ ]: ~- D
& M, B {9 @* q$ O* Z mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
/ w# m" [ v/ Y W mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 S4 L( o* q! D/ x$ r
mcasp->regs->PFUNC = 0; // All MCASPs' O& `( R* K7 F/ q) L& Z: l/ d
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 p" M; k4 Q1 p& ~, \
6 G* W2 P. L; @8 V$ a$ i r2 [% x mcasp->regs->DITCTL = 0x00000000; // Not used
) W- z: @& A* ~. a: k7 N3 v, \ mcasp->regs->DLBCTL = 0x00000000; // Not used" Q0 R. x4 t/ W9 ?
mcasp->regs->AMUTE = 0x00000000; // Not used
% |+ g' [; _2 M6 m2 H
# ^9 W7 t2 r1 T% d8 K, O2 Y# m5 ]* _/* Starting sections of the McASP*/
: R) [9 K0 d. P, K" J! A+ g( f8 ^ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: M% @3 h* I. \0 \( ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 7 W# k! C( [* ^: P
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 ^( {6 b% I( @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( h! `! ^& o, K% s2 [# G/ |" D; F2 a K$ j: t) e% I8 L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! H6 \: ]9 j. e: l- A+ l# L5 F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: l( e0 U: Z' x3 }! @( L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 s6 B! L2 H4 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' m- N6 e& g( P9 b9 j
/ ?9 Z) `7 u, e. y mcasp->regs->XSTAT = 0x0000ffff; 9 v+ s8 r; n; x$ |/ O8 l
mcasp->regs->RSTAT = 0x0000ffff; 5 _& E& ^; B4 g+ {# z: k2 X
8 t( D. D e2 ]' c1 q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 [& Q' a( E. F: a9 C. m6 G2 z- E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) @: ~% e |1 C
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 O5 `. k+ y0 u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: j6 N$ [( y& ^8 L7 l
* Y O/ X( M' @$ g /* Write a 0, so that no underrun occurs after releasing the state machine */
( `$ N3 d# u) F0 ~: s" O3 S" V% v mcasp->regs->XBUF5 = 0;
* X9 R$ O: h2 B/ H* z mcasp->regs->RBUF0 = 0;+ l( g( N6 Y& M# C9 q' v
1 s0 H8 a% y. ~8 t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , u! X! Q j# G4 @4 }; a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: k" e0 u$ R' x3 F
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 H+ v% T, W5 [! T9 {) |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, ^2 J9 ~8 t7 D8 i" O# c' n
: M/ @3 k4 c& {7 \" F$ F, E
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 v$ N- H5 S/ K* X' e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) i. g, } r# X. S" ] mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
G2 f0 A" ~, S# k' Q8 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- [- Y$ J f3 Q$ I! R# r5 `# ~, R
6 f0 z r! `- I2 T. p7 h) i CSR = 0x0000;0 {" F3 d( T9 m, Y: [
INTC_INTMUX1 = 0x3d;7 e, M" E+ Q4 G0 A& C
ISTP = (unsigned int)vectors;$ ?+ Z V& O" R- y2 j5 ~+ {/ o
ICR = 0xFFF0; : d9 ]" \5 t2 x5 W+ W. L, y8 ?
IER |= 0x12;
# J" j, w1 [. Q CSR |= 0x01; . G. @4 t) X1 }. T# F5 o" a
; N; S O/ i, X8 C, Z7 e; d* m
; f: P# O) |$ K% o8 R- U6 `
' x/ p: {- W' k+ V1 G; r- {还有就是两个输入输出函数:7 D) o! x# b5 d3 P
void output_sample(Int32 out_data)
5 {4 H/ W- K+ F) V. F{1 f1 L8 S/ L" Y" I
AIC31_data.uint = out_data; # v" a' q- b4 }* V i7 v& ?0 j
MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 D- G1 T) G9 e+ Z}. n$ `8 O: A" H
1 H7 B" c& h) ^! ZInt32 input_sample(void)* {2 \8 H! z( p, ?# B! F
{ 1 ]& ~. d/ h5 C3 x) x. J
AIC31_data.uint = MCASP1_RBUF0_32BIT;3 E7 C; ^6 N' V& K+ c# }
return (AIC31_data.uint);
|7 K/ H% @" s' D+ v" V( a1 z U4 G}
* _; Y, e# j( [+ q9 M
L) W9 ~$ Y5 Z/ q |
|