|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 r- b1 q; E1 M; a, `
main文件:6 E( b0 P L- C
interrupt void interrupt4(void)
$ ^2 T# _' y! a8 C% A{
* o/ s/ j( ?& k Uint32 sample;* j+ p x2 [6 @; v5 V
$ H) @+ J$ V. W) T" P* {
sample = input_sample(); // read L + R samples from ADC
" N- z* s) |/ U# P. B output_sample(sample); // write L + R samples to DAC
& k: `2 h( w; y return;
4 k6 N, `/ O3 p8 c- C% ?}
% D# A$ }5 n; }; b* m2 Y
4 u/ Q1 y" ^, J: |7 s+ C& Nint main( void )- B+ c: `# _2 I9 T& U
{
4 P: J& e9 O, ^: F# U) ~7 b5 S, i* f" k" A+ B9 ?
/* Initialize BSL */
- M: C, B6 x9 O' ] EVMC6747_init( );
H3 q5 }& {* W$ K /* Call evmc6747_intr function */" f5 w! o8 J @) b. L. X6 u
aic3106_init( );# h( C; A4 W! [. y
while(1);
7 f& b" G( O4 ~2 p) ]: i}
4 T! f# L; o. t% F, K3 t$ ^5 M7 p
. U7 }- P7 Z8 N* ]& \
% Y; ^ \2 n% h5 @" V8 \# naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! v" ^" n8 m7 E* w5 z Y
/* Initialize MCASP1 */1 p @: T9 u. y# ], x9 e3 C" n
mcasp = &MCASP_MODULE_1;
9 p9 o% }7 |# G. `1 t mcasp->regs->GBLCTL = 0; // Reset
2 n8 D0 D1 S) g3 J6 s( Z( T mcasp->regs->RGBLCTL = 0; // Reset RX J9 Y; O2 G+ | A( U3 B! y0 g/ I
mcasp->regs->XGBLCTL = 0; // Reset TX z- x) m, l$ P
mcasp->regs->PWRDEMU = 1; // Free-running8 X( V$ \% y4 a
// configure McASP0 receive registers
1 o9 x; c! k6 [/ ~: z# R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used- i' Z4 B/ m) T v: O6 X8 o
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: u) q! k5 ^/ K8 B mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 e3 m! }0 b6 {4 Z6 w
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 H& g4 ^: \. I- A8 U# [ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ H; d9 d' g' c+ ?6 C' n" {
mcasp->regs->RTDM = 0x00000003; // Slots 0,1: O8 D4 z% |/ E& w1 @) q5 }
mcasp->regs->RINTCTL = 0x00000000; // Not used
8 D I, @" p9 P9 j( R% T mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! ?# L* S' o) t# j4 k/ F# L5 P
' v+ U- w2 Y. A
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used* l% A8 W. K9 B$ ^
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- F) _1 I) _; a$ F. I mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& Z/ U) `( a* J6 s mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 Y0 j- K, Y% B( A- {6 X4 s6 t1 `# @ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK8 W* y. p+ K$ ?7 t3 p4 U
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
; B/ v" |' w" }8 q6 L) ?% C# X, u mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
/ {; U$ v% P$ D |# g# X mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 @6 c: T4 O( X+ {* | ?, L; A( ?0 q. n9 \2 o! o
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
@* `% Z& E5 |6 v* A mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 W; P9 x+ @/ J* v- m
mcasp->regs->PFUNC = 0; // All MCASPs! C. R' E' A6 T) G4 S7 P
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; b$ C/ v! ~/ E$ y1 }
( q7 q" k" H& @- B$ i mcasp->regs->DITCTL = 0x00000000; // Not used5 {' s6 |% l: L+ Q! Q! `; r$ Q2 i! d
mcasp->regs->DLBCTL = 0x00000000; // Not used
. n) B/ i( q4 z5 J* K% e mcasp->regs->AMUTE = 0x00000000; // Not used1 q: ^0 e [7 U2 O! q Z y) ~$ q H
5 r2 a8 t% b7 z- g
/* Starting sections of the McASP*/
! x/ i% {) x: A mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 ?+ |, l6 I; ^, Y9 [7 F/ X4 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ' B" _/ h* b/ Q& U# O7 b" K$ [
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 f8 |+ D, e7 B) r9 L7 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* [, L( l/ @7 I5 L3 T1 c
% x$ c m) z9 U4 u- l2 j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + G6 s' y1 J/ ^- C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 D& t" n1 K: X9 l/ p mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 h) I# h" E F5 s9 U! o5 Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 T( s6 W5 {; h6 K8 B2 u
0 @6 i+ ?1 k# B7 Z mcasp->regs->XSTAT = 0x0000ffff;
, e# c1 s, ~& E n0 f ` mcasp->regs->RSTAT = 0x0000ffff;
6 Z/ b9 J1 Q' c. h" C, x, Y U. f% y: H4 _
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 D, @, K2 Y' G. }# t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. x1 f6 f0 J1 g- ^! n mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ D0 m/ {6 U D: p, \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 r3 ^1 C* a- y% t1 g R8 a4 l, F0 f7 c) f' [" k
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 u4 @# Q( b ]: ~1 G" y8 d6 a7 u mcasp->regs->XBUF5 = 0;
# d! v# c; b4 j' r2 P mcasp->regs->RBUF0 = 0;
* s1 b9 Z$ \3 e8 e9 L1 P# b# Y- _6 v% t8 j7 H" ~1 ]& o. H0 n
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( \! c- A8 ]2 p& d, r0 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( ~9 E( s4 }/ g# b2 c% `
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 X0 L; g+ J: L! M. n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. m# A4 b+ R. |2 |9 ~
0 q; T4 g2 D% } mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 O# w2 X% q$ d7 ?" c$ o* K) N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ ]5 U' ~& J' i" }. R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' m q) g5 ^# ^: E/ ^: W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ A4 h9 F" G- r# k2 s! U5 Y3 q
2 J$ _! a6 f. g8 S, \ CSR = 0x0000;8 e- H3 B6 S% T
INTC_INTMUX1 = 0x3d;1 }5 W: N! I" a# _# v
ISTP = (unsigned int)vectors;
, T7 ~' W: Q! Q0 f, \( X ICR = 0xFFF0; 5 W, a! b8 s9 @# g7 p
IER |= 0x12; " u) T1 [$ j0 ~( T3 M
CSR |= 0x01; 2 U$ y" k- u+ D# |( j
, T6 H1 m6 e) M0 m3 |9 z; G0 p8 b: [: j3 E, r$ s
a' ?6 u3 S# _7 \还有就是两个输入输出函数:! ^5 |3 p" J0 C: k0 N8 c
void output_sample(Int32 out_data). o8 O9 H5 M9 ?7 Y
{
2 k: C# s; {* {. O AIC31_data.uint = out_data; 4 w: y/ K3 `3 `1 ?( ^9 H
MCASP1_XBUF5_32BIT = AIC31_data.uint;5 I/ W$ Q' |! `' V& a/ p& f
}/ S1 k+ Y! z+ Y$ P6 z
' N& Z) D" q T% O/ Z" E; aInt32 input_sample(void)
6 V$ q: b; r9 O{
- m P! N A& R+ F& L+ o% z AIC31_data.uint = MCASP1_RBUF0_32BIT;) L* U# v4 F6 w1 H7 X
return (AIC31_data.uint);
8 `* Y& S8 a" N. H}
; ~ F Q7 Z& G) e
. s8 }# t0 |& ]( n( ?, ]3 u/ m1 T2 j5 c |
|