2 w1 |' Z) C! U7 O( X ^ sample = input_sample(); // read L + R samples from ADC ' o0 _8 C% {- `3 S output_sample(sample); // write L + R samples to DAC ( a8 a1 T3 x0 K( _! [ return; ! h; \/ A, |$ j3 Z$ b% t/ M}% V' t. _$ U' o
6 }: D U) s$ m, uint main( void ) " J! T' d5 ]2 J4 k* R{ 5 ]" [* ?* D! N. c& i3 }3 V' q* o9 S+ Y- S B/ G0 m/ X: \
/* Initialize BSL */ . Q% W0 F+ y9 a# h5 b( i q EVMC6747_init( );" O1 p1 c5 V/ E9 I' ]/ \
/* Call evmc6747_intr function */; ~+ m e. E) P" P' _4 {
aic3106_init( ); ( f; m* C; S D) `: n' p" H while(1);' p; |+ I/ b/ q- m* q: w
} % z* c9 {) J: n/ w2 P% Y4 t# C1 ?: D
* \9 t* Z8 [$ Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* n7 x4 L0 ?. j8 p8 M0 v! z$ D
/* Initialize MCASP1 */% V0 a# ]+ W* |' z3 |4 N; k
mcasp = &MCASP_MODULE_1; 3 k6 n- q( f7 e" t: o mcasp->regs->GBLCTL = 0; // Reset % `% O3 ?7 Y# Z mcasp->regs->RGBLCTL = 0; // Reset RX 6 O/ m& a7 V8 z% b+ X8 r! [3 x# q mcasp->regs->XGBLCTL = 0; // Reset TX% q g7 f8 Q% s4 ?& H2 p6 l
mcasp->regs->PWRDEMU = 1; // Free-running* o& B8 k4 H/ U- v$ b* P2 A
// configure McASP0 receive registers 6 q! u7 ^0 \! m4 U, P1 T, U) z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ I8 H3 K( q- n0 G; a4 K
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus ( [ W' `8 o. h, X mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) f ~ u! v+ w7 X8 E
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); |, Y- J, T! w! ]8 g# b% f
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 }# i9 S+ L" \. ? v7 z/ I3 m
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 & F( |: Z. m: e8 ], C7 B mcasp->regs->RINTCTL = 0x00000000; // Not used 9 D/ U: l3 K$ v6 U$ I6 O r% E mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" K5 t( y0 p- ?7 N* H5 \
. u7 e2 R" \# R: ?
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used 4 X# a& E4 v5 M- O7 [. P mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus + \6 C" J- J$ r$ F; W mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word - C# S0 t/ Q% W, ] Z* i7 l mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- t# a n0 }* I9 _' ]6 ]7 C- [& _ @' l
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK $ T d7 E; M9 `2 y3 E# f0 ?# t) m mcasp->regs->XTDM = 0x00000003; // Slots 0,1" V% Q/ B& Y! f8 r; r6 T% u/ ]9 g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 {& e c$ Z- u9 t/ f- M# O: }! h
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 Q' E% l0 _! P
w0 \& M5 C8 u) C/ e+ a2 {7 O
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 }* D, d: V/ T# O0 e. z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 H* E% h' G0 U% @) T; R3 ~6 R y2 E
mcasp->regs->PFUNC = 0; // All MCASPs- x6 C; [- S0 E2 x/ h+ a
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 5 k: U" V! R" U. \3 Q 1 f. x' h4 T* E& u. j mcasp->regs->DITCTL = 0x00000000; // Not used. C- k; z$ J* G1 D/ L" X
mcasp->regs->DLBCTL = 0x00000000; // Not used( p) O. ~$ ~) [; H0 X J: [* A
mcasp->regs->AMUTE = 0x00000000; // Not used: J8 j: _) S# t$ L; j. w
; W4 p1 Z! r6 c" Q# Y; B/* Starting sections of the McASP*/ ) i l6 |3 n9 b. H; | mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; u, J$ ?& L7 R! |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . E" z8 h( t" l$ d1 v/ K
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 q, r! ?( c- `9 R2 U; b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); 4 e& M3 w- j) N/ [+ C$ h" `- n* v * d1 ~9 {* C! m# W! } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 E& h! E5 D7 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); & N4 X* b6 l$ k+ G mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : _! j: G; R/ R+ I9 ]. C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 r! @4 O1 O9 r2 y; c* N5 }8 j
6 ]' m# J" ]+ X& n+ D; ~* U; C7 j/ b6 `
mcasp->regs->XSTAT = 0x0000ffff; ) S2 ? v3 ]+ H& ?1 \* C* V# j# I+ B
mcasp->regs->RSTAT = 0x0000ffff; ! \4 K: o" u# X# l" F7 o" @" Q) J" Q0 x# x* o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" A- p) p2 J; b( s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- z; Y3 Z0 \. {& Z! H1 q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; w- w. W( y/ m# Q4 v4 i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 o. j* B0 G- O) o
: C3 m3 R$ f. H8 y: o
/* Write a 0, so that no underrun occurs after releasing the state machine */ ! U7 J$ E* R! |8 D mcasp->regs->XBUF5 = 0;+ `! Y6 v6 p* o. ]
mcasp->regs->RBUF0 = 0;* V7 t. P4 C% [8 e2 {+ l
7 _* M( `) {1 e mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + n7 i+ y( e' x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); . P/ p( Y' c0 S mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; {: r4 @1 C3 Q, \9 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); 7 J3 c! u' A/ Q9 y8 @& U9 R 3 L0 s z" L+ ?& q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 O r7 Q3 u3 r# i/ C: N/ _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. X* |9 K- Y0 l) U, X
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 `* y0 c% M* e# x4 D# c, d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON ); 1 b5 F2 @# E' U3 p) l# ] 5 R3 h G/ q9 x) O4 s D CSR = 0x0000;1 u; a5 k. e& }- s8 q! F; L1 }
INTC_INTMUX1 = 0x3d;& {' l1 j" d( `, `( w$ w9 i
ISTP = (unsigned int)vectors;3 Y2 J, {) M$ Y& f+ s, j, U2 N% E1 A
ICR = 0xFFF0; ) K, ~1 l& M7 V6 J) }# y- R IER |= 0x12; 1 V" p& s1 v. G9 ^+ B$ Y9 Y3 X# B CSR |= 0x01; . W1 y1 W O# B" s6 `
# G1 z8 a- n) m5 E h3 X& N2 C
8 y" b1 ]6 V; _/ `5 O4 T
: _) {5 a$ r3 X4 F$ w还有就是两个输入输出函数:4 l* r% {$ Y: A! F) h: C
void output_sample(Int32 out_data) 4 \) g& N5 u8 K7 T* v$ _3 R2 l3 [{- v! E3 l1 L. M& S
AIC31_data.uint = out_data; W \( R$ B6 r2 E" ^# |& R2 V MCASP1_XBUF5_32BIT = AIC31_data.uint;$ t: K. d% Y1 e' C3 v
} x3 M7 r k" `/ Z9 c. `
4 x9 ~5 j: x' i. ^/ Y
Int32 input_sample(void); `. Z' x9 E8 [
{ 6 m: Z- {9 x3 W8 f$ E) j+ o
AIC31_data.uint = MCASP1_RBUF0_32BIT;; y% j& }( H* i% o8 P
return (AIC31_data.uint);* e- w$ S% u: g
}6 Y+ `& u5 {0 Y: [( e% L/ S9 z
, l4 X/ c3 v* c: S- J) T4 N3 s5 C作者: human 时间: 2016-3-16 11:55
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)