|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 a( P2 a, d: _* P2 T6 Q( B- ^) v0 {9 C
main文件:, H% ~/ y7 n( M4 _" Z; X
interrupt void interrupt4(void) ( n$ ?, b& ^) ]. Z* `4 D
{
" t" V! [& I @4 o$ { Uint32 sample;
8 S$ V! t; P, l! V m/ V8 m( r, I' ~: b. {4 f+ U+ k
sample = input_sample(); // read L + R samples from ADC. J" H) F! O, h5 n
output_sample(sample); // write L + R samples to DAC
4 j8 u; P' y% ?6 f8 S: {; ^; q# j return;3 _1 E) ?4 U* C" @4 d0 m! D( I7 [
}
8 P% \+ s: S, P0 c; l7 j/ J/ I% g. V- p- S( d
int main( void )
2 f. Y1 z+ j& M" x' u{
# |" J% L# p8 |1 t' L3 w! K t' [& `( k$ u6 f6 g" P& A
/* Initialize BSL */( j/ F' Z5 r- p, ^# R* y/ E0 ^
EVMC6747_init( );( F& K p" _, T- `
/* Call evmc6747_intr function */' U# }! M% L( }; P# w4 u6 u
aic3106_init( );0 O8 S7 Q& Y& w& p2 p# a/ E* z. o
while(1);
# j6 q; ?! N2 I0 ]: w% D6 U% ~7 z}
3 a3 H5 o; e3 r Z6 t3 t
* t: N1 G9 M. C2 c s" m
c- V i/ L, Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ f9 a l6 S: q( A$ z9 w$ f/* Initialize MCASP1 */8 m! |( Q/ T M4 b; Q
mcasp = &MCASP_MODULE_1;
; @0 V* f) n: S4 l" x/ |) E mcasp->regs->GBLCTL = 0; // Reset& o) U j! d0 S
mcasp->regs->RGBLCTL = 0; // Reset RX
+ |9 e. Y3 n5 u: I% a: @ mcasp->regs->XGBLCTL = 0; // Reset TX$ B# c& [7 B8 e
mcasp->regs->PWRDEMU = 1; // Free-running& G( _3 D+ U( b* o) k ]
// configure McASP0 receive registers
+ Z- ?! D L1 d; H5 p mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% r) v9 D) G0 X- m, F1 K' T
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus U8 Q% H! g0 Z% d! ?6 ~
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& {$ P. h/ l+ j7 _ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 U/ B. |0 X6 J
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% Y" I! g7 n% j* h
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) ^9 V3 g" A( `. s+ C4 h5 \; ~ mcasp->regs->RINTCTL = 0x00000000; // Not used, e9 c s" w; f- L0 m+ \
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, W& _$ A; O: ?* m/ f U5 s% U4 o
( a A- M4 Q4 T5 N- j0 g mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
$ G. t" `2 v. X/ u; G mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. W8 a( [; u' P: h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- T. W) i) k4 @% A) q) R) p4 M& N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 h" }2 R# M: W8 w7 U) G mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: }( n5 Y" f; ?- \! H
mcasp->regs->XTDM = 0x00000003; // Slots 0,1* w6 `; u* }6 {' N# `
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 K, I( N& s8 H. I s( J4 Y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" ~: u/ s3 s( N: H3 @. G. u
# c" E1 d& y: f mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN c/ z7 P5 G! y# J- G/ P
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 R# v) j' a" s; E; I
mcasp->regs->PFUNC = 0; // All MCASPs3 E5 i1 j: T4 W$ ~- N- \ R
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ I2 O3 @9 O" t
7 } U+ ~$ h3 |% u* w! p% Y mcasp->regs->DITCTL = 0x00000000; // Not used
# W2 \- X% k0 Q& N2 ~. N" D" u6 V mcasp->regs->DLBCTL = 0x00000000; // Not used
3 s N& }" K! B! f2 H. P i) g mcasp->regs->AMUTE = 0x00000000; // Not used3 a2 e- i! N. C, D
) S9 R8 ~, d3 s( b) r8 h
/* Starting sections of the McASP*/
* X# a2 A$ a5 S: K. A2 u: v8 y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; k) B- X3 n7 b( A0 ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, H( M. l' ]; y5 ?( G4 A& | mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 ]& _/ p, K$ q2 s2 C% ?3 t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" z/ e% d' U4 L! L# O4 Q5 o3 r
5 D6 U2 `( v Y& `6 }9 @5 K
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! ~ ~+ u; X( D6 R7 R, X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 v9 e7 ^% Q# l3 h mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : f; c- _5 |2 |% X) s; t- p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 @: w# n) A# E% @' u/ M; L; D3 V. x( d, P
mcasp->regs->XSTAT = 0x0000ffff; . v3 }' f) U5 z
mcasp->regs->RSTAT = 0x0000ffff; 5 x8 X( e: \" n- D8 t4 I+ j
8 J1 R8 s' j: A, G8 p
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, a1 T: g( [! c5 ~, [' }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( z6 Y) ~* J/ A( j mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; E( x3 K6 {5 W' E2 y8 k) a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 @, v! T* X& R O' j' R- K9 F
, J. I2 u: u7 M' ^2 W /* Write a 0, so that no underrun occurs after releasing the state machine */& Z w* F" o. n8 H- p: E: ^
mcasp->regs->XBUF5 = 0;7 T+ C: ` b. u( o
mcasp->regs->RBUF0 = 0;& w( @) d: l5 \; N o) X
; U& y1 U; v7 ~ D j- \$ k
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 f' c* x" S" k5 X+ U' X& ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 _3 Q5 U# N* M9 W$ v
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 j( |" i. v* J2 `0 q0 y9 l+ B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 C) ?4 p5 }' d; l! i) g: V$ K
5 j/ `: Z/ Q# s% k5 h) a% S# {5 r' b6 F
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 x! E1 d# u! u2 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% R( W- v1 L2 C, p7 n mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 l1 ]: O6 K3 p. M* a+ \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* _% c0 e5 E8 x0 k; U- U1 o
4 t$ l4 D5 p* b+ R/ T0 C
CSR = 0x0000;, R7 J0 P1 e1 U7 [( S+ z' a8 D
INTC_INTMUX1 = 0x3d;2 M$ P$ s! @! G1 \
ISTP = (unsigned int)vectors;
" ^+ q8 @$ h' D, a+ j! P ICR = 0xFFF0; - r `0 B, \% i& U. k6 l! S. b
IER |= 0x12;
7 G3 O/ x3 L8 K& W3 b2 X7 u CSR |= 0x01; & M5 E- k" c% A" V6 W$ Y
5 p, S2 _# ^+ i; I0 k! h
% r$ t9 |; R9 V4 n+ O1 e
0 z T$ e& h" k7 w9 T+ j9 D9 f, I
还有就是两个输入输出函数:
4 n$ y Y3 z5 }/ c! x, r! q- {( Rvoid output_sample(Int32 out_data)7 w$ b) w2 J+ A) B4 d
{
. A; s" s, {- K! B+ U1 I- P AIC31_data.uint = out_data; ; q* M# ^1 _! g* K T& R, M0 G* t8 {5 i
MCASP1_XBUF5_32BIT = AIC31_data.uint;' C+ Y9 o* b8 l! \% G% j7 k" F, Q
}- [( r. M) a9 H
" E- L9 {7 E4 p8 k! |) ?Int32 input_sample(void)5 ? E) f3 @8 s5 O& v9 G
{ 0 @. W& {6 s% V+ }! G
AIC31_data.uint = MCASP1_RBUF0_32BIT;0 ?; f5 n; Q( G5 b8 K
return (AIC31_data.uint);
+ A, }5 V; }2 o- F2 L& G}0 T& X9 i, k8 U, N
* `) g* B: D0 r0 z
|
|