|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. X$ q2 s8 L. t$ xmain文件:
" M! B5 X$ Z& n( f# c0 Y# Ninterrupt void interrupt4(void)
; U6 g6 R+ ]" {# L{
- ?- t& j+ |) o6 P/ O8 R# R Uint32 sample;
) X/ L: g; ` M7 ~1 b+ z
7 ~- h, ^/ K, p( K1 N sample = input_sample(); // read L + R samples from ADC
& o3 l. v! _8 c% j: X$ x1 u& E% H output_sample(sample); // write L + R samples to DAC " [. _- g& b+ x6 u, a
return;
' s( \) p& c* ^( h}) K+ J2 n! U1 W4 ?3 n2 _
# |5 m) y; Q+ Q, F& {' B; m3 C
int main( void )8 e: Q( m5 Z ?8 G) S
{) x/ W% J9 u( v
( S% s' ?& V# t- s) F- e* I) h% @ /* Initialize BSL */
7 p4 T0 d3 V$ T% V- F EVMC6747_init( );
7 o) n' {; T! O! `3 b) Q" v: t /* Call evmc6747_intr function */, \' G: A) _. h) Q; a% C1 k
aic3106_init( ); ^# F& Z" o# k* g4 e
while(1);
, T2 x' A2 H3 d/ D3 g) _}
1 _$ G) t. J3 h$ V4 y7 t. W
! W W$ Z/ X* }5 R$ y9 O) N+ Z. n: x
. o- a& o0 L& N1 Q" y& _) ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 I6 [5 _1 h% O' f
/* Initialize MCASP1 */, l2 m" M5 p( R6 Y$ x" r' Q
mcasp = &MCASP_MODULE_1;
$ {( H/ Z; U: C mcasp->regs->GBLCTL = 0; // Reset5 Q! H2 G; ~! A. @/ q
mcasp->regs->RGBLCTL = 0; // Reset RX
0 w9 ~9 @+ n# a mcasp->regs->XGBLCTL = 0; // Reset TX
# }! R) E, h, r+ z- I( u0 [8 _ mcasp->regs->PWRDEMU = 1; // Free-running1 i) n8 P% Y) x( l1 n# k
// configure McASP0 receive registers
+ l5 O) | ~( l( y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; u+ e! y( i8 ^- Y& h( l1 w4 j
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 A, ~, ^9 H6 i9 A( a: U3 N: _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- C+ r$ H6 v% T3 m) k3 f
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 C' M% l$ T, Y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 {) O7 s: v# n8 g* w6 D
mcasp->regs->RTDM = 0x00000003; // Slots 0,1- w5 s0 d+ L+ B# ]
mcasp->regs->RINTCTL = 0x00000000; // Not used6 t4 J" I4 {4 r
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ @2 v, f# y+ P6 W; q# f8 T# f- T& [/ m' g
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 X% X. U, O; V" m7 G/ s mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" W, ~5 n' x# c# m( b$ E
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, q, {" Z# R! I' r6 t5 k! a
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# Z: T1 C5 \, F1 I6 A$ N! e4 A
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& i9 p& t3 o, D/ P
mcasp->regs->XTDM = 0x00000003; // Slots 0,1+ ], j H8 `- u. L3 \! `
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! [9 j2 k) u9 L$ d* E% j6 M mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. r. R$ e# k+ ?9 @1 @. N6 q) L: E9 {8 O$ ?7 i3 y" n0 I( `' y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( N- a* o; l) q9 F0 ~: m3 P* A
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ J0 {7 z, L* d0 [7 S7 B3 _# A# r8 ? mcasp->regs->PFUNC = 0; // All MCASPs& r& b% i$ K0 m$ @2 z# l. k, |8 }
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; q4 q4 U! N: l) ~. Q4 a9 h+ u9 H
+ s' ^( x4 W5 U8 s5 \ mcasp->regs->DITCTL = 0x00000000; // Not used
- g. S a1 q$ R7 K mcasp->regs->DLBCTL = 0x00000000; // Not used
3 I! V! V# @& ` ?3 B, J mcasp->regs->AMUTE = 0x00000000; // Not used* b: ~8 E5 b% U
6 i1 N* D' m% j7 _/* Starting sections of the McASP*/$ o6 j! z3 y. P$ J% I
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; o& `7 A! C- O4 Q# |0 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 U' [! {% H! _/ J' D4 l
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 c3 [6 ~4 N3 @9 I' a& ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 i5 _( u$ M* Q& o" R. B+ M e' L
- ^2 Y" i5 H6 a. s. O* u; r mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' E) Y( d; r1 b5 R. x" f' ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. P* N' A) @! O
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 u2 ~( G, ?! U$ `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ m$ s" o+ T" p5 J1 ]0 I; F
: _( D1 I( Z4 g ?& G* t! H mcasp->regs->XSTAT = 0x0000ffff;
9 N0 \. p' p3 A mcasp->regs->RSTAT = 0x0000ffff;
' X T3 B+ W& o! e# L
% |3 O4 e- c2 m, Y/ G! c+ c; O. D7 O mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 V2 ?' w5 y+ @ a* @" c* M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) t- M- _% U; [ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + j5 ?, F" S7 }2 X- V- ^ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% V, Y1 @! P) f; h. h6 t7 B& w: I6 ?5 s( G
/* Write a 0, so that no underrun occurs after releasing the state machine */. ^3 `$ ~; S* x% H" i V5 w9 @+ h9 Q1 p
mcasp->regs->XBUF5 = 0;+ s2 T! q/ v; s, D
mcasp->regs->RBUF0 = 0;. M3 J' J. c6 K$ r' M6 M9 d X
# s4 h( D# t- q4 Z& } M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, a% S% j0 s* h( b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( `) N' v ?% d& h mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( w. O( l! t T, G1 f4 j# `5 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& d1 f! Y' t; J7 L8 i
! J6 }& v5 q4 \& j
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, }: V8 X3 v4 A# ~/ s" _' P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ \! R! r1 K) D3 l4 X. a7 a3 x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* m; b1 w L+ M4 W+ v% _" _$ O$ e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 B4 g' q. s' D+ e b6 m$ j
! J( ]- C! i& k8 r! e* m7 g* R
CSR = 0x0000;
t1 a8 m! O1 f+ `' |) s, J* b% ? INTC_INTMUX1 = 0x3d;
1 q5 M0 x, P) y. y ISTP = (unsigned int)vectors;) A3 [, m! f: F. r" l, A
ICR = 0xFFF0;
# U2 Y' P5 }) F6 C$ v5 w; ^6 l IER |= 0x12; 6 |, ~: y, F8 E0 @" _* n- [8 R
CSR |= 0x01;
Y$ p! o3 M+ h& V/ A9 d
) g' z, M& I1 p4 a
3 L4 B# i) m1 m! I5 f% ?# s- L7 q0 {9 Y% N* o7 e
还有就是两个输入输出函数:1 v1 c1 G. |4 L, N: H
void output_sample(Int32 out_data) I. b' C2 B- `0 _. T# R9 o/ {# r
{
# J, H/ ]+ C5 R" V% M AIC31_data.uint = out_data; ( n7 T: D/ [8 _6 r9 }* R
MCASP1_XBUF5_32BIT = AIC31_data.uint;1 c+ I: r; ?: p( N
}
3 Z6 @& z* o* T
7 s2 k$ U! [' \' h8 vInt32 input_sample(void)
`8 |. M" Q F; y1 J3 X, K{ 2 D% X8 H: L% | Q" C1 w
AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 P7 P8 _* W$ n8 J return (AIC31_data.uint);8 h! e, f% R# ^8 \6 A# s, A
}1 \. @+ z( |# n" v4 E& u& C
9 G+ u: `# J% u3 Q- y i. ]. X
|
|