|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) Y" F) G$ e$ i7 h
main文件:
! X L' c: L5 z, j0 Uinterrupt void interrupt4(void)
( ?4 A6 Q4 v2 g9 b5 {{
& S! O% @ q1 A3 s; c! J) A Uint32 sample;( u" t# f* d4 V1 L# N! z
9 f8 s0 ]5 Q( c$ r5 X. J! d sample = input_sample(); // read L + R samples from ADC4 r' z) j$ Q/ N- g/ \% W! S4 f
output_sample(sample); // write L + R samples to DAC
8 D7 r" F2 S I- J! r return;
- @& G% g% c" ^" V* a! X! j}
: p( \1 _3 V( f' @$ _
) R1 l7 }8 E7 o& ?( r- oint main( void ), }& M6 Y1 z8 o1 U' J+ ~
{
. Z3 s! W3 m9 @1 d
; X7 V! A; K/ H# `6 f: G5 B /* Initialize BSL */$ \7 U( A! V% C
EVMC6747_init( );
$ M# A$ w/ F5 e0 y /* Call evmc6747_intr function */
' X& X6 ?$ U7 N. S1 k3 Y, v aic3106_init( );
- F! F* h* Q8 B, j$ Z, Y while(1);8 \- }& c! K4 ?* s
}
4 f+ L$ m1 k0 }# v# _
l9 _7 Q* h1 N R8 H; D7 H+ Y
+ h7 T/ K( a% R! j1 z7 Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# n7 ?/ n& O, K& y [; y/* Initialize MCASP1 */
( b' g! j1 p1 }; [) p i mcasp = &MCASP_MODULE_1;
! R" @; F' _' Z/ \& B8 Z mcasp->regs->GBLCTL = 0; // Reset
% D$ l6 y+ A% s% H mcasp->regs->RGBLCTL = 0; // Reset RX7 S T, F# }3 t
mcasp->regs->XGBLCTL = 0; // Reset TX, x/ R) T9 ]/ u* S1 R
mcasp->regs->PWRDEMU = 1; // Free-running
+ D3 X O: C" ]/ R; n // configure McASP0 receive registers
& a0 v) I# k; Q7 G# P9 x mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* m* Y) [2 O' } mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- V! H9 l3 o) W* O% v3 } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( l) g/ L q5 T0 f/ f mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), w" v# S) c( f3 V# g
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 G, V' W: I3 R: ]+ G mcasp->regs->RTDM = 0x00000003; // Slots 0,1; [) m( A5 J+ K
mcasp->regs->RINTCTL = 0x00000000; // Not used
- X$ y: ~) j7 v ~- N8 B2 \ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 Y4 d& O, N! f8 X6 E: e7 @: l* P4 }! ?' d- o
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* I& K& R' z' l4 B mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& V; _" Q, Q& Z x+ I2 Z _ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! P" E/ o/ z8 F4 q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' ?' N+ b" b+ F, ]: S i T; @) ]
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ c& r4 Q v5 F- L l" r mcasp->regs->XTDM = 0x00000003; // Slots 0,1
; \/ q2 X3 C. Y# G mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 V- X2 w" _2 n, y2 J3 l mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- I( ?$ ]$ Y+ ]" d
; |* O) ^3 ?6 {' H3 T* ~+ \1 w mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- r8 E9 p, e# ?
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' ?" o) N* [/ j- {- c
mcasp->regs->PFUNC = 0; // All MCASPs
- `# e& q6 A/ H; I0 \+ v' u mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" |6 U& L; S0 q; N f/ N3 L" ?& `/ W
mcasp->regs->DITCTL = 0x00000000; // Not used9 H5 }9 H8 B( U9 h
mcasp->regs->DLBCTL = 0x00000000; // Not used' \1 p v6 Z: _; I* `, U8 m
mcasp->regs->AMUTE = 0x00000000; // Not used2 q5 ]' G: C: F0 a0 I4 X
, A/ U% \! b/ o4 G7 g$ W/* Starting sections of the McASP*/4 H% N8 }3 z, C6 ~ d# q9 \$ t
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 o0 v* \0 y, Q. T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
H3 S* L& i% o7 j3 f' R* _2 j mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% t8 L6 D$ w$ E# X4 ]1 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, G; x3 T* K {$ C/ K1 I' @; c7 y/ f5 F# M# c! r, H
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) X: O1 f. Y. r' c& Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: J! |/ @0 s! M
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' ] I% R! t1 R2 z9 G5 Y, S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# G D! I U7 \, t3 f" O) n8 E9 c% ` k. a
mcasp->regs->XSTAT = 0x0000ffff; 6 Z* r; r/ C* S/ j3 T- w
mcasp->regs->RSTAT = 0x0000ffff;
+ j: o+ X4 G1 ]
4 ]9 M4 _% G; F" `; f0 V" B mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ~' O9 I# S- k0 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ L1 a; T9 Z y- ?: J mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% i r) e4 V2 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 q4 } |7 |# t
+ C/ k9 G9 \7 z% p. O
/* Write a 0, so that no underrun occurs after releasing the state machine */- p: I7 d7 R7 e
mcasp->regs->XBUF5 = 0;
% o5 c0 r: L! O' W mcasp->regs->RBUF0 = 0; X3 ]! s& n) G u2 R. @3 C
& i s- L' v/ B1 L& p mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ Q0 I4 x- \* r/ i1 h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# ~8 F, M R9 T3 C& q+ m mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 v6 k, ~/ A" f+ _7 J# `# m5 P, \) P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); k4 T: P7 M9 q
" V4 A4 q" o! l4 \- L: T2 Q, L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) G4 O& x$ ?$ F0 ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: ?1 y! U& ]& E+ ?" T4 Q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; l1 v5 E: k8 U {# s2 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) [6 g! q; c3 ~* ]1 L4 d5 o& }# O& A0 K! F/ g2 u2 Z7 \- {/ L2 O
CSR = 0x0000;
! N- e/ y( t, R, }. n& N) { INTC_INTMUX1 = 0x3d;* Y) p% v- Z) o0 A" V- ^- t
ISTP = (unsigned int)vectors;) [( F( z& P8 Q$ Z& H1 V& b
ICR = 0xFFF0;
: I, _( _2 E( { IER |= 0x12; $ w2 H: t* F7 [
CSR |= 0x01; - u' F3 y" u% p% b- v2 b
0 h/ B2 e; W& g( }; u4 B+ q3 D( q _% j8 E1 O$ c, u3 ]8 N
# G# M# u3 L7 c) U) o$ K
还有就是两个输入输出函数:. c( p* [4 w- e- C3 n/ U
void output_sample(Int32 out_data), U7 k& H6 H: R/ H8 ]
{$ f% W2 ]3 c# b r: H* A
AIC31_data.uint = out_data; 7 o1 c# t) k4 R+ m3 I" `$ v
MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 f6 S# P; b& p}
! y+ O8 l* H( E3 r5 I
- T2 ^7 y s/ k: F" }5 N9 BInt32 input_sample(void)
1 I# U9 q- q# x- _( E5 m! `6 b{ % C5 n# _5 F/ M2 z! _& X* X
AIC31_data.uint = MCASP1_RBUF0_32BIT;: H0 B7 ?$ a1 Q% ~" z5 r# ]& G& Q
return (AIC31_data.uint);
, ^" G& }6 n* p3 I}
# h1 {! `3 P9 P( K' d% H! p. u& X% K* [5 R0 ]8 X+ P
|
|