|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( z, ^, V- R7 k1 A- C+ \# p& m4 M7 }
main文件:6 p& g( `# S$ L. G U% a: B* f
interrupt void interrupt4(void) ' G G# m( s4 i3 D7 J7 S
{# `- X7 Z& k# L
Uint32 sample;
# y O6 v" a; w1 l
# q, L# X) g; W4 A: ?$ }$ z sample = input_sample(); // read L + R samples from ADC) K# M: P2 e" J* g7 V, R5 A& ?
output_sample(sample); // write L + R samples to DAC
5 G8 v D. L2 P& k return;
2 N3 E0 l6 b* t d/ L) R}
* ~( V( R$ B) ]2 Q; @& ^$ N( ^5 L" T: L$ E& [& ^4 \
int main( void )
$ R4 d7 ?" A! M l% M0 Y/ \{
: Z4 f6 S/ A7 P, c2 p y+ K+ u: @. T. U, s- S" p9 x2 _. Y
/* Initialize BSL */
! p" Z/ Z; R" e; J EVMC6747_init( );5 p0 v( w' R; N; Q, `+ ~
/* Call evmc6747_intr function */8 m1 F- g6 m- t+ N
aic3106_init( );- B# z- ~, K- W' ]
while(1);, S5 i$ |3 Y @- {, B& Z
}& `# x8 ]6 i. N" U- Q; F
4 j7 S1 b" P6 s
3 `$ C- C% g4 j. y3 S5 Z3 G. ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 a. @) A" `' r; I$ W/* Initialize MCASP1 */. g7 F T/ `5 ?2 N+ N7 m8 _
mcasp = &MCASP_MODULE_1;
$ t! Y/ `! c z! A6 k, w2 Z mcasp->regs->GBLCTL = 0; // Reset
+ n: E: Q8 D1 ~+ G mcasp->regs->RGBLCTL = 0; // Reset RX/ f+ S, j' o1 c7 Y" f
mcasp->regs->XGBLCTL = 0; // Reset TX7 ?: b. z# z, E: k% i
mcasp->regs->PWRDEMU = 1; // Free-running
' C# r5 H; c4 x1 |; Z0 E- a // configure McASP0 receive registers0 [7 u9 j4 o9 Z! Q
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
& E8 a8 {9 u; m0 C mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. @, g- J* i8 s1 q. \1 j
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 a$ g. m) I6 _/ F4 q/ S6 {
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ `) n8 h( g" O) i# o mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) D# ^* J- W) r: o, x+ }4 Z3 c& z
mcasp->regs->RTDM = 0x00000003; // Slots 0,1: P( N3 P) @# k, h9 I, V* S
mcasp->regs->RINTCTL = 0x00000000; // Not used. t `* |$ M0 x U
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 e6 H5 n4 O+ M( A0 z$ v6 V. [+ t1 [7 h' \4 m0 Y
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* @9 e6 l- u* Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 J1 D8 G5 W ?; ?0 V
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& r* Z/ G# ]5 e& g) X2 t0 U. j0 J4 P: N mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, }- G3 L$ H0 N1 |0 e( K/ I
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' |5 ~/ U/ t7 b L3 \ mcasp->regs->XTDM = 0x00000003; // Slots 0,13 A* D: ^# A% t$ |
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: B' F! a2 E N9 T1 y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 O, n! ]5 M. p t$ t! d( W
( e# u- D- p( J* Z$ G mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) F0 p, ~1 O! X% A/ x5 W2 L
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 M% r( g, K. y1 D& S7 N
mcasp->regs->PFUNC = 0; // All MCASPs
5 y* Z9 b- E _ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 A7 C0 c! g9 z0 q2 ~' [$ v5 ]% u+ W' ^8 n( p0 C
mcasp->regs->DITCTL = 0x00000000; // Not used# g5 a+ |1 t2 T3 J; }
mcasp->regs->DLBCTL = 0x00000000; // Not used
1 C) L3 |1 [" _! c mcasp->regs->AMUTE = 0x00000000; // Not used
D/ n% m- |8 w& ?9 r/ I$ U/ l
* u& X! I: u# Y" f6 H4 v$ Z0 D/* Starting sections of the McASP*/8 {% Z. Q( A- Y2 d- t' \& x. X
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; G& c4 g# b5 V; H" G- s! R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, T2 F0 r7 o: ? mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; p3 t5 G$ T1 C' e& g7 W7 A; |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; F3 y! Z2 A% `7 L- A
( @0 j* V8 S6 q( E; C: Y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % ?9 [$ e! l$ w* G4 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) M N) h3 E4 u& l7 N( k3 H5 \% }
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ W* j* y5 L) N8 s' o% R1 _, v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 ^9 Q8 r$ Z/ e3 L0 y' s7 R1 o! G2 E$ x$ n; h; ~
mcasp->regs->XSTAT = 0x0000ffff;
8 N4 {# D5 I' C' R mcasp->regs->RSTAT = 0x0000ffff;
% J2 y; O" l h$ H
( N" p& H7 e2 | mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. A! _7 r! l" O# u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% J2 _- Y' s) s, u/ `4 d- s8 Y4 U
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* X, `, ?0 L' X5 A1 x+ x8 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 ]% G, U2 N+ a
+ y! K' M2 {1 r3 R) \
/* Write a 0, so that no underrun occurs after releasing the state machine */
: |# R0 O* s3 j- A6 L mcasp->regs->XBUF5 = 0;
2 B5 Z+ W( U. e mcasp->regs->RBUF0 = 0;
4 t, V1 Q6 {" ^( A4 J" i! C+ A3 |2 N7 d6 Q! U; d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 D; L E9 O, P7 ]- C% H2 [# q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); C! `) E* W$ h) A- n4 f
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 x$ B, n5 o7 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; e. X9 I3 b' ]# H
$ G$ ~0 h2 `. G8 \$ @- E' q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / w1 Z: C) S3 B d4 y+ d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. {& J7 m2 X7 e) U, v* i# D
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + s) {& Z ~8 T* p0 s8 y. E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 m2 L* o X, ^* G( Y
$ z$ [$ K/ B. @% r CSR = 0x0000;
: D/ u; Z+ F. E5 E INTC_INTMUX1 = 0x3d;) k+ c& @) j: E4 r# S8 x6 R1 y
ISTP = (unsigned int)vectors;
% _2 O, l, Z- l+ j) V ICR = 0xFFF0;
; g$ h3 H1 F3 S7 V& g) G0 p IER |= 0x12; 1 F( Z Y! \/ z" Q( W* ^
CSR |= 0x01; 4 O: t7 a* ~9 B. S& d
: M5 Y3 l# E; G5 j: f: R
1 i9 F/ E# K( [0 q6 R8 e/ G1 }8 V
) l# L: d6 F/ l5 D0 l还有就是两个输入输出函数:! W" F y1 ~* o2 G4 h8 c' p; P
void output_sample(Int32 out_data)+ e; M7 z; [ P- B7 J1 R6 s" v
{
, a# D7 u x/ R; D; ?. e; `' Y AIC31_data.uint = out_data; ( G- M* ~) ], h
MCASP1_XBUF5_32BIT = AIC31_data.uint;( \, l3 e4 K9 d t, x! }" G
}& D8 c, e0 _. m. F9 S
" a! h! K% z- d- SInt32 input_sample(void): v9 F/ [0 }9 h- V$ W3 M: G
{
6 m1 F" _# I. n) _ U! w$ w3 S AIC31_data.uint = MCASP1_RBUF0_32BIT;
# Z- v6 H' b/ j" o- G return (AIC31_data.uint);9 B: H2 ^ i J6 O- F, g
}2 ], [& Q2 d9 K( _( w* F
% V: b* {. {3 \" Q; d& h# O! K
|
|