|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, L) }# Z0 G: R( g7 I: s1 M1 Z# qmain文件:
% a' K6 w5 n7 ^interrupt void interrupt4(void) : d5 H: B+ L$ ~7 X# n
{! {* d6 I8 H, B7 M" j
Uint32 sample;* \/ [8 d4 t4 Z' Q9 w7 a
* | q6 F1 i4 Y2 a
sample = input_sample(); // read L + R samples from ADC1 T' r- S& G4 ?/ }
output_sample(sample); // write L + R samples to DAC T, e, ~ ^! d( y' m
return;# \: }' u6 x x* n
}1 Y) P3 b2 X- f' D- q
! A7 m6 @, U6 ^: m3 w: _( kint main( void )
; M5 K5 b0 z3 {/ ^{0 v8 ?$ \5 S0 Y" j5 x4 R2 {
7 |9 k* y2 ~1 u! s, |) ]
/* Initialize BSL */
1 u3 g6 S: @( N# J1 B EVMC6747_init( );
: L( P. s6 K; k /* Call evmc6747_intr function */5 |5 m$ ^) y% H2 D d$ ]; f
aic3106_init( );
0 a& N. L6 p( P0 X while(1);& N" g+ m7 l0 s1 F" M& h0 m
}
, L( |% Z2 G# v) s2 m% Z
. N1 `$ g! ?( M* o: T$ H' n) ^6 W) U* S" @3 t. x) k9 J* U: q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) L( N# {) h! _% H6 X0 v/* Initialize MCASP1 */
/ y/ j( j5 g c2 x2 ?9 Z. d mcasp = &MCASP_MODULE_1;3 \* e9 W" ~2 R/ z- Y! S
mcasp->regs->GBLCTL = 0; // Reset* C2 H: X/ |% B" K( j3 b
mcasp->regs->RGBLCTL = 0; // Reset RX
9 s6 Z; e6 H% Y) L+ l2 { mcasp->regs->XGBLCTL = 0; // Reset TX
2 w, b$ j8 m, [ }9 |! Y( X mcasp->regs->PWRDEMU = 1; // Free-running
' ?; R; I/ f$ j, Y' v // configure McASP0 receive registers
0 ~/ e6 _/ k; G/ o2 Z: L9 v mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% }7 P* }" f# o2 ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* T2 [4 ^- X. L
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# l( i, w, |% ?& D3 ^
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# I) a& K! I- \/ X
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
. B, m6 ~# _! m& ~' c; C mcasp->regs->RTDM = 0x00000003; // Slots 0,1& F+ G* m. J8 ~6 E3 o1 M1 ^
mcasp->regs->RINTCTL = 0x00000000; // Not used! q( v$ u" a: W# g1 Z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; C) r+ Z; u( ?2 L- F) [3 ~9 I
7 R# f2 f, z" y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 t% |3 f9 j1 c" M4 S- Q6 C+ O$ h
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ x* x1 R- H6 E! k* N mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 r- f3 H2 x8 \+ [1 O! o8 y& E mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 F8 f2 [- [+ }. j
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% L* e) I9 T- F. _) m mcasp->regs->XTDM = 0x00000003; // Slots 0,1
; N: E6 B I! B7 l1 r mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 D" ]: r! \1 _( ?! {! q
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. p, H: a& D% b p2 Z R: W' _. U: S/ n# G! Q$ Y$ y# j X
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: d. S; P- Z& K# F mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
% N( h# L u- @0 \- j mcasp->regs->PFUNC = 0; // All MCASPs# q Y) j$ t! |" \
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- |( B: {+ m/ v! V+ ~5 F3 j' d, ]1 m% {+ O
mcasp->regs->DITCTL = 0x00000000; // Not used
3 H; U% ?6 E E1 _: e p mcasp->regs->DLBCTL = 0x00000000; // Not used
0 i% Z% [( T! |8 E' @ mcasp->regs->AMUTE = 0x00000000; // Not used
) x2 a7 e2 }0 t
4 k6 ^: Y/ Q6 ? _/* Starting sections of the McASP*/2 E; ^. s9 n- a$ x. n# @
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' D! D& _; Z, i% f, u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " D& g% u g( M3 Q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / v, Z8 c* f0 O5 u/ Y! O& u, \/ g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 v* U" F4 X0 f; v. b
( _7 A0 X& ?- h% }) w
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 R% @: S2 B* p7 ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# c# n; c; C* c* x% u* I$ L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 ^8 p) t! N0 M6 O: V& W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 o& x; ~! t0 D9 A% B" k
2 _) W% G: ]; M: j
mcasp->regs->XSTAT = 0x0000ffff;
5 D& L# W$ I0 m4 C mcasp->regs->RSTAT = 0x0000ffff; $ V1 R" L' E! H2 w
) w( t) X9 k: S4 _; {! S' T4 j4 M T
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& T9 \+ G% L4 t7 c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! l+ z+ P0 L( J& F" T4 u7 s. S mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% T) F7 r3 @+ Y" [) f0 w/ n. K/ N; J# R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) F2 G7 u- c7 @! T5 \
5 T E7 m+ [ k
/* Write a 0, so that no underrun occurs after releasing the state machine */
; W9 ^0 d4 f# \/ \! X# e mcasp->regs->XBUF5 = 0;
0 F; k$ |, ^% ^* |4 _% R mcasp->regs->RBUF0 = 0;
7 R" z) p/ D7 ]9 g
. P3 A0 u. w, P: y0 z mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : x( z Z' ]0 P: p$ }9 z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 z& T: D$ e* h5 |5 I- H" o mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & G7 m* u% D2 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 M! i* q: o+ {' S6 N' F$ K; i% z! Z
3 B; K2 Z! G$ X* J. \0 ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; [: p# _' z! |# _: z* Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; A1 k- w( K$ t, K
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' y6 B: d# A- t9 u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. u; k: T5 d5 }4 A$ M- j6 O
& P9 c( b! H% l5 T) m
CSR = 0x0000;9 W/ {, z7 W% ]. Q6 W
INTC_INTMUX1 = 0x3d;
. n# v% o- u# N7 e/ Z9 A ISTP = (unsigned int)vectors;& m( j% O* k8 `( d2 t3 l+ ]8 L
ICR = 0xFFF0;
3 s u* e( A- f, C) |3 U/ j2 e3 I) q IER |= 0x12; . H3 z" n; [, `# \
CSR |= 0x01; 3 C# P0 ~. N0 \4 J9 d
9 t; L5 E2 b5 T$ |$ X7 P
% l* h- O1 |: V& E# Q
4 l7 k- \" @1 \1 N还有就是两个输入输出函数:
) a: I" M4 h8 A4 ]# a; g1 E# Yvoid output_sample(Int32 out_data)
7 U' n% M9 m, L! g, e4 `{6 { ]9 c+ f1 |
AIC31_data.uint = out_data; 5 {# g; f( I, S* O1 p
MCASP1_XBUF5_32BIT = AIC31_data.uint;% R3 S: L% C$ K' M
}1 c' s `+ u! B9 M
8 Y! l+ v# _6 v* \6 l
Int32 input_sample(void)
4 R8 [& O7 M' ]! q{ " [8 C; W; P& `8 ^% h4 ^
AIC31_data.uint = MCASP1_RBUF0_32BIT;3 g- m5 k. x; z" | R( @7 j
return (AIC31_data.uint);1 G3 l+ y" q/ X& _2 |/ t) g
}: ~4 o1 G9 n/ }( B& g1 M; y
+ M7 G! ]8 l' U% `! p# E |
|