|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, D* M" }3 b8 ?0 nmain文件:
& o7 Z+ q4 W7 yinterrupt void interrupt4(void)
' a% r( S7 N: i0 @{
; V8 l9 e; @6 J. m8 b! b Uint32 sample;4 l7 z; Q8 \4 @/ m
9 D9 ~1 }. E" e! F* M, R6 m7 D
sample = input_sample(); // read L + R samples from ADC
' X( O& c, \2 S( Z/ ]/ \ output_sample(sample); // write L + R samples to DAC
9 G$ F) F6 m$ C# C& M4 Y return;
, ^. z. O4 H: C2 ]$ P1 P( @}
! S4 d/ y" L1 c7 A2 }+ g
! s j8 |6 ]" p; Bint main( void )
! N- G+ W- V5 Y |{
/ n! T/ K6 F y( [7 V, S
7 b( _4 q' F4 [+ B b /* Initialize BSL */
$ f3 J$ W5 n3 P3 \! _9 Z EVMC6747_init( );
B4 Q, S! J1 U0 } /* Call evmc6747_intr function */6 a, S: D! J7 N8 p& ]
aic3106_init( );
- w4 I* u# g! m, |! a Q$ p/ ^ r while(1);
0 ]. ^; K% H; t6 r: v}" b0 Y4 y7 ^# e) G
0 o# u! z f8 J+ B7 x0 D2 M" a
4 K9 e+ O% S! y2 @$ S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* t# d* g6 p# h9 H) U/* Initialize MCASP1 */0 E6 N: K% O4 R' h7 O
mcasp = &MCASP_MODULE_1;9 ^0 c r2 n n% H
mcasp->regs->GBLCTL = 0; // Reset6 S% e9 C% A! m8 t& H" f5 q6 E5 i
mcasp->regs->RGBLCTL = 0; // Reset RX
3 J2 {5 }" J6 O, J1 G mcasp->regs->XGBLCTL = 0; // Reset TX) N) {1 b! x* r0 h$ g$ m1 Z
mcasp->regs->PWRDEMU = 1; // Free-running; D' Q' `* q+ d) o
// configure McASP0 receive registers
4 [" v! o9 G" R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' w6 ~. R1 T1 k- C: E
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( D# W% o, g$ d* M( j) E mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word: C0 `: q. s8 [. Y) s* Y9 f
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 r3 R9 i9 M) M/ {+ Q9 }: h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) @4 R/ V/ S: E! H' Q% v
mcasp->regs->RTDM = 0x00000003; // Slots 0,1- m! }* E& c; w' F
mcasp->regs->RINTCTL = 0x00000000; // Not used
5 D# F; m# Z8 h2 H' Y mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% ?8 u0 I/ b& p+ ^0 Z: E1 H" @+ `9 f0 ?3 p
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% G* d! v# F6 ~1 A# N
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 B5 V9 X! d/ u% c2 D mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ _- @3 A) X' D7 u2 a! s
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 ~ ^; J5 c, h- Z% ^$ B
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK' {& X# u* Q4 ~9 m0 [ J) j
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. W! ]9 l, [* u4 _: I mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! ^7 n/ q) V. M
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 X& h( C6 ~7 Q
* g: L3 d# m+ \) h0 |" G! a( k: |! _ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- ]2 D* Z$ `8 N0 W4 t# ` mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 Q; A- V& J. p4 D/ z mcasp->regs->PFUNC = 0; // All MCASPs
6 w) A6 [! @3 S: b# } z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 {1 t+ [! w' |9 ~$ E
1 {: {2 j7 m% F( B6 r
mcasp->regs->DITCTL = 0x00000000; // Not used+ x p& A3 a; L( N4 H
mcasp->regs->DLBCTL = 0x00000000; // Not used6 W' E7 n8 q0 z5 {2 o/ a
mcasp->regs->AMUTE = 0x00000000; // Not used! n6 ?3 [0 ~0 E5 b9 M8 e m
% Y/ X- v: J. C! E
/* Starting sections of the McASP*/
6 v3 c$ d( j0 k4 J4 H% J mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! B @2 F' j& T: ]' W: I0 W( N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); E, K5 D5 V5 O1 D! l8 }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* i( A" I7 ]! k) _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ J1 E, G/ D4 f |) a
+ L5 L, e3 k0 s& ]. o4 a7 ` mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; |2 y% Q, h9 o' {! s( l# D- I! }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& w. I7 x$ G! k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( f/ F, Q0 \" }5 ^; u4 d1 d p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# ~ ]. o! [2 \( V! O
3 D6 h8 o, V3 b% S6 T: F
mcasp->regs->XSTAT = 0x0000ffff;
2 j; f) x, W3 }* K# N' @ mcasp->regs->RSTAT = 0x0000ffff; f. g5 ~/ p2 y/ \- J* w& F
) l, y! o' W' G$ P. H2 j
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' C1 \# K @% Z- O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 ^" S( s9 Q" L, [4 P mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" J) G. T5 B+ ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) h/ u+ }5 b4 T. c
/ \$ ?% m5 M" f: u& ^0 u
/* Write a 0, so that no underrun occurs after releasing the state machine *// v0 q! _0 p2 q6 z- ]
mcasp->regs->XBUF5 = 0;
9 r: ~+ Q# g( D6 L; g mcasp->regs->RBUF0 = 0;1 S8 L( P" I& @* z% ?7 J
( w* d) y3 ]( y$ |: M5 }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 ]3 x K+ a: y* C) L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ [/ w' r; @+ H4 ?4 i5 O+ } mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * Z8 I! u7 p" F! b4 t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) [* L) O f, \4 G& N
: q0 G+ K% A( N# ?7 ^; b" y. h mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ ?- o! B4 n. d+ ~9 T; @ @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ M( P- L7 m. A0 @/ |0 ?! l/ F3 W6 x mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( Z) i8 Z: ^; g4 \8 d3 P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. X. x( V7 x& G. g5 M& b3 [
! m6 I" L/ k" y$ H9 Z; {$ g. {: U CSR = 0x0000;1 v- k" T6 P, Z0 k
INTC_INTMUX1 = 0x3d;$ H: U8 E$ u* b; p2 Y; r
ISTP = (unsigned int)vectors;
! _9 F: X5 O% g3 } \$ j ICR = 0xFFF0; ; H6 v0 w- ?+ ^+ Z4 V
IER |= 0x12; 7 N H6 _. O# y/ s
CSR |= 0x01;
' N) K* c3 B6 @) F& N( {' J( [3 }* A* e n
1 @" [: f+ Q4 L/ e3 b$ k5 u1 O% i" K* `, ]
还有就是两个输入输出函数:$ a$ ?* \' [# a! l4 M
void output_sample(Int32 out_data)
0 C, G' l+ ]" V& ^1 u{4 ^" b" A. I) N8 p* t. M* h! m
AIC31_data.uint = out_data; 7 q8 R+ k5 j) b. n# W9 ^
MCASP1_XBUF5_32BIT = AIC31_data.uint; x' b& X2 o6 e) x
}
' ?. W+ C& `( d2 n+ }) g: W, C+ R# u
Int32 input_sample(void)
: B8 @1 P' S3 q( h- L M{
+ [- k8 u6 l; T' z, y% O0 D* _ AIC31_data.uint = MCASP1_RBUF0_32BIT;4 I6 F7 A1 S0 _! E: n
return (AIC31_data.uint);
8 [5 g8 v1 T2 B s2 y6 T" j! Y( D}& l, J7 S& ?# S, s- D4 T
* m( W/ t% S5 A# G$ g! l& v/ U
|
|