|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 |2 p2 I8 D& j# l! L: j' U& d
main文件:
, h" X1 ^4 ^8 S7 y) Yinterrupt void interrupt4(void)
# G- ~" ~" ~8 Q. @+ k{
# R- V$ Z+ E3 k9 }) p; y! @ Uint32 sample;9 Y, h! X" e9 Z" w, P( q+ K; E* w
$ s; J) ~. p# [ sample = input_sample(); // read L + R samples from ADC& `5 s+ R# S$ d! B5 V5 ~1 S
output_sample(sample); // write L + R samples to DAC 6 g4 i& o8 a, J- {3 \* R
return;
6 K* n- y4 @4 N/ t ]5 |}
( Y2 w+ Y ]2 ], c' I$ l; K' @* f9 O) B
int main( void )
. K k' d8 W! r+ q{5 j. j- R! k/ R" z g
) E8 E& t2 b: W+ A# K /* Initialize BSL */, A' H4 X& \9 T5 M. d+ M, z' C
EVMC6747_init( );
. O# e# H# I! I# Z- c# ` /* Call evmc6747_intr function */. @; e" h G1 y0 d7 \" [3 q/ ~( a
aic3106_init( );2 W) w. M! E1 A0 |( [; r
while(1);# L( H' V: A8 I# e; I" x
}
0 {5 i, [, }' V- p
, E/ D2 P+ }$ o+ F" o4 G! L: u P( I! }& A8 |: {! M3 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 a4 J, B/ }$ t. a0 t+ ~4 G4 P. I
/* Initialize MCASP1 */
0 d) N3 _5 m6 e h6 `+ R( A6 o mcasp = &MCASP_MODULE_1;
4 G3 k& c+ r0 `! u mcasp->regs->GBLCTL = 0; // Reset
2 @4 g3 ~0 @; ?7 D+ w4 n4 t' Z4 k' U mcasp->regs->RGBLCTL = 0; // Reset RX
$ p" U7 D' C6 }" @7 G6 ]" } mcasp->regs->XGBLCTL = 0; // Reset TX
5 u3 h, P# k- ~. o; J& G8 g mcasp->regs->PWRDEMU = 1; // Free-running
e- A. u& V1 U. l2 y' H6 y$ g // configure McASP0 receive registers
& I# c: p$ ]) B; Q& k mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' d1 i' }' r9 N! e mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! _: t# x6 u4 Y; E# k
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' {2 u c5 b" ^, T, t/ |( L3 g
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( q, C1 `5 v8 L" z mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) q; |6 D9 m) E: s, t/ A
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
! i" c: h7 k' ?' a, U mcasp->regs->RINTCTL = 0x00000000; // Not used" p$ y9 ?, Y: s8 ^% e* ?: q! W
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' Z" ~3 X, I$ b# r0 X- _5 H
; D/ {+ O' J% h; W6 s# w mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ H3 s- \/ N. B, |+ O, k2 x1 s
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' h7 H3 H, v& i$ f0 \0 m1 O" O2 L! H* [
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 V2 V0 y: c0 ?* g; Q% ~
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: f; I z5 ]8 x0 R
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 S3 k) N4 Z# v+ V
mcasp->regs->XTDM = 0x00000003; // Slots 0,17 s7 W: [( N! m, B% r
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ ]( ^2 D) n L+ a R& H* L5 G
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 v8 l( o6 P* z3 A* n
" a# @6 Y2 q3 d! ^: n mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 i0 W7 N$ x* W0 ], l, T" M
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
# v# w" n8 @, u" f( k) O% o; k mcasp->regs->PFUNC = 0; // All MCASPs/ p2 A8 _* r; j9 p
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; B* W* } u. `% ]4 L5 l8 C' N! ~8 q
mcasp->regs->DITCTL = 0x00000000; // Not used
5 Y! G5 Q9 a7 c* n1 N mcasp->regs->DLBCTL = 0x00000000; // Not used& f% Y& G' C$ {# d$ k
mcasp->regs->AMUTE = 0x00000000; // Not used7 N. {% k" c, ?: Q( I: m% s' _. j
6 J {' x7 W: `2 [3 J8 x/* Starting sections of the McASP*/* r7 M4 [; |5 H- ]/ a# T: N
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* B; Z" L' Q% v/ F2 T: ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 H1 T+ d, H% |; m
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 g6 k$ r2 ^9 x/ l5 X! ~9 I7 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' o& r) |- G) g# C' j* k
2 ^# h/ n3 \# {" H. T1 b' M! R mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 Y/ _, K( v3 p- C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 t+ S: [, s+ `/ \ G2 E9 v mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* U- l7 D9 C- t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 r' z7 k$ ?$ i0 {9 A
2 t! U( S$ h% u' j7 d mcasp->regs->XSTAT = 0x0000ffff;
3 d) D8 S* a$ V1 ] mcasp->regs->RSTAT = 0x0000ffff; # T1 h/ f( s, ]- W
! D' N$ a6 k5 T/ e9 ^ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 o. F& h- u7 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* a% `& q/ L3 s1 h' F0 \; O$ V
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" H3 q2 d m. i/ u9 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ S( ]0 U( A6 W: @1 E
i# Q( k) E$ e/ ? /* Write a 0, so that no underrun occurs after releasing the state machine */1 v. `3 e: h% N! Q" ?0 E
mcasp->regs->XBUF5 = 0;; n) O" `( U8 }. q5 e/ L
mcasp->regs->RBUF0 = 0;
. S; K' U- n( G& h" g# S
1 h' @/ \; B- J9 Q3 i7 e mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# S1 _; _, l, j) s I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( B! U* G0 H" K/ \+ n8 { mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 s; F+ e0 z) d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ F+ x' i/ ^: b! H" N; Z- z: z$ B5 ?5 q- b* m2 }
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 b- Y9 M# @- {& ]4 [0 r. A' o7 W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ `- v% v: P: Q& q# ]
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 C( V, a9 I: {$ P1 T) U5 |1 Q8 H0 y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 }0 o) x5 c; O5 }" Z: |
# y0 I& S0 X" P( f CSR = 0x0000;
8 u- ]# L2 U& i; a( ]0 q0 t# w INTC_INTMUX1 = 0x3d;$ r/ E' s$ e1 D4 o
ISTP = (unsigned int)vectors;* O ?, [6 b% a: S2 ]/ G
ICR = 0xFFF0; - V3 T( {) `( n% B, l' Q# w
IER |= 0x12; , K. o7 r8 x, l* C% O/ R
CSR |= 0x01;
7 m$ S. p5 F7 Y4 n$ l, o* Q7 n# T1 g" x# e0 W3 z0 b- m3 O
: L/ N/ R \* T y
. c( J' b) p* D1 {) W还有就是两个输入输出函数:
( c$ |; }0 e9 Hvoid output_sample(Int32 out_data)! {* t" k! B9 T' M8 \1 Q
{
+ _$ F' Y$ T/ ^" T AIC31_data.uint = out_data; 0 a+ A+ _5 \* C2 U; @
MCASP1_XBUF5_32BIT = AIC31_data.uint;
; }7 H% k- t6 N) F* d}* l0 u; `/ a. r8 n( }
# @6 o9 |( R7 a1 h# t6 Y5 [3 D
Int32 input_sample(void)
" L, M7 ?$ I$ f{
( D# S* s; Z3 Q7 ? AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 P: q* k& d% p& J, ^ return (AIC31_data.uint);
. y% W7 z {4 v}
9 N, [0 ^8 d- V* a
; E1 t9 V9 [2 \& ~ o5 A2 h |
|