|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, c4 y: \3 Q0 O9 I9 c- C
main文件:
9 y h: z! U" e/ s( Qinterrupt void interrupt4(void) 5 w2 ?! I# `+ C
{3 N, T; q- Y+ ?9 G: v. z
Uint32 sample;
7 u& ?- z' r8 Y3 d3 r6 O
8 ^( P) i" z6 O3 b sample = input_sample(); // read L + R samples from ADC c: B& ~2 ~9 k
output_sample(sample); // write L + R samples to DAC 2 ]4 R# H8 l" y6 W' c. w% E7 v; k
return;# ?4 h# {0 V1 @$ F( Z; k: [
}
8 Z' G% A4 f, r$ N" |$ B# V6 z3 n( K# ?6 d9 N) }" V
int main( void )
7 w+ v1 L5 p" e4 e) ]{5 V7 n- b/ m+ l8 q& o f
; Y/ h g8 G0 R# r% B4 O /* Initialize BSL */' a/ B2 }$ f3 [( b: X% e$ O
EVMC6747_init( );$ V* X! }7 }6 W8 n0 r) R4 D
/* Call evmc6747_intr function */: e$ D, k" S. E# Q h8 e
aic3106_init( );
- Z6 w4 U/ W2 d$ p while(1);
5 |3 t n% f: [9 m}
" d: u3 L. L7 H2 {) P6 R/ B" b0 _4 v3 Z$ V) P1 Y% P" P
0 m! N5 Y0 E5 l9 E5 w' j2 x1 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 n' ?1 Q) p- v# W5 E( ^5 k
/* Initialize MCASP1 */% Y) S) W/ y2 I3 O
mcasp = &MCASP_MODULE_1;
, I+ i8 U) A( a; g' ?$ y mcasp->regs->GBLCTL = 0; // Reset0 o" ]# w1 t& v- x
mcasp->regs->RGBLCTL = 0; // Reset RX
' N4 V0 ^/ L1 z. U) o0 Q" U mcasp->regs->XGBLCTL = 0; // Reset TX
7 \ s* s; B( C; a: t mcasp->regs->PWRDEMU = 1; // Free-running
9 ?6 N: L/ E5 J$ b( E2 F // configure McASP0 receive registers
* c0 M$ r0 C% D, M5 _3 x mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# t# w/ t3 c& [ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" v* }, _* K0 e; G" k5 S% O* V mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 e9 f- R; ]7 x5 B6 T6 d8 S
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, _% q7 R7 m; y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- u* r$ ?) i o' _1 D! Y6 h% d mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, F) ?1 G1 W' u' I7 ~ mcasp->regs->RINTCTL = 0x00000000; // Not used- W$ ^& {. ~" Y- ?& j! @
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ \' H) h: U7 M j- H4 w
! J z" a0 s4 \$ ]3 J6 [$ _5 x5 J8 n
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
! }4 O9 Y* C9 k# v2 E- h mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 p6 q5 x& `1 o, h5 l" E. A mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# I1 a$ h# u2 V# a" |4 t
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 P; ^! Y6 j$ \+ c mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 J* A2 N' X- h* U3 K' [2 a+ x
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
: X3 _/ ]# q9 a* E mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
' K) s! C# V) f' z2 o mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 v/ I8 n5 P" z) ]' X% o5 b
7 C5 P. w" ]2 R. S1 t' K
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 G6 ~: _2 X( ~) S9 d4 h
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* l- T O: V; t3 {5 g. g
mcasp->regs->PFUNC = 0; // All MCASPs
+ T6 H6 I8 c9 S* e [. x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. `9 y% P' I& j, F D, A2 q7 {/ v/ H
mcasp->regs->DITCTL = 0x00000000; // Not used
3 E+ d& J8 t7 I+ [0 g( m mcasp->regs->DLBCTL = 0x00000000; // Not used
4 {& e4 U4 S9 a& ^* p' k; m mcasp->regs->AMUTE = 0x00000000; // Not used
% f5 D) x6 J- B- {" d% m* i
; G+ z: ?0 i7 k7 k6 V8 V/* Starting sections of the McASP*/4 O' p/ Q0 g" ^1 X3 N( y9 J4 _9 s$ f
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% u4 L( A5 q2 t4 b+ g, t3 r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( @0 R% Q9 u L' N- F$ _) O8 Q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 T2 b4 R" p2 e8 M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. H/ q( b3 E/ C: z1 F( I6 v% {+ u4 ]0 h( [5 C! \6 P e
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 v* U, ]3 L; l5 p [( Y" B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" D% A- Y; ]9 f' t& g, H
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 g' H; d3 F, Q' a: h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# ]+ a* N" d( d
u$ N; F6 T5 h u0 F
mcasp->regs->XSTAT = 0x0000ffff; 4 o0 f% ?1 R" S5 n/ {
mcasp->regs->RSTAT = 0x0000ffff;
6 a6 ~! e p1 |# U' O* V& L( P, s3 q" V: y" S% w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% `+ Z+ O, h1 Q. W" N3 n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 ^, D% e5 A9 r
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 u& N7 _ Y( H2 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 c$ _' V4 K: _7 K4 }3 |8 G! ~: u
9 V$ z0 b) ^$ I, `5 y /* Write a 0, so that no underrun occurs after releasing the state machine */( F l! I' r/ _9 Z
mcasp->regs->XBUF5 = 0;
/ o$ o4 r) j0 _1 u( B! L mcasp->regs->RBUF0 = 0;, U# F' |# f& o' s' g
5 u7 m+ q0 {7 }0 |) d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; `" | P s& H: e& x/ X( Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* }8 y8 ?$ l3 A1 B+ v6 v. O7 v4 C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; P2 y- S/ N( B7 g" o2 C! `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 m1 z# f* T4 W( r) R" }! _- d4 D. U( W8 I; |. C% h9 a+ P
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . I* O: G3 u+ w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 K; |6 K5 t9 v% b4 ]* x% u mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, Y# A# T1 o' b I% R! R- [5 O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# \" t k) }" s1 Z
0 q- `2 N R- }( g" g* R- Q+ ^
CSR = 0x0000;/ D3 t H/ }# m5 F4 w2 @% X3 N' z* ^
INTC_INTMUX1 = 0x3d;
1 d% T+ q9 a/ k+ x6 X ISTP = (unsigned int)vectors;
- |( h- w7 j# Y ICR = 0xFFF0; ) B$ A, b8 \% d: g1 _; p8 H7 T% M1 y
IER |= 0x12; " m3 \2 j" M9 e+ K, `# w3 F
CSR |= 0x01; 3 s! }/ D9 x! k! O" x" {
7 a5 ], o, |5 b6 M i; e# {1 Z+ X( t; X C1 z3 c
, j( T+ s% @8 p* b) u+ a3 v还有就是两个输入输出函数:; m1 a+ Q: g8 e6 S
void output_sample(Int32 out_data)
+ q' }4 ]% R+ t7 g{5 _' B8 R0 N* i
AIC31_data.uint = out_data; - v; b8 y' E) h d3 e
MCASP1_XBUF5_32BIT = AIC31_data.uint;1 d0 h0 U& s: W) ?6 V) k
}
% ] o& v8 F4 P/ N2 Y
7 S$ J8 M1 e5 v+ q$ CInt32 input_sample(void)% i$ G) f/ ^$ c8 V4 s' x
{
* S* i+ C3 S8 p7 H. y" h AIC31_data.uint = MCASP1_RBUF0_32BIT;
& i% X8 B) e" S) J& D4 I5 Q return (AIC31_data.uint);
9 V$ L2 r/ t% E& M6 \( K: `}
* r" L6 R! u% |- y+ a6 n0 D2 q( N* t- d: g0 s- x" p8 _' t. ]
|
|