|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( D% y$ ~, S; w& u
main文件:
/ \$ g% I0 _ q) { Q5 o4 pinterrupt void interrupt4(void)
* A7 L. c% _7 V/ v0 l$ G& x# [) d{
1 G* o- ^; c6 P+ L6 h. }& O0 H Uint32 sample;5 z9 y( n; ]2 [) j2 j
/ ]$ |3 k$ Z' U
sample = input_sample(); // read L + R samples from ADC
; R- ^5 A1 a& N output_sample(sample); // write L + R samples to DAC * f# }7 V+ q- X" i; v2 g; B& c
return;1 {5 N; G$ q) ~& K$ ]
}
. j( U4 {4 k- e) h1 E' f5 ]; m* i: |3 T
int main( void )
4 s- A3 @" r4 G, V0 `& ?9 x{
3 l# l" r3 }( G3 b' y* W2 q. J
) I K( t9 n- |9 K" A /* Initialize BSL */( g, i8 Z' p' G; S8 E9 {3 H
EVMC6747_init( );$ A: R+ F/ H K$ V! _1 w' O3 u
/* Call evmc6747_intr function */7 M0 z3 K+ @ \6 k- A
aic3106_init( );% v6 H/ p" K6 N; w9 s$ d
while(1);
" `: S3 ^: \/ ?$ f. ?2 ?}
. [/ J$ l3 |: v6 V& g7 E, h. G+ G* F9 H; ^. p1 p+ m
4 r: @( R: j5 y' s" Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 ?- f$ H. H H; Q4 m0 l" B
/* Initialize MCASP1 */
* I1 ?+ d6 \/ F. r ^, z0 C mcasp = &MCASP_MODULE_1;2 G- @$ f* o- u; E0 {
mcasp->regs->GBLCTL = 0; // Reset
5 j* J. L" X ^; @# p3 L4 n% h$ H mcasp->regs->RGBLCTL = 0; // Reset RX
6 h& l4 Y. I" |# k( O4 T. q( u) O$ b mcasp->regs->XGBLCTL = 0; // Reset TX
9 G; o% _$ F$ E% e, E C! c mcasp->regs->PWRDEMU = 1; // Free-running
( I- Z) u0 l& O1 P7 O t% B // configure McASP0 receive registers, |, Z7 a) v' M0 E: q
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& f2 s* f* u: ?) N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 {1 A, _; M9 F3 p3 l0 B5 A- l \
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word. R, P/ l8 b I6 ?) T \
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" \% r# x5 K0 Z8 _7 A+ q
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( Z' Y4 v2 }9 c0 R! o+ E7 M
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& q5 {0 O/ L5 j4 K- R% W: _ mcasp->regs->RINTCTL = 0x00000000; // Not used6 R! |' G( a; f( F M
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 Q2 R* i) s+ i. j
! `" e/ r0 R( g4 c; V* S# d mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 t4 J" C% w2 I# E1 @
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, _# u' R$ \- N
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word z- X% f, T3 H' U E2 u: I
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 U6 e$ f8 i8 _- D8 @* ~* O$ d" n* T
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; ?& S$ u! i6 i8 S( i
mcasp->regs->XTDM = 0x00000003; // Slots 0,1% P6 P, i. m9 L3 H. H; U# H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( i! N+ ?' V6 w mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' o: `; J- v7 Q# |* U- q( T' i* o% M- |. a! {6 _) m' g
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" R+ K& X4 }5 B8 O$ J, i& b2 u mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, Z3 x: M( \ c! S/ P4 N mcasp->regs->PFUNC = 0; // All MCASPs8 Y9 c1 e$ n. O( m- B+ v1 `- T# T0 J
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: |6 r) l/ Y% j$ t
! M% t/ Q+ r1 V. m0 S mcasp->regs->DITCTL = 0x00000000; // Not used. U0 h7 I, Z6 f3 {2 n4 j3 Q5 O
mcasp->regs->DLBCTL = 0x00000000; // Not used
+ }7 Y- Y3 C @" U! O3 ^7 N mcasp->regs->AMUTE = 0x00000000; // Not used
$ }( ~8 I, }( ^
" I8 | r: i7 c/ h/* Starting sections of the McASP*/
+ `, h- Z, i) w D* a5 u mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
j$ x' C' P& n& | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# k& K, l& T: g1 {, s" r4 F3 S- ]" e8 _ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; N _$ {$ s2 k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 Y( M- T9 J6 \7 h
! x6 F4 T$ |- _/ `- I6 b1 e; O mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : }. C, Y, V! K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% U* e9 ]( \& }2 A- @ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 }7 t% n1 u H# ?$ @3 L5 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" C8 p) Z( `" G3 J( F4 v
+ W7 U7 E, B* B) A, [ mcasp->regs->XSTAT = 0x0000ffff;
1 s( O" R: P j7 v U& L% I1 @ mcasp->regs->RSTAT = 0x0000ffff; ' Z; e0 G8 s0 D4 F$ `& q- k' d
$ \; ^% v* D+ f3 I& c" ?
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 f7 n! C+ D. L6 v( m( E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 a" G, j2 h" p% w! E( m. [# @: @
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 Q @6 z7 d6 Q) C) b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& Z j' L- @1 u
0 W9 h: G7 ]8 _- H /* Write a 0, so that no underrun occurs after releasing the state machine */
/ ^% {, I3 }- g; V- F mcasp->regs->XBUF5 = 0;
% Q2 B% D5 L9 R" r4 ~" v: h* t mcasp->regs->RBUF0 = 0;
- v. i U( B: \0 M ?9 w
- A b2 p# e3 j9 B6 K& u mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 u; H( _2 d( ]# h! V; v+ Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); i3 q, s2 n3 ^5 w: _5 W
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . a! e1 {# Z4 V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; k" r$ n2 o1 i8 I, E: c L& G' w
8 w* x& P- k! v( q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( }" r& N- N; r) ^- r; I- {! g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* t, C9 m, }5 ?& V: ` mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - l, N6 T8 e+ Q, Q& j8 d) X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* J* ?2 u8 ]9 N8 S4 [3 j- c! B" i
0 [; t1 z- G: A1 j/ o CSR = 0x0000;
+ \% ~2 b% ]; G, C# }( h( D: t INTC_INTMUX1 = 0x3d;
8 o/ R; _5 d0 m# P ISTP = (unsigned int)vectors;$ u, P; w" Y6 W! k7 Q
ICR = 0xFFF0;
( J" H( G- |' y: m- n! E IER |= 0x12; . L3 X1 w$ [& i: _- W+ v6 w
CSR |= 0x01;
: |* y8 }* e* Z9 J& }. f# K; }3 H2 m( R- x8 ^
, n, J) \8 B4 p' P- I
# R' l, D& Z: a/ s* E, J: ^! J还有就是两个输入输出函数:' D6 _7 q" w# O) n* r
void output_sample(Int32 out_data)' R. I3 y# {' x# b6 D$ z$ v5 l
{
( j, p! S2 C1 q3 k AIC31_data.uint = out_data;
C$ k4 p2 d, a$ [ MCASP1_XBUF5_32BIT = AIC31_data.uint;
! R( M" P3 F( q8 Z5 d+ d}
& [$ K' _9 w; r5 U: d4 J
1 V4 z6 K7 n$ t( |# G- FInt32 input_sample(void): L! C8 n7 y8 E2 t
{
+ s0 q1 U" L3 o* \ AIC31_data.uint = MCASP1_RBUF0_32BIT;4 N- \( Q j& x& v. M3 r
return (AIC31_data.uint);- `7 L1 M3 j; }! Q2 _. Q" q
}2 _& `5 L- A- t, g0 @+ m- I
: n8 R' o. o* I4 I1 o: f% j |
|