|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* \3 o+ b% Q- N: u7 [% D2 i# F
main文件:1 n4 x9 q# [/ {% E
interrupt void interrupt4(void)
3 `3 K. w5 f) y/ k8 H{1 v/ I9 G& J) g/ W
Uint32 sample;5 N( d* {) L: k7 O
) V8 X7 Y/ G. u7 U2 ?) ^0 g
sample = input_sample(); // read L + R samples from ADC
1 B3 j, j: g$ | output_sample(sample); // write L + R samples to DAC ) Q! u5 v$ ^& L, j! U( t* g" m
return;2 h" [$ Z: j, e
}
F8 w- c2 B) [8 S; u1 |6 _: H
1 v* G- R! Z/ W- }8 h% _( r& Uint main( void )
( l8 x' {$ k( ?. G{' Q; t K; m3 E3 r
; b- A+ A" N2 W2 D8 _" a /* Initialize BSL */
3 \, `$ N: Q+ P: P2 e EVMC6747_init( );
! L9 g" z% o, C# E- y1 q /* Call evmc6747_intr function */) J$ u3 X+ g' {- L
aic3106_init( );3 R. z. l9 T( U3 B/ N9 o: ]2 f* R
while(1);6 \ a, o8 w( s7 Z* f6 o
} B$ j" c" s' J$ h; J. ^7 @
$ P0 e$ p7 x" l3 _( D
$ y4 p% J D4 ?/ ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 _# Z4 |3 t) f- ]# l1 `+ T; K
/* Initialize MCASP1 */
|4 G! V Y8 s' {1 I mcasp = &MCASP_MODULE_1;
& p7 r) q8 [7 p* s9 [ mcasp->regs->GBLCTL = 0; // Reset
?, w1 d7 z H9 R. \5 g mcasp->regs->RGBLCTL = 0; // Reset RX
! k% F" I9 ^0 n$ | mcasp->regs->XGBLCTL = 0; // Reset TX; z" ^8 O9 S& t$ o) @! \: ]
mcasp->regs->PWRDEMU = 1; // Free-running
b7 @7 T6 W# u% i% c // configure McASP0 receive registers( {+ U9 J9 o8 o$ t
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: |8 `) k3 a" Q5 v9 { mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% @& R& g: B0 T8 r1 J" r* F
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 j8 _' U8 x' z: u mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ O& ^% H/ [5 S" u. j3 l/ _
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
! g" x7 p- j& e0 P mcasp->regs->RTDM = 0x00000003; // Slots 0,1) ]- D# Y1 A F: B: O/ M
mcasp->regs->RINTCTL = 0x00000000; // Not used
3 ^! T' W$ n9 E W) F3 d- E mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! i* p6 p& }5 T% @6 ]
' C" D' L" y( m" f mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. i' t' O% N3 [ H
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" X7 p9 i/ a& E/ i% h, f4 v# l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ S! J J; f z, F2 O; i
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! T9 V/ \7 c" Q; C% Q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 f$ B7 [8 }. [/ F% E% n3 z9 t0 S
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
4 i) N( T, H. O mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
9 s! E! h' z4 s mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 u' m/ @2 F: D7 j( E1 H2 H3 m
, Q; {1 y. \4 B% C; U mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" B7 q$ m" p+ V8 i mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 S6 U+ H9 ]: {2 O, } mcasp->regs->PFUNC = 0; // All MCASPs
% p4 j3 o! z) J1 T, W$ p: L mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 ]4 p, h5 e! e# \4 y
- z4 w4 i: {0 |0 B8 L mcasp->regs->DITCTL = 0x00000000; // Not used
6 D2 D3 }) F' N3 [( E/ K mcasp->regs->DLBCTL = 0x00000000; // Not used
3 y |$ O+ V u! Q0 p mcasp->regs->AMUTE = 0x00000000; // Not used
: x( x" e7 g- ? d8 `8 S1 r7 F- t7 _4 J6 |* O! e2 \0 }9 u$ Q
/* Starting sections of the McASP*/
& v" S0 L" ]8 }" k* x5 i1 ] mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 o9 W7 \+ h* E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
' j: G6 W! C! p' r; k- m$ F: J/ H* F1 v mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 R/ w2 _- \- G2 Q/ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, B5 l2 ]! A( s* ~- d7 T K7 d; |( C A4 u. f) q$ Q$ h8 v1 ?" \
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ F' D- Z, L& w2 {$ @1 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ b- I" z5 C5 W' t mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & O% l' J4 m9 F' h" S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) H" D& \0 p+ K; E) F; p
+ r8 s$ C: T1 P mcasp->regs->XSTAT = 0x0000ffff;
( x& K4 s' C& i* _1 T6 g( X mcasp->regs->RSTAT = 0x0000ffff; ( }8 M3 `' j0 O. ^& B; r
) D" y9 n) X2 ]; U& Q
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 a' W r2 C8 s1 _$ u: r) M+ [, d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. D7 O" E1 j2 T8 c/ N& ]0 G/ @
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 ~0 M) `6 F8 W K; B8 w1 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 m- ] b1 I# U3 p
+ V, a" V: }2 F: J; N /* Write a 0, so that no underrun occurs after releasing the state machine */
5 C: L3 k% @8 T mcasp->regs->XBUF5 = 0; B1 _) J5 G) b+ P; O* b4 O
mcasp->regs->RBUF0 = 0;+ I: L/ n4 r* i/ d9 U. x; R
+ J- b' \& S9 H G2 ?
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 l5 K7 _. |6 I/ K( V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 X/ D3 U& [( V2 T9 S; [1 M4 J0 V
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 H- p6 N. x8 M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" P( i) w7 Z, h0 r/ s
( |' W7 d, v C$ ^+ G( c1 b mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ ^( u) w9 ]3 H$ [% m; v$ h% f. B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ m8 {. x; @, x) H+ n$ a# r
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % E! F- D5 b9 Q2 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, \0 k0 P" n) v3 `% o/ S1 D9 |% W' t" V; }
CSR = 0x0000;
/ V/ l1 q9 L# O/ D% \ INTC_INTMUX1 = 0x3d;
! g( ?: |, @: K ISTP = (unsigned int)vectors;% ^9 f D% x2 z
ICR = 0xFFF0; - F5 A- n% G7 l: R+ a4 [
IER |= 0x12; ) K' M1 Q- F0 }, e
CSR |= 0x01;
* q' ?' E) {- B( e# T/ [9 U( G3 M
! _2 {, A1 e6 b+ t6 N8 X# n
g4 r8 d8 m4 f; L# q" I. P
5 N* r O6 [- ~# i% k还有就是两个输入输出函数:
$ u9 j3 R9 R/ Y% q0 X/ _void output_sample(Int32 out_data)' @9 t$ G t% K
{
3 e5 D5 C5 g( [9 W* S$ Z# W AIC31_data.uint = out_data; & E1 c/ W* U3 o
MCASP1_XBUF5_32BIT = AIC31_data.uint;' @+ H! j% r0 Z; X3 Z8 B
}
& m' V0 T8 H% }7 e- f# u0 H1 D, `
7 y- K) l6 u# Q' G) F' d: a* ~! Q% ZInt32 input_sample(void)9 y$ u: W3 C7 {4 T: h
{
% c/ {* b$ v# ^0 z/ s; i AIC31_data.uint = MCASP1_RBUF0_32BIT;, o2 q2 ^" S: |, e6 }% {$ f% X5 x
return (AIC31_data.uint);; J1 b/ o, k9 P1 a* \; p
}
4 j7 i% {/ W4 y/ I5 H+ C
6 {5 h/ x6 c& ~" m; V |
|