|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% |) x [8 G' \9 C$ N, Tmain文件:
: ]# f3 n; L( K: }2 [- e0 t( sinterrupt void interrupt4(void)
# P9 V2 Y( A. h4 H5 D' ?* f{. x, u8 s5 J ^3 a6 k) S# p
Uint32 sample;
# p. L" ~" G/ c# m$ X8 _$ V" ?7 j9 F6 b
sample = input_sample(); // read L + R samples from ADC* Q0 n* W( o, \* E) U! w$ ~' e
output_sample(sample); // write L + R samples to DAC
% K& V: j7 E- k7 { return;( @! F( Y7 P: b1 `5 A6 e4 z
}
" R! z2 h4 a3 h- {
6 x; C. u) I; }int main( void )" B% H" e7 Q$ _0 E( F3 [0 j
{# j5 a- i: A6 t2 s5 n7 A8 |; E( Q
. U+ Q6 o" b! ?8 q1 ^; a* `3 U /* Initialize BSL */
5 k( p, j# D* r EVMC6747_init( );
" f1 _& ~& B. v$ s( V( _ /* Call evmc6747_intr function */
, A! U$ H7 P: J# f2 q' d; o aic3106_init( );
( |' W, O3 H+ N- u0 Z$ X while(1);$ G( v m2 g3 l/ w7 l+ l) D
}
$ Z x( P" R2 `' }% A3 I2 x& q, O l2 C
/ w$ f: E9 b j7 L- taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 T. H/ @( z+ S1 H
/* Initialize MCASP1 */! J0 W2 u3 }1 N/ p
mcasp = &MCASP_MODULE_1;
, h7 M/ G5 w$ b, G( M" _/ |/ ~; e! ~ mcasp->regs->GBLCTL = 0; // Reset
8 q9 H8 q7 Q! ]% ~7 t% W( R- G2 ? mcasp->regs->RGBLCTL = 0; // Reset RX
: k) M# F$ v4 u4 \/ F1 _ mcasp->regs->XGBLCTL = 0; // Reset TX* D! F5 w1 w' I9 U8 ]7 d4 R6 b
mcasp->regs->PWRDEMU = 1; // Free-running
) a$ V" `$ g r# U // configure McASP0 receive registers
7 h. o P0 V6 p. f/ r% s$ t7 e mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 o; X* O. s* q% t) h a mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; ` f$ U4 z" m% Y! f5 k2 Y6 J mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; m V5 t: b2 j! k9 D7 ? mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 Q+ Y( J' w4 K% D# t mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 B& x6 B$ \9 E7 G
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ W; W4 E, X( c; U
mcasp->regs->RINTCTL = 0x00000000; // Not used- I+ y+ e; r B( v2 h1 N+ m
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 I) h. z* C2 R: o& A- R2 e# y. `8 L$ D( V6 ~( S; p! C" l* o
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# |" K8 v; n0 F6 g0 o2 j
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ c8 S: ]% j' E, R6 D ` mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% Z) D2 T/ f' a4 ~9 |: |$ ?% ~
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, U r: x# R9 M3 P
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, E/ a* @4 N, X; r& I* G: ]
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 Z9 D8 y5 I4 Z' F, Q mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% K3 B4 {+ D2 `# k1 }7 y% b- ~9 q% ] mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 o& x- {! [" u# H: k' Y" ~2 k: J
8 h$ [+ Y6 L% H/ w4 N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- _, j v6 F& |2 ^2 L. N1 S mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT" Z0 J+ K5 i1 L/ T( E* b
mcasp->regs->PFUNC = 0; // All MCASPs
( Y& F2 E' [! u) i3 P mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 t, Z2 q" y4 R; Q7 N. B! G
9 {' Q9 L) T5 z- c6 `$ ~
mcasp->regs->DITCTL = 0x00000000; // Not used
0 Z) H: n+ h; \* K$ l mcasp->regs->DLBCTL = 0x00000000; // Not used
0 N8 P7 H/ {- F C% L mcasp->regs->AMUTE = 0x00000000; // Not used
# D; d- v( H2 p$ r. W8 R' |1 K; g& \# m1 _" b- @
/* Starting sections of the McASP*/
6 n c( K& H$ e! K6 j mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 W; k* `8 s1 L! U$ n5 B9 I7 o% d& a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . X& X, w6 Y( X8 y3 e" k
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; f. l8 q( s! L3 e4 a2 k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); Z- ?$ V0 P& x3 [9 z3 W
8 Z5 ^& j3 g+ r; C
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: ?6 n, B1 @1 ] v2 q9 S1 G1 k7 i: L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); C" V7 t8 m2 m: I* D" M
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ z" A% K3 Z% |: S/ B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, u+ C$ w- q n1 E: Y
, K" v) o2 k4 [- g
mcasp->regs->XSTAT = 0x0000ffff; " V5 ?( j. A+ {; d
mcasp->regs->RSTAT = 0x0000ffff; 4 e7 e+ @1 v5 m7 ~( j3 m- ~
& p. |+ E) y6 [+ p. n% a mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& W8 d+ f7 L& q+ V* o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
F" f# R5 I( u/ T- C- g8 q" j5 n mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 \& W7 L% K- w9 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; O0 U- ^0 b) t3 x# m0 e
+ [) J) u3 j1 H8 g9 X5 T; c2 e /* Write a 0, so that no underrun occurs after releasing the state machine */& [: N! w. ]; d3 g$ U/ M0 F
mcasp->regs->XBUF5 = 0;
3 z# _ z0 J: c. e( O: Z mcasp->regs->RBUF0 = 0;- ~+ V5 z, z7 R" E3 U
* w3 n5 W5 b- @1 q* Q+ D
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 V1 |/ _: J1 j A1 \6 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& m( y0 h* v( j
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + g* M0 T* m+ a8 S# s) V% N" V$ M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 D# H5 Z: j5 V: w
- k3 }: f& D# y3 g mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 j- s4 Q/ }$ L5 c' O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 |$ r; n# @& `& H% x' v/ L
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 f* T& r9 f/ h% g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 N9 p. c/ D* W0 i6 ~
# i# q4 s. ^2 b! P: H
CSR = 0x0000;
7 r) v+ A/ e) V& D [ INTC_INTMUX1 = 0x3d;
: w. S" U$ B. q8 i" ^0 s( m ISTP = (unsigned int)vectors;" t) G! G! m, _5 N( I
ICR = 0xFFF0; ! r, K; q, i2 u5 g* @: p% f/ V) h
IER |= 0x12; : ]3 {1 M" |9 A0 a2 N! m/ t6 F
CSR |= 0x01;
! z5 b7 d/ z6 b. S2 Q+ O0 ?# `; q: g# K) @' S4 |
v- S' Q" t4 I" c8 ]6 m+ d: |. y
# o m0 \/ S0 g. o* W/ g/ M还有就是两个输入输出函数:/ u* v; Q& z4 ~9 h5 i+ F
void output_sample(Int32 out_data)
# M2 y' Q0 ]1 G6 L) G{2 }# {% ]( _+ I" D2 N; I2 H
AIC31_data.uint = out_data; * C6 m- J' R3 K9 k) I; T
MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 Z) X% M$ ~$ p3 x7 k}
/ q2 J" C8 n" B4 I% \; i; e' J3 r" g: @. H
Int32 input_sample(void)
% N/ v9 h% u; u2 f& W; S- X; W{
5 f( j" N7 r: F& \) l AIC31_data.uint = MCASP1_RBUF0_32BIT;$ _1 O& H1 N7 W! \
return (AIC31_data.uint);- P. r. T6 f+ s6 c
}
, j0 S: v& J4 v4 L& _
# E6 g: M) _1 f- x9 @7 Z |
|