|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, m+ l# u9 I J2 b$ S
main文件:
( t. E3 @( Q7 q$ ]3 C9 T' A4 hinterrupt void interrupt4(void) ' F$ g8 S0 T- i
{
4 V k: i: d$ V/ S( g Uint32 sample;; [/ m. E4 w+ l+ V
* h* j0 a# O6 G4 | sample = input_sample(); // read L + R samples from ADC
8 w; { X( F; s, Z2 l9 J output_sample(sample); // write L + R samples to DAC
- V3 i8 f8 p6 F return;
1 k- ]; z$ }. U' ~) l}
# F# A# @& w4 Q1 m$ K. c" C! g: o% u) i
int main( void )8 V2 {3 ?# a9 l' i. F
{9 A+ x8 U) B; K1 P: X5 x8 d% M" ~
9 A/ Z: P _/ b& v /* Initialize BSL */
+ [- w9 y% y2 }) o EVMC6747_init( );( D( D" `- H; l. _
/* Call evmc6747_intr function */% D' D2 s. O) n7 s8 S9 V) [6 u4 q
aic3106_init( );
% T$ g" g5 h5 a- H: b% C: H while(1);
7 v2 `, U% `! u! ^6 V! s; p}
9 f5 a" b8 [) O* K0 V! T, \7 \' E( O( d' o$ T% `5 p
. d" M( {, e# o. a
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% U; k; E" G9 \; O% N/* Initialize MCASP1 */
: y3 x; Y: N2 D$ X mcasp = &MCASP_MODULE_1;7 |$ K% y5 i D& X3 u$ o1 f, U. ~
mcasp->regs->GBLCTL = 0; // Reset' x; e4 w5 Y- E g; m: u, S
mcasp->regs->RGBLCTL = 0; // Reset RX
9 W" ^4 y3 F9 C6 E& c: K mcasp->regs->XGBLCTL = 0; // Reset TX3 f6 r! b1 M! K6 f$ E/ _5 q+ C
mcasp->regs->PWRDEMU = 1; // Free-running
4 U. N8 f; N# {2 h) e // configure McASP0 receive registers
9 [( @9 y# N* b1 E4 d$ |; T* E mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ V6 L: _/ [" G5 w2 W: D! i mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ v' f ~! W4 \- h$ I/ P; J mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ w( i2 J+ y4 U4 n/ \6 j0 j0 q* b* R1 v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 r; f! _5 U/ {; J4 Q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
& g6 B U. m6 I6 G8 a! l mcasp->regs->RTDM = 0x00000003; // Slots 0,1
7 B# w2 }$ O2 w& f' z3 H mcasp->regs->RINTCTL = 0x00000000; // Not used
* z! l# z* u: M. F mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: e+ U0 {% f% L8 x/ J
$ @9 t$ C7 Y, r4 Z$ q+ T" f) M4 ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) u) K5 h2 r2 S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; I, q* Z7 \( h mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) J9 Y- M" K- F
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 J" b# W% h9 L5 n0 w0 L mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- f1 T$ {! _; Y' T
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 ~& k! R C+ K" B6 z: v# X6 J! ]% | mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! b2 d; g" z3 z9 D9 d) x8 Y+ \$ b
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 ?9 @5 b4 U0 G6 l
4 |# I/ U' R# @) K' K; G. p8 m
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN1 g" d [' Y' A# N/ W) E
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ r/ X) Q0 ^2 e, R3 e
mcasp->regs->PFUNC = 0; // All MCASPs* j4 e# Y! P$ Y( g2 ^7 N E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 W2 |, H5 u8 M
& y4 F2 e3 t; q. J3 }
mcasp->regs->DITCTL = 0x00000000; // Not used
7 E' S. e! B3 V: r; b mcasp->regs->DLBCTL = 0x00000000; // Not used# e* u6 w" }* A8 g8 [
mcasp->regs->AMUTE = 0x00000000; // Not used; |' c1 v, w2 E9 B. C! c- t+ U
2 z6 E# S1 \; S2 |
/* Starting sections of the McASP*/1 w, M0 ~8 Z1 `# P$ v6 D( Y
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % a9 D k- H O4 V/ p7 ?& X1 u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- q! ]0 L1 }) T$ M% h7 m* X mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) ^+ ^- d/ \2 D1 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ p* U/ U3 c( R9 Y' e" G) S# X u3 T; D+ p/ U- I
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 i; ~- k% e/ |8 r+ h+ ]$ p; S& H2 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 ]% x L1 Q7 Y* G9 e$ V- W3 ?7 P mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + U+ c% N1 _6 [. D" T. U/ W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 Q- F4 r" m, i; Z* c- p$ d2 ^; }) r0 U! p* K1 B; ^
mcasp->regs->XSTAT = 0x0000ffff;
. r* g+ r1 y. a" s! v mcasp->regs->RSTAT = 0x0000ffff; ! m1 q. D' ^& l0 {
, C. p. W h1 H; h mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ f0 a$ y6 D* w" u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 B) x5 C5 w3 e7 m
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & @3 A; b. @( N( K- T/ J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# R; e g' X8 {+ a( n
* B7 [" ]; d9 i* k" s8 f4 L, _ /* Write a 0, so that no underrun occurs after releasing the state machine */$ y! F* @4 q/ Q
mcasp->regs->XBUF5 = 0;9 l' q! r* C$ ^+ s: G
mcasp->regs->RBUF0 = 0; h+ A2 y8 i! k! Y. B
7 p+ f# t9 ^8 c5 d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! N5 o& o0 A% Z( G* T! H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 G: _2 u, q" N5 F+ d5 } mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% H8 G- E3 Y# }! j' u5 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 f& A( Y+ R: D, d- O. [
8 f E8 |; x7 Q9 a# A mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ d9 I# ^0 j, e9 ~# y: J, Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" j" z6 T4 R. M! W4 L mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ v9 F$ t3 A2 B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 Q0 M1 Q/ ^ }5 z6 s6 [0 f. ^3 _, p
$ n) A/ N# }+ W) Z* c8 o& G
CSR = 0x0000;
$ F0 A/ @! _0 r0 W- H INTC_INTMUX1 = 0x3d;9 u: W& Y& f" |' W2 @' \
ISTP = (unsigned int)vectors;
. Z1 [ N! |. X- b ICR = 0xFFF0;
$ J4 w" y8 r- c& E5 t0 ` IER |= 0x12;
+ H8 \2 i* N& z' G$ k3 ^" Q CSR |= 0x01; / y& w5 b1 N/ s, L! K+ N y+ i
+ g5 Q4 |8 i }$ Z& E' b
/ L- H6 l! G* h+ x, \$ A
' |0 `4 W' I; n) d( P$ v$ T& H还有就是两个输入输出函数:, h5 E# W# X8 c; V) U7 ]
void output_sample(Int32 out_data)
0 s; S0 |8 c' m% ^{1 m: U" h/ q+ h
AIC31_data.uint = out_data;
4 H2 p) H( G5 n! Z) ]; ^, e: M& e MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ J7 L7 r8 ], R+ P) P: ]7 Q/ \* Z}
* S! w. |' u0 g: {4 W: V' R* Y/ p/ e- J/ N' W; h! n2 W6 D
Int32 input_sample(void)
* c( k, l. Y& C8 m; P% w2 O{ 4 u& q8 t/ J' X
AIC31_data.uint = MCASP1_RBUF0_32BIT;
% z# z1 [7 x5 t8 f4 u return (AIC31_data.uint);
6 S: _, G+ H% S5 r/ V}
5 f; ^7 z9 M/ y! J% j
8 a) q/ C: b. C: Q1 j: M |
|