|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; `( w5 a7 m& b; qmain文件:: \- B; ?, t- t+ s& L# l! u
interrupt void interrupt4(void) ( R. x' ?; d3 t: F
{
* d5 h" f/ |( E Uint32 sample;
% V& V% A# k- @; i- Q7 Q0 W9 }6 t# R/ g+ T$ C
sample = input_sample(); // read L + R samples from ADC
# B& d% R& f7 q output_sample(sample); // write L + R samples to DAC
D) k9 d, X8 E3 A# I# f% i return;+ Q7 }' `: p' T( D; z
}' A0 f! j) M" w& ]
0 F3 E5 X6 F# ?; Rint main( void )
. ~% M: t3 j: c& W{
6 J2 ~' }% v) ]$ ?$ g1 w/ k
6 I' I" ^& P( l3 T: J /* Initialize BSL */+ b0 j9 i9 u) ?, w0 D# e7 x! k' }
EVMC6747_init( );. N' L/ R. a' T' A
/* Call evmc6747_intr function */6 b; X% P% G$ t7 Y1 W5 j
aic3106_init( );5 k# S4 s+ t2 R& c8 E
while(1);
, A+ V" H" B" l4 l5 @# K4 L# W6 W S}
7 d/ J% J1 Y4 x) J5 X# ^( @( u
4 M o1 n6 h" A, L
1 o- a X) c/ \4 o0 u8 N0 X4 R/ oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& k2 f V; @+ [. m+ V8 y
/* Initialize MCASP1 */
5 t# O- t; |: y9 g, j mcasp = &MCASP_MODULE_1;( r# Q( o( v4 V; o9 l
mcasp->regs->GBLCTL = 0; // Reset
! k& T* H) `# T9 H2 s mcasp->regs->RGBLCTL = 0; // Reset RX
& A* l% o- C0 p% i- p* s mcasp->regs->XGBLCTL = 0; // Reset TX
2 d% J* G( x; @- K- x mcasp->regs->PWRDEMU = 1; // Free-running# H! ^0 d0 [, G+ l5 [
// configure McASP0 receive registers
8 @" _6 Q4 B4 W+ Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ X) G$ u5 K) H, Z0 r5 G3 w$ H
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% X+ L4 m K# s" K: V( s mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% ]: a( L9 f. a7 A' T! W, j
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 p; U' N2 n, g3 a8 b* t mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
: f; j% Q+ }, r9 g8 g6 k mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& d5 Y: U* q B, y: v+ O mcasp->regs->RINTCTL = 0x00000000; // Not used* C; a9 u4 x% ?* i. [* t) P3 q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ h% S& G; P! X! s: s: W% `8 m( A! |
% v$ @- \* f+ B9 p8 ~1 w7 P& F- R) e9 e mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 P$ \( D7 @8 [# i% M9 n$ `# w: O
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% A2 F; Z% L/ P- B: S+ `' C1 { mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( w+ l9 ~6 q0 M* w
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& N. F" S8 `4 ]' w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK1 ^9 J9 K- f5 D3 W( @
mcasp->regs->XTDM = 0x00000003; // Slots 0,15 F t% e+ M4 c. k6 k
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 @* Q1 p2 |. F9 } mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 R3 N: H# _- e+ m$ F5 K) }2 l
! d+ S# Y( e: R1 q# _
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
& L5 T ]2 F, [$ `/ f" a& s% b mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 j4 s9 ^1 o' ?# O P
mcasp->regs->PFUNC = 0; // All MCASPs
. f$ l" ~" S$ J w( g mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. k2 m: {. P) h" v
, k6 |6 T0 }6 e; W: D mcasp->regs->DITCTL = 0x00000000; // Not used1 e9 |" U4 d& p9 h5 P B
mcasp->regs->DLBCTL = 0x00000000; // Not used
" M4 x. V' ?0 p3 k mcasp->regs->AMUTE = 0x00000000; // Not used# G4 L7 P' b( O# c$ f
$ n3 g7 ^" W( Z! |- [/* Starting sections of the McASP*/0 Q+ h3 J3 o$ w3 n8 u0 e4 P7 n1 ~" |
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , h b5 b% h5 |5 O- L5 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # t! Y, |9 }( n$ d
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + h% L/ q0 W2 B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 t0 ] {1 J" P$ p- z. {/ J; V7 S! A) U# P: I3 |+ e
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- V1 J" }% e# K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" r' q3 q d: M9 a
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 B7 T! i- _0 }2 d% O) [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: x* o) V) x( I( I, v6 Q0 ]6 N
- F, x! a! v+ ?
mcasp->regs->XSTAT = 0x0000ffff;
: ^8 J" i" [2 M' ^ }3 T. E, A. P mcasp->regs->RSTAT = 0x0000ffff; 8 Q; @4 `5 j" k }& f2 m7 K, v! w
! H* y0 A. ?" i8 L7 y, u1 w9 \/ w7 n4 _
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ L- M- |& j& c8 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 u+ ?( ?% ` A% l/ W" M mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' j% t6 P+ T7 x6 u, x4 M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 \3 {8 d3 p- h G) ?9 X
! C' u1 l% F0 L( I( k% \& o /* Write a 0, so that no underrun occurs after releasing the state machine */
( e6 L- x- b" y mcasp->regs->XBUF5 = 0;
" { `+ Q* |( L( P0 J7 O2 `; b+ M mcasp->regs->RBUF0 = 0;+ I' a G4 u" m6 p) p% I
: R: E# ?, E: @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 ^ v/ V% A5 F% ^' W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) d# ?- {6 L: ^9 O$ M. N mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" J! u9 O9 y* I- B4 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% {9 e7 X( W' F% e0 o) ]9 c# L+ [- R6 L. ?/ W" A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ x8 `8 T; x" j/ w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( A6 \9 t/ t* T9 m0 p& ^
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % h( a, F }3 |( f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; |+ j/ a8 }9 D$ h% ~$ `5 S
! `* [/ D# l( d$ N CSR = 0x0000;8 \# ]# ]5 J9 q; V4 q z; ]
INTC_INTMUX1 = 0x3d;) ^1 O9 d% v: F# b3 `5 V. X) t
ISTP = (unsigned int)vectors;, W# ~4 @: x% g' J& F! ?% r
ICR = 0xFFF0;
5 R* R, Z: u; X( q* t; G IER |= 0x12; # R1 ^0 w0 u, Q& v5 Q/ R$ z
CSR |= 0x01;
% H; o& Z1 m, J( g$ X7 o' X' U
& M) x( b3 {4 x! W% J
/ w! W8 D8 @% J/ I1 Y( G
9 H4 z3 D$ A( J( F/ q还有就是两个输入输出函数:. u9 L& u7 k$ A% ^" G1 F
void output_sample(Int32 out_data)
# R" e# R, A5 e5 Y{
& P9 J8 [! s) M! b- \: \: z AIC31_data.uint = out_data;
. p4 b+ s: D4 _4 _ MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 o4 _. t% {$ b" b$ L4 b}
' a, m2 i5 a" C& |( ^& \3 k! k1 d$ _7 T2 D6 x5 ~8 T
Int32 input_sample(void)# v/ w: s# j- J
{
, r9 w1 v @! d) v% j4 H0 k7 Q AIC31_data.uint = MCASP1_RBUF0_32BIT;( e% N+ r# Q% z7 j
return (AIC31_data.uint);/ j$ G6 a+ ^% l, q; ]
}2 O; a6 C9 T# N6 k8 Q& [, D+ R
1 T2 B4 R* A' O$ u: Q |
|