|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ k! x8 n, S& o; {5 ~: Smain文件: A/ c: r/ T- @+ v
interrupt void interrupt4(void) & O: j& M. Q4 p! ?5 \. \4 @
{
8 Z' L$ U& v( I+ Y+ N Uint32 sample;& N0 H! E* h" n( }! f* I% d- _
$ M3 @, o o! L- b! g sample = input_sample(); // read L + R samples from ADC) `, v7 J- p3 w5 r4 G+ T
output_sample(sample); // write L + R samples to DAC # D! A I3 _( a+ E0 T9 W
return;0 d3 c- ~) a% G% a
}
2 g6 C9 d5 k9 V+ B, B6 o* F
, I4 l9 ` s) |8 s- Zint main( void ), X' n" E) C) {# L& `6 y8 b, {
{4 G, `, ]8 ?; L4 R0 n7 L1 o0 M
0 r/ V0 f8 t, ?) N/ l% g
/* Initialize BSL */
* R4 ~, v( ^' K4 Z: X EVMC6747_init( );
! f' i+ n& I/ `: X. Y /* Call evmc6747_intr function */ S2 t& o; p: [1 h1 C
aic3106_init( );
2 w. R- P* e( n9 E8 @2 F while(1);( d+ w6 }/ g- K/ ~8 \3 N/ l
}) }3 ~1 s) {5 z$ _$ N6 x- f2 k
. [* R$ Y/ S! ?" G. W
% O+ X3 @+ v2 u+ f. c% d/ R% k
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 t( x [- P9 w) ^. K( F/* Initialize MCASP1 */
4 G- d( }9 B5 q mcasp = &MCASP_MODULE_1;
6 |7 v/ h- q6 J2 ] mcasp->regs->GBLCTL = 0; // Reset
8 {! ~) J! z$ t, I mcasp->regs->RGBLCTL = 0; // Reset RX
$ G9 \! |: m2 N# V: G8 ? mcasp->regs->XGBLCTL = 0; // Reset TX
5 |5 [! R5 ]- _0 i* ~& W5 J: g mcasp->regs->PWRDEMU = 1; // Free-running
% e7 ^4 ?+ I$ E // configure McASP0 receive registers
3 P" F. s; y7 Q0 W5 M6 I+ h& M3 X! { mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ y/ U N; r/ R$ g7 }" f: U7 X
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: |" |0 V! u( e# q mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ P* R7 z! C4 e3 X- I: H4 r mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); _6 n; g: z. }- x
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ ~9 c( I8 d) f- d' w# U mcasp->regs->RTDM = 0x00000003; // Slots 0,1* `1 P, h& H0 ]
mcasp->regs->RINTCTL = 0x00000000; // Not used
! j1 L# `( t4 C k mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% E$ b, t# o' w3 k" s W; r5 ?) R' S
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 M M: ]' H, L9 F0 j: s" g mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ I8 V1 ?4 {7 c0 a
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; n# ~1 T: _3 B0 z) B5 v
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: _* I B! B5 f0 P7 R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; u1 h8 }. z: u ^& R k9 U mcasp->regs->XTDM = 0x00000003; // Slots 0,13 V* \3 I2 W. u. G) Z" n6 o) a5 y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
5 E( J, c% z6 u- T mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! q: |( O* S; r1 s, V7 ^4 W4 L6 ^' a2 @
! n) w! t8 u5 J* j
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
% [; S4 h8 p5 O) U) s mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ \6 t( H+ j' d+ z. G
mcasp->regs->PFUNC = 0; // All MCASPs
7 S. k% j$ j. g/ [' B3 I( F mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 R& N( `, j) l' O! M6 S
2 Q& U0 H& x* k$ t2 d
mcasp->regs->DITCTL = 0x00000000; // Not used: V8 ] I4 Z% ]4 H* [
mcasp->regs->DLBCTL = 0x00000000; // Not used3 i% Q. M4 v c4 K. D [
mcasp->regs->AMUTE = 0x00000000; // Not used
5 y/ @& g5 X2 ?) `, s" I7 }0 u
: W7 I0 W; T# n/* Starting sections of the McASP*/
; h: S0 V8 g: v, P& t mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + V/ f6 V+ m+ U6 E4 x+ z: u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 J! U4 {+ ?6 c
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) n+ V' b( J$ |) ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ P+ G' X1 {& J5 K- A+ J! a5 j/ J
! C* M2 M+ j' c( N" I. H mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , v& L5 W# v1 u- S: {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ G4 m4 r* h5 i Y6 f: Z. p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ M5 b2 h$ B' _7 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ e$ H8 r9 V/ o: o
( d( _ e0 J8 o" x, v: M0 [
mcasp->regs->XSTAT = 0x0000ffff; ) |* Z: |6 Z) o: f4 C6 G
mcasp->regs->RSTAT = 0x0000ffff; + C* R& n- y1 ~( T6 E+ H
' [+ J0 `: N- Q$ _# P9 o h. n1 r8 Y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: C# n* x2 } b6 D% h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 R! L' w, O% s( \ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( i6 m" x8 x6 p; g9 _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- _, p1 J, O. Q! { ]! d) j' {; r" B( R+ E8 [1 G
/* Write a 0, so that no underrun occurs after releasing the state machine */
' A! y) p5 i W6 p4 a) Y mcasp->regs->XBUF5 = 0;. p; }; p2 ^4 e- R7 Y5 s
mcasp->regs->RBUF0 = 0;. W4 m W/ E3 ?/ @+ Z
2 C: ?0 y' k7 \2 P) `
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + F) {& v! x* ~5 B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 s6 K" h; W0 f mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' D- ~) y8 e( k( O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) S/ P- F) X1 @3 p
s* S/ _- S$ @. k$ s4 [0 _ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 S7 Q/ A" X/ Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- w6 E, c6 d8 O- `4 N1 i3 n
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ i$ W$ h* n5 n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) e) f( K3 k) i6 x. K
/ Y! W4 I$ Y8 G2 q z2 T E( F) o CSR = 0x0000;6 F0 A5 ^4 j2 c5 Z0 K3 K: W, h
INTC_INTMUX1 = 0x3d;, m8 f' m& p" Y8 |9 i
ISTP = (unsigned int)vectors;
0 ]+ O5 `" a9 A' A) j2 I" w0 b ICR = 0xFFF0;
' b, S7 U4 a0 q; Z& X0 h IER |= 0x12; 1 S) [$ ?/ |" y" d; c- D
CSR |= 0x01; 9 w# Y) s J1 n
4 S7 o y* X/ M$ m1 `3 p/ e% e
* |, R0 V: K$ k9 K1 ]6 D1 X* C/ N7 |& f5 [# W0 l T* a
还有就是两个输入输出函数:: q+ `& f: T& ~" ?9 }7 p: w
void output_sample(Int32 out_data)
9 N) B5 D" U# y+ |) x! s{
9 l9 r) @" W' G) U& b AIC31_data.uint = out_data; 3 z$ `7 a, M7 b+ l! b% z5 b( h# f: s
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 |4 e' E+ c% E2 E
}# Q: P3 W& ?. E |; E# ? [
; U1 g) L( j6 G" H) n
Int32 input_sample(void)
1 o, V1 j6 L6 o' o; t0 d{ 8 }2 X- c5 f G% |" o& t5 u
AIC31_data.uint = MCASP1_RBUF0_32BIT;2 @/ x& S* r8 I7 z
return (AIC31_data.uint);
. d+ ?+ h6 |" T' C4 ?$ L}
4 n7 ^; e9 {3 x' e( g2 J$ s& o) j. n0 b( |% h$ U( E
|
|