|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' |2 ?4 t$ ]) M. O) S' \+ S
main文件:
* R6 x) |- @, H3 J# Rinterrupt void interrupt4(void)
7 [/ |1 A9 A1 a: t3 \, U; F{% N1 P [, ?0 F& h: n# n0 f" U
Uint32 sample;( ^7 r+ R% O3 l; B7 n; p
/ O" ]2 T8 N5 F* k( G# q9 a
sample = input_sample(); // read L + R samples from ADC( K H$ d: `- H+ S
output_sample(sample); // write L + R samples to DAC . r) a+ f, V5 L# n
return;1 N- j& |) P& @5 G% j3 u. \% Y
}6 Z% w. X, p3 W* _: C! G# J, }6 e
2 b9 V5 n. W# y- v9 o9 p f6 s9 uint main( void )% a; u4 |" M8 f5 [6 g
{" A. \' t' Z$ m% @! }- a) Y( E1 \
6 z* A$ Y8 a1 a; G& e& w& X3 J /* Initialize BSL */. i2 b8 b, E5 n" X" [
EVMC6747_init( );
. P9 O. P) d+ a+ c /* Call evmc6747_intr function */- o; C) d" f" C- s
aic3106_init( );
. x0 |" y) M5 ], t" j; D& \ while(1);
& s: l0 W# v& B5 c: \; @}! n5 B: B- o0 e2 M! c
, G/ [; E. q6 V4 g5 k+ N
) C6 d5 Z( a h, L4 J% d) Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ }9 m- G, f4 T5 m6 Q, X1 ^/* Initialize MCASP1 */1 ]1 ?7 V2 a) o1 f0 F# g
mcasp = &MCASP_MODULE_1;, X( M! t$ }9 M, ~
mcasp->regs->GBLCTL = 0; // Reset
- Q& K4 x. O5 C1 M4 B3 R mcasp->regs->RGBLCTL = 0; // Reset RX
4 u- H, G( \7 B1 m1 }7 s: g9 z mcasp->regs->XGBLCTL = 0; // Reset TX
* Q9 d# i7 O; B( ~/ i3 r$ b mcasp->regs->PWRDEMU = 1; // Free-running
- ^1 i7 ?& r& {0 h) l // configure McASP0 receive registers
2 r* h6 M- ?. w! C1 [ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used+ \9 a8 T; Y% H1 Y6 t! F9 }8 r
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# H4 E9 i2 n' U5 y; |; @% D
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word: y% L. O9 \1 k( j$ M8 ~: C
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), |9 F: A @6 E7 h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 Y* f7 v& a m# @7 e+ k mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) _; g! P! Q: y. [& V, X mcasp->regs->RINTCTL = 0x00000000; // Not used+ P+ ]. t0 C( g5 \9 n k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 \: l3 x [& P2 a
! U J9 J& W* R mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# ?$ h& D5 ]. `: B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 l) v" D3 D; k" p2 D* k+ h5 ~0 K mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' Z j7 k; {! a# n6 p5 u
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 r) S) I/ P, L2 _1 l& V: v mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. N# a9 o# V/ D
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 a& h( t* m3 C/ p, N mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: c' X( X+ Y2 v, {7 D0 i) y( k' r: m mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% e$ ] @! X' V# F6 y$ M/ m
7 E7 o w. r: L8 i! B4 Z4 S mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
2 f( r5 x, }3 G# R mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 c3 [6 L3 {7 l mcasp->regs->PFUNC = 0; // All MCASPs, V: H" r3 W# L0 W& W+ m _- \
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 m- p: K2 g$ [$ N) i; b; ?) s) b! |$ i' H6 k- m
mcasp->regs->DITCTL = 0x00000000; // Not used! p2 n; i4 F* U1 J4 f5 _% h
mcasp->regs->DLBCTL = 0x00000000; // Not used- I! _. q+ x: ^1 |1 _, S8 g
mcasp->regs->AMUTE = 0x00000000; // Not used
" | p% [3 {$ \' v s9 T# l. [1 b) A0 E4 h
/* Starting sections of the McASP*/
/ i/ b B& }/ @/ V+ l" N9 F mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 J5 K( T( t( V9 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % K1 p9 z" g6 k- G" Y+ H9 _
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# j0 u* [9 K( k/ w" I- n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ K! c0 A+ v8 g7 V8 ?9 S# P" f1 a3 R% X: M6 {4 R
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, U* k7 I! r( E s# @# q) h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 c( v% b2 G1 h. V. A6 W mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - ^' }- ~( p7 u: n8 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% @ O6 c( p3 A' D
# i$ L8 i: u, |3 }
mcasp->regs->XSTAT = 0x0000ffff;
' [4 C# H6 o% m8 x4 v mcasp->regs->RSTAT = 0x0000ffff;
$ T3 i# W& j3 U# l
* f0 ~9 r, l+ O' I" a mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) ]1 d: R0 x4 w$ j7 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. u2 L' v! n$ S1 i8 M N" o, ^5 l2 C mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 w3 l4 {9 Q [3 W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" Z; x5 E1 _. X6 r$ c
1 [; P9 I& B; ~5 s, N /* Write a 0, so that no underrun occurs after releasing the state machine */9 L$ x! L* k! K- ~' L6 t
mcasp->regs->XBUF5 = 0;
' A) [& V# p* a( w- q% n mcasp->regs->RBUF0 = 0;8 P" b! w) u) s
7 [' K; ~0 c% | mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - D* f, Q$ {% Y, Q9 C2 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ j# N- a& W" B/ v3 `
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 [( t# u- ^; ^, M0 ]- M& ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- d* N) R5 P/ R7 e) w9 U: m6 K* q
7 F$ `7 v8 u% e6 V( }% Q2 @$ Y! E. d mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 h( g3 N0 a8 O W0 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, g1 m% g" z* n# B+ J
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 R8 a; b4 x% R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( R4 j1 i r( n0 P. i5 Q% q
; w& }/ L( W) ^
CSR = 0x0000;$ h- } W' b( X* [3 J6 H
INTC_INTMUX1 = 0x3d;
! U# b7 {( p h. L$ {. b& ^) j ISTP = (unsigned int)vectors;* f0 ~( N( w/ h
ICR = 0xFFF0;
0 ]5 L& S, ?- B1 ~+ b4 O/ N. w IER |= 0x12; $ W/ Z6 L6 ~- X5 o
CSR |= 0x01;
6 p4 u" g/ C4 N3 D, E; x* r3 \* a% N2 K3 G ]0 r
: n. A! m5 c$ ]4 j* i# B8 g
: Q( j; a2 x n* f* |
还有就是两个输入输出函数:7 A% H- r/ F, F+ [' @. t2 z
void output_sample(Int32 out_data)
( W! s6 A+ }9 \- A{' l" c5 B; I1 X! M
AIC31_data.uint = out_data; 6 p o% ]4 E, o
MCASP1_XBUF5_32BIT = AIC31_data.uint;
# [' C4 I; |7 d$ F0 r3 U, p' y}- @: K3 T: J0 d
& C5 v( e4 l/ r% Z& J2 X
Int32 input_sample(void) J& R) g1 |- O" U- R# N; s: r8 f) N
{
. T" L; V" C5 x" b' T1 { AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 p& |$ {- k9 O4 @$ T; {+ ^ return (AIC31_data.uint);
" r2 V- p2 P1 f}0 _1 N6 ~ o; E/ ~$ K
2 w; O( R. Q% H; x2 f8 | |
|