! X, ?: ~/ @+ b$ m4 k sample = input_sample(); // read L + R samples from ADC" ^& z5 P$ v) _: m
output_sample(sample); // write L + R samples to DAC / o; E+ Y, M; M6 r% U# Y2 ~ return;) Q6 i, J3 A# n. q, {' p
} , J+ a/ r) ]2 t: X" d , l5 B( v- h9 v" y/ p: b, Y. Cint main( void )+ R' O9 J5 F" e5 k7 }% O/ c
{ 2 H; A/ Y+ |$ r% ~: A q4 G0 x, P- C6 I1 v1 f
/* Initialize BSL */ 3 T! ~2 `3 r; {) W5 ]6 R EVMC6747_init( ); 6 k" a. _: ]0 t9 Q /* Call evmc6747_intr function */ 2 g( Z; s/ m) @0 J1 t7 X) i4 n J aic3106_init( );3 c' r2 n& u4 c& n3 c- l. Y
while(1); ' ?6 j) @5 i: ~- q2 o: s}3 n6 z) ^7 ?* h) `
/ f0 \$ g. ^# u/ k- J' y+ s
" x2 O! e' j; L3 d( t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) {7 w( |, Q0 V; {5 x; N
/* Initialize MCASP1 */, W* Y' m" r, K/ U0 {6 k
mcasp = &MCASP_MODULE_1;1 w1 t7 ] f1 o8 ?* }. z
mcasp->regs->GBLCTL = 0; // Reset % d2 a$ i# N* v mcasp->regs->RGBLCTL = 0; // Reset RX * M" s3 ]( A. P. x J8 ? mcasp->regs->XGBLCTL = 0; // Reset TX% S) B3 q1 b+ M0 _/ V# d' `9 x3 p% W
mcasp->regs->PWRDEMU = 1; // Free-running 7 l' P. ^5 l5 O D // configure McASP0 receive registers % `. G6 r) P% C9 D+ o mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used / w' L9 _( q4 ^% D, P' Y5 ] mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 i! c' Z j4 u7 ~* s) f# c2 V
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word . U1 V, w4 a0 f6 k4 v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) j! y* y7 k% _: E
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) # }1 o( F/ c9 I, I& {' D8 K mcasp->regs->RTDM = 0x00000003; // Slots 0,12 m( n+ A3 U- g {6 T* A" N
mcasp->regs->RINTCTL = 0x00000000; // Not used0 Q! v7 ]' a3 G. o# l, @8 o4 `
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 b# S7 a8 n% p2 s" P( \) C* m# f T
3 E3 h. Y0 T7 D7 m2 e
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used ; Y2 O' v1 c8 ?/ c* l mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 e" Q8 q- i T# [$ c/ r
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word % r9 h; C/ d; o6 X7 u6 V. [$ ~ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16 ; w% p* P- q, D/ G6 o mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ K2 q. q! q0 d" o, O+ m) K
mcasp->regs->XTDM = 0x00000003; // Slots 0,1 3 N5 y( l6 w4 ?/ j# _2 d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit ; z, {' m4 N1 b3 o5 \2 T | mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 , x/ d3 M8 }" t: Y / g" N' |$ t6 ^0 j1 X8 b- V mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN # Z% S$ ]3 a2 N3 E/ z) j mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT 3 s2 I' d" U1 s# t+ s) d" \ mcasp->regs->PFUNC = 0; // All MCASPs, z8 ? p% X2 W5 l# m9 x! y5 r* F" A
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ k7 h3 d. D5 c' d3 U, ]
: o. _0 v( |& X mcasp->regs->DITCTL = 0x00000000; // Not used 0 [! y- @4 ?! O2 V mcasp->regs->DLBCTL = 0x00000000; // Not used ! E7 ?* G' n1 v( t mcasp->regs->AMUTE = 0x00000000; // Not used3 I! y1 Q' x6 l- e
" m9 I. k5 a2 M( M- i x8 V" I' V/* Starting sections of the McASP*/ / Q+ q& `0 y7 C# B( \" k( Z6 R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ A. a+ \" B4 J1 Q% a3 S$ }+ l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 C7 \4 s6 Y+ [$ { mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * V' V1 Y8 ?9 ~8 u! B+ a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) v5 i1 b. F' O) G& U& A2 \, x" V$ x
% i% s1 G2 ?0 I9 X, g$ s P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - `0 x3 t! ?& E5 H% ~: p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& \' O& x- k6 f" D
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " J! v% P& I! W+ g1 {6 ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 b3 o, g9 `+ V( Q( m* F! C6 Z
1 b% V1 ?+ \ P: L- n4 d3 [
mcasp->regs->XSTAT = 0x0000ffff; 9 _, f+ y8 p. _7 q mcasp->regs->RSTAT = 0x0000ffff; # K0 D1 e8 ]. j2 l1 T( ~
* b! t3 I7 R7 B8 @' \% z. Y- k! _2 g W! ?6 p
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON; . D( H) e0 ?. l$ ~' i6 @9 n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ a, t8 N* W0 `# ]1 q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + B# S1 ]+ n5 c& {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); i( ^( ~6 @" E8 z# X! p5 P$ q5 z: C# ]3 f2 c" @- T$ o) e
/* Write a 0, so that no underrun occurs after releasing the state machine */ o4 \$ g% c1 B mcasp->regs->XBUF5 = 0;1 k5 S5 R7 m, [7 Y6 V
mcasp->regs->RBUF0 = 0; ) `4 s+ {6 o& @7 N3 Q( M) g2 {9 O7 O& h& C3 D! [) y
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % B1 [9 g; ]6 E, f$ i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' h( |* g1 ^8 o E
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % s& b5 f g$ Q0 o. t/ @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); + N$ E V0 q7 J% h 2 ~& I2 z1 G- _# U; m9 l$ t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : ]1 ^ p: x, R- ^' c- A" W$ t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); 4 ]: h- n4 `8 t mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ w) `& `7 B$ x( N5 C9 X: K/ J# ~2 y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, W8 Q& z/ E/ T( f
! A9 O% f& q: [$ p. G CSR = 0x0000;- |3 _) x7 V8 a6 P7 l, P8 Z3 ~
INTC_INTMUX1 = 0x3d;% s' f0 B: d+ y. n
ISTP = (unsigned int)vectors; ) M2 _1 T2 e1 ^6 ~1 y* t ICR = 0xFFF0; 5 g# v# g3 K1 U; H9 E
IER |= 0x12; ( b+ F! n, D3 h6 P3 r$ v7 v CSR |= 0x01; ; N8 V6 B. u0 s4 H! h4 w/ j S* T6 f+ u5 C* Q. X' a) @ g+ _
! v8 n/ u* g' w4 O4 v5 s- O - ~8 w) T7 n, {4 z$ w还有就是两个输入输出函数: 0 {: D4 k! K% kvoid output_sample(Int32 out_data): E: |4 b+ M/ }" n2 a# j
{! r# r) y6 ]6 H8 \; \
AIC31_data.uint = out_data; , z- @" q3 G% t2 e! [, s. Q) m MCASP1_XBUF5_32BIT = AIC31_data.uint;* a! `; M" ~' \) P; C+ v% n
} 5 X! R/ I$ l+ ?& s* N- h6 x5 @$ X ( B' R! B' W( \% P+ \7 JInt32 input_sample(void)& Y9 g" P; ^7 p9 v5 C- y/ I
{ & r3 Y. a6 j' I( b* Z2 y2 c AIC31_data.uint = MCASP1_RBUF0_32BIT; / X7 j2 D4 D' N6 }) Q9 l* n return (AIC31_data.uint); 4 e6 f% o" m0 F) L4 G' j; r( ?}8 h1 }7 e2 |6 v2 s
. X+ y: N! o. F o 作者: human 时间: 2016-3-16 11:55
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)