|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' m( E$ Y/ J) d$ A/ m4 Tmain文件:
" G, E; p5 S% \* binterrupt void interrupt4(void)
/ k \( Z$ o) m# F; y{7 q" A0 C5 B$ Z
Uint32 sample;7 C0 T% b; u- Y: W
& `( Z$ V. o, _; p9 Y
sample = input_sample(); // read L + R samples from ADC# `& E; l/ J) [9 K
output_sample(sample); // write L + R samples to DAC
! t; W- x: U1 r# B& B return;
. X( i% [0 k# a. [}
+ G5 F4 G J6 H3 h4 h3 }3 L* V/ _4 r: {# A/ m H- T+ p* d) R
int main( void )/ e) v" x! W8 N+ f
{
8 h6 W" \) i y8 q$ c( L) d' a& W) Z, M$ ^ o0 D/ t9 q+ n
/* Initialize BSL */; w+ { [' [* F9 |
EVMC6747_init( );: R$ P; M$ `2 `
/* Call evmc6747_intr function */
* S) p. t5 |" j z* U1 g0 Y8 ~ aic3106_init( );
1 M- C8 E+ c4 p' {& W while(1);0 h# ?0 G8 t" {; ?
}" c9 l6 k2 R+ E/ @& ]+ E: ^
( P( Z2 b- U) b+ ^' u* l8 L5 k/ ~8 @; W: |4 w9 U2 n/ V" k$ o; n) I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 I5 t7 d) a, W/ y5 c/* Initialize MCASP1 */
* U( }* P# S2 }) k7 n- Y% t2 ]7 j mcasp = &MCASP_MODULE_1;7 ~8 h4 Y1 g' {$ ~! j
mcasp->regs->GBLCTL = 0; // Reset7 M# a2 y1 _" ]# h4 z8 B+ t9 w
mcasp->regs->RGBLCTL = 0; // Reset RX0 B6 D1 b4 [7 E+ @0 J# q
mcasp->regs->XGBLCTL = 0; // Reset TX3 a- Q; O' H. y+ z5 ]( p& p* k
mcasp->regs->PWRDEMU = 1; // Free-running
& p" b4 @/ ^3 _: } // configure McASP0 receive registers
9 s& f' M+ J5 j* c mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
! D1 a9 W) U% F( m1 h: F- Y! z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ W' H5 @1 C. t" d8 j mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! v# x U/ {2 a. |8 m8 Z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ G% e) r+ q: Y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)/ [0 k: O" C6 l- W- C9 j
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; K+ j6 t3 U3 f! |+ h mcasp->regs->RINTCTL = 0x00000000; // Not used
% k x; B6 j; k mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( R; i2 e# V7 E$ H
' [* G2 o% H0 e* A mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 Q8 B6 W8 E! |; ?$ |/ q0 q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" z; V1 w% w3 m! v' s: \- x7 l( P2 o# C
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, L$ A6 \# O2 N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; ?, l6 T5 D \+ v mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 `. P* d# ]0 q( n1 G3 V
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% N5 {# |$ g# h/ t- X mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! A) F8 Z, k/ h* b mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 U2 F4 \3 |& Q9 V. x _0 R
% [9 R7 \7 a% w3 K) H7 |0 v mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 m* c: z/ L: I+ J# L4 k mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
) B3 s3 O4 h4 F6 [ mcasp->regs->PFUNC = 0; // All MCASPs! l! T8 R3 m; s5 t. @" l
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, ~. `4 f; F/ l9 I. }0 z
% I( D6 j% e8 E% C# \$ | mcasp->regs->DITCTL = 0x00000000; // Not used6 k+ |# P# t; W% i3 c
mcasp->regs->DLBCTL = 0x00000000; // Not used
5 N, v" C' G9 t9 ^$ }) Q0 R mcasp->regs->AMUTE = 0x00000000; // Not used
5 W( i- f, b" a0 b) P! V! f3 D
4 ~. ]0 x4 X+ h b |4 b( t: ^/* Starting sections of the McASP*/! O* e* }5 Z" o7 ], B' T, p2 L
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( s( v3 z: ?3 z/ C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); + C+ T5 c" Q, J/ [+ K- V6 U
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + }0 W5 ~# P( Q* Q5 s$ F6 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( k# f7 y% i) {* ^5 g. r' ~4 W
: Z+ D/ G4 o; y/ @, [6 h: r mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" f& b/ c* F! P, K5 S6 v) e: W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* T+ j) ^: i4 P, P% c# K mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 z: n$ v, o4 d/ {* [1 P$ m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, p f% q+ e; a
, {8 }. S; ^5 H mcasp->regs->XSTAT = 0x0000ffff; 5 @0 Q0 V- Z7 w6 E: {
mcasp->regs->RSTAT = 0x0000ffff;
1 F; r, x) g$ [4 j) u
9 O# C8 L) _. t3 v: ~. |$ t- j mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! n# C# B* C6 D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& M* \+ m' m$ S* z2 r mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ E; D# F* U3 S& A% B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% x' B; Y h7 a1 G8 | q9 m% R- G9 w3 n( T. j/ A$ o8 U! \7 x
/* Write a 0, so that no underrun occurs after releasing the state machine */ G" X5 Q# C! |& ^- c5 Z0 S
mcasp->regs->XBUF5 = 0;7 }9 T3 A8 H" E) x( _. @7 {, }
mcasp->regs->RBUF0 = 0; F3 t, F/ m) j
0 h! k& C' n1 O! M) n6 s1 M4 X mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : g( r2 h* g* w- S% N; l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( B. k1 J4 r4 E: K9 P$ m! R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% v4 s/ }5 v; E; X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 Q; V0 \$ N& O6 p
4 s/ m' T( i0 f" M, X2 E( f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 S( p9 v% o4 s! ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# p3 m7 R( r _+ I$ n6 G mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 C, a9 t8 V0 ]" `& w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 o# b3 b& H$ @/ p' h+ X2 K/ Z' J( `0 {. T5 \: p- E/ t, G0 t b
CSR = 0x0000;3 P5 X9 P+ y% b3 [. ^* ^, }
INTC_INTMUX1 = 0x3d;
5 `8 g- w# _$ J% N% \, D6 y ISTP = (unsigned int)vectors;
9 \' `: g5 y4 m" ~5 h Y ICR = 0xFFF0;
9 c/ Y$ B" M. e$ K IER |= 0x12;
; v& U( y7 \2 Y, n6 Y, _ CSR |= 0x01; 3 h1 k# W f& n8 W- i6 c
2 O5 T, w; h, U1 }' F
- W x' m" [8 z; R
n; @4 Q% c6 ^$ `还有就是两个输入输出函数:
$ z1 w8 j% ? A6 [: }0 A/ xvoid output_sample(Int32 out_data)( A# r8 H7 d) r2 D- U9 K9 f b
{# }0 l0 A1 C* }0 ]( b3 k
AIC31_data.uint = out_data;
8 G9 q% ]' v: G+ O a: K MCASP1_XBUF5_32BIT = AIC31_data.uint;5 q' Y) T9 f& ^ B) q: K- E2 k
}
& V0 [ Y4 V2 m# w6 b
; S( C" c: ]( H' bInt32 input_sample(void). B! `2 n/ c6 i1 i. \- `/ F
{
- B4 @# X4 R: z; G( L AIC31_data.uint = MCASP1_RBUF0_32BIT;( G: I2 e/ Y/ S" u% w; q3 l
return (AIC31_data.uint);! {& m6 a5 g/ z
}
. O! z B8 t* _: T9 ?2 m. v9 k) g9 u( C
|
|