|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 y! A1 i0 p& |1 {& f
main文件:2 p; i# R) y5 i- A
interrupt void interrupt4(void) ! l4 z) `1 |- B
{
0 B0 _2 m% M5 T, P) r+ f9 A: B0 R# k0 z Uint32 sample;+ {0 E0 K7 Q( a( F4 G% t
* \( P, |" }9 Y" I% e$ }, Y1 } sample = input_sample(); // read L + R samples from ADC+ i+ K4 f" W- E' k+ J
output_sample(sample); // write L + R samples to DAC ; N* f* i% B0 @+ R- _9 }/ e
return;& ~% P7 x! I& E$ f/ n
}- J- i' K" J9 |9 h
# i' ]0 E5 V% p' A9 A, F5 M- R
int main( void )
, E" @6 D6 F# R: ?{: r4 [+ Z. R M
! x) X7 z! x6 @. p3 i /* Initialize BSL */ @5 S; |/ H8 M2 L- b \* {
EVMC6747_init( );8 d. n, R& {/ U% n
/* Call evmc6747_intr function */' J1 q5 l+ i4 g1 {4 w
aic3106_init( );
3 F0 T+ y ~$ I" ^+ h while(1);' k3 g1 M8 V9 z0 }7 Z$ u
}
0 k" o( n; T- e4 t" j4 J4 G
- Q* @; T9 t$ Q' ?+ y: z2 u) X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 \! Y! x6 X" s' f8 p0 H3 Z- h( y
/* Initialize MCASP1 */
3 H% M$ X3 d7 [. w1 V. n$ ` mcasp = &MCASP_MODULE_1;: p! z0 b; \+ P2 N- \' J$ X
mcasp->regs->GBLCTL = 0; // Reset5 @0 J1 _/ B3 O0 Y8 Y: g* T7 N, V
mcasp->regs->RGBLCTL = 0; // Reset RX
4 e& W( S2 r; @. K6 N mcasp->regs->XGBLCTL = 0; // Reset TX5 n9 W4 k3 B8 O) a3 v7 F V
mcasp->regs->PWRDEMU = 1; // Free-running
$ _3 j# f) e4 w1 O // configure McASP0 receive registers
$ ~; K1 \& ]3 }2 m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' [1 `+ i3 _" ^$ R$ k6 L* X& E
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ K# J" q! s: R; I) F3 @; o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ n# r+ R0 o' y( b7 G
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ h$ Q3 n3 i4 I: p! r) } mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, z3 |/ y# d9 K# B mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& ?5 ^: e6 ?6 @9 Z) c mcasp->regs->RINTCTL = 0x00000000; // Not used& X# m- ]2 e5 E& ?. H) J& O
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& ], ]: H. I1 R+ k" q, U
p* e% h5 \' b& l mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) o0 H. J7 _7 x1 y7 `4 J+ K
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: S7 w% ?9 f3 H3 @# i' q+ S i+ I mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ Z& F c* Z( V! w* H" \1 u mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; f7 v0 C/ f( u" A! n8 N: L9 N mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& o( {! p* Q$ W) N! S mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( ^' ?2 b4 z T2 h5 b0 Z9 i0 j mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- `( X! j4 g& Q* {. L" a mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& O! E; R; M/ \) c* `/ J T
& R2 \7 J3 b: y8 D0 i+ p8 i
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" h3 i7 g; U! K1 E7 b P mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ @2 U q ]; k2 }1 L3 I
mcasp->regs->PFUNC = 0; // All MCASPs
4 @9 C$ }9 o, G/ E0 Z% ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* Y0 {: c( d+ y- Y) _4 |' g
1 Z# H. j$ P8 I+ Z! S# A5 K+ m mcasp->regs->DITCTL = 0x00000000; // Not used
( r+ ?, ^. \6 y0 ? mcasp->regs->DLBCTL = 0x00000000; // Not used, [# C" Z' b( q3 e, p8 s4 J1 b
mcasp->regs->AMUTE = 0x00000000; // Not used
& I; ]9 q1 H- W! Q' O/ D
* j/ k( w0 x) q7 _" E/* Starting sections of the McASP*/
' k z% N' y& Y8 D! ?5 k6 @# n3 X mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : v0 e" x. M% p; u- b8 A x6 o" _' l: W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# w1 R# X. e+ v; g+ p$ X mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. M8 k4 _5 m( F# | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% J5 n. C% ^/ h9 `: C3 B8 b
~, [, L d1 E' L/ w
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 K& {5 s# b( U+ r% z, a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 V5 M% R% y8 M; Z( m' X
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- U ]( ?: m' L! E& M( _0 o5 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. W0 x+ x" Z' y3 H, @3 D" V/ k
4 j* d0 H2 I+ {: J L* ?; i% r mcasp->regs->XSTAT = 0x0000ffff; 5 z0 E6 t6 v5 U& j8 e" z
mcasp->regs->RSTAT = 0x0000ffff; 1 H% U+ k* A& X' G7 P; R @
' j) `+ b4 C$ D
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 W7 E- h+ |4 b( g# N% ]3 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
G8 w% l: }2 i2 v5 K5 W$ X mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # {2 _# l& M! y. e; g3 \4 s4 `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) N7 w' K; Y7 l A4 b0 c- \( B4 B
$ i/ Q! l9 F4 b. x0 K6 l /* Write a 0, so that no underrun occurs after releasing the state machine */* ]9 o& e7 z p( {7 }( ~
mcasp->regs->XBUF5 = 0;! n, _! f+ o* f5 }) a i% y( D
mcasp->regs->RBUF0 = 0;9 ]9 X) ^; Z! F5 q, z" [) m
; d9 P9 X. s8 S$ c( F mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
m7 P6 [! u8 r0 p, h1 C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& W+ s- K( _6 R! i; B# e+ a mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - t4 A0 Q) i/ v& {- _/ ?; w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; P) T& S, I; K$ R1 t- Q3 ?; V# x; q9 v1 E+ d
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / G& r$ _9 \- J6 \) l: A: q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- Z0 D$ {- ^3 e: I' m" r
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# q$ P4 c L! a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( B: \0 P' f$ J6 A' I( m1 d, e
4 w& N$ n6 H! P5 v& u. L- u CSR = 0x0000;
! R; d7 S. o/ i1 d! { INTC_INTMUX1 = 0x3d;0 T9 a. \5 V8 _3 E* n
ISTP = (unsigned int)vectors;# {3 ]9 }0 z1 M' k; E o$ `
ICR = 0xFFF0; . b3 [% j1 |% z! l$ K2 d8 t, `0 B$ \
IER |= 0x12;
& i# k4 K7 u) q1 g+ F9 }; V% J9 K CSR |= 0x01;
5 h0 j; l5 F/ {$ `8 B/ h3 b" H
c+ a8 U% u& e7 e- j; T7 G" @
+ r. x. D9 d) R1 B+ Z1 U) q% T* a1 w h" w. m3 t% G
还有就是两个输入输出函数:
$ v1 n$ e( h0 j6 Svoid output_sample(Int32 out_data)# P$ p9 k/ P8 j% S
{6 V$ O# V$ {5 E, l, y( ~. s
AIC31_data.uint = out_data; 9 T$ X% l1 l7 \2 l
MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 r- K' [( H' ?- l}
# J" J: V# z0 \# X' q. |- [& a G- C# S0 u$ R
Int32 input_sample(void)
* b$ ~" Q4 ?& t# M/ h- M/ u- m{ % i# g( B: A+ V. ~( {& m/ T/ Z* R
AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 b6 Q- F* d; J& }- K: v return (AIC31_data.uint);& X2 e* V) k/ @: T+ u
}
, n- w9 G5 @3 @2 |2 c1 l: ?* F8 x
- Y3 W- M! o2 _% j, a/ Y' ~ |
|