|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 ?. ?2 ^$ ]# J7 ]; N
main文件:
9 S+ t" v2 a0 Y5 ~% zinterrupt void interrupt4(void) ! a& T; l, U: _" F3 u$ ]( c
{
! Q/ `6 \& u. S9 E: Q# x% s Uint32 sample;& N$ e4 Z4 k( K
" A3 @1 I2 Z4 \6 j) V
sample = input_sample(); // read L + R samples from ADC
+ h9 v$ |% F6 V! P6 T output_sample(sample); // write L + R samples to DAC ' W' R7 P1 P7 F* i
return;
; x9 _6 p) O8 U% `* `- o! Q$ Z}0 e* x5 ^: q5 j9 v! M
4 q% a5 j; T$ a
int main( void )
- f' k8 b2 ?# t% d! o3 h( |{: S& o9 i- l8 a A( v8 i+ S
. W2 a: t1 @4 x6 A6 e
/* Initialize BSL *// n; m4 a4 `( Q9 K5 c5 `0 E
EVMC6747_init( );
9 B. }! \3 d4 G9 }' x. g: F' G /* Call evmc6747_intr function */
6 l! X# q0 g& V2 G0 ~1 _ aic3106_init( );
9 N2 ~ v! c. a7 @2 M while(1);
- e4 e! I( N9 _' X- D$ K}
# l% p0 v; B8 F1 P8 n2 }
* ]: p4 ?+ q1 {) `- G
) L5 `/ z# U6 E+ W* {3 [0 ?7 l, h! _, Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% l& N/ a9 A- } f0 M0 o/* Initialize MCASP1 */( y c4 `/ p U' C# ~4 \" h
mcasp = &MCASP_MODULE_1;
8 u% M4 k( ~7 U4 s mcasp->regs->GBLCTL = 0; // Reset5 A2 u: v9 f l( S9 h* y
mcasp->regs->RGBLCTL = 0; // Reset RX
/ D8 m( W9 \7 D& ~' A mcasp->regs->XGBLCTL = 0; // Reset TX
" p+ W K2 e9 [) N3 p( ?! J mcasp->regs->PWRDEMU = 1; // Free-running
! u& Z& j' F S/ B& i8 N! O // configure McASP0 receive registers
6 `& A! M' R5 J3 o+ F mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' g3 C2 K" _3 e) L8 X+ i% k mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
t/ ?9 A, n+ H& P mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 A: A4 Q# Z' D
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); }6 d1 q3 {; E7 K4 V2 h6 I0 A# k/ h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 A1 j& `5 }9 z+ `# \. g5 E
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 b$ r: F" h, X2 e8 M) I1 w mcasp->regs->RINTCTL = 0x00000000; // Not used; T, q4 l& C c0 R8 r
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 Q) j% z6 K$ l4 ?8 A& |) g$ }3 X& k) E$ d
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
4 k! @5 x3 q" y' ^2 g! _3 ? mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 ?. a7 I. S0 Z, C n! ~- s9 O& y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 @; u; u+ r# A4 f/ ?% [
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% i3 J) U" }5 d0 @, g: ]7 F6 a* j mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" \) E- T% L& r: b+ W) s1 h" ^
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' Q& n; ]/ k/ z6 T6 b( g( _ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) b. R* Z1 e; \: r& J# v mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, [0 U5 _' |; o }6 u( g: D; e% A! \6 Y$ q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* @& w5 g8 h0 |2 o
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' ~1 g! d$ u" @( |- j mcasp->regs->PFUNC = 0; // All MCASPs
" |+ r! S, d5 t- g mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" p) m6 Z6 z/ s' L" K
; }7 L( [% Y1 q b2 P* A1 r/ O
mcasp->regs->DITCTL = 0x00000000; // Not used
$ z" u# S1 n1 v mcasp->regs->DLBCTL = 0x00000000; // Not used* O: q/ z: e/ Z& |/ `) {
mcasp->regs->AMUTE = 0x00000000; // Not used
9 B: l; B% F' q% ]$ Y/ R1 r+ T' v# P* j9 W9 g) N
/* Starting sections of the McASP*/
. B$ l1 F4 E( k& h& ~+ K: Q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& W& j* L: @4 J: N' G* y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 m* |+ s& B# t) ~% A
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
Z1 t, `/ H( g; T/ y0 k) f. J7 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ R3 T4 e9 @6 J z3 p
; S+ L" l: ^0 G mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* Z: T3 x6 M- m+ F' v* [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 {% s0 o/ Q% g. I2 W& `! R
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 U2 `+ B; ^$ L+ _+ i0 Y/ G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 S& Z- n. J. T# Q
; v* r6 b, d' _# Y
mcasp->regs->XSTAT = 0x0000ffff;
; c$ E( x. I+ z$ s* ` D' g$ }! v mcasp->regs->RSTAT = 0x0000ffff;
% Z9 J! M- U( A* f8 f H
% k7 l+ n) I% X; h mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 w0 b# T+ p. _) F: D, ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 R4 \: F ^! B; J; b0 n; g mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 V$ N- n; B: f) ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ ?1 M% x6 T5 d# p. T+ s% y+ P& X5 c- ?2 V8 l% `* T1 }6 y
/* Write a 0, so that no underrun occurs after releasing the state machine */
6 {* F1 [! g5 s( { mcasp->regs->XBUF5 = 0;% V8 T' X _. B' c/ q. h
mcasp->regs->RBUF0 = 0;
# {' u* G7 R2 o( i( Y, v$ {2 }6 J/ r" r( h* C8 q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 w& [5 ?. U s9 h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: x1 N* ]5 q; s, \# R, s mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * P# y5 x/ e4 r# ^* q0 V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
P3 b% a Z+ A) ^' W
- B A4 o4 v# m; m2 J mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 E X2 _" y. W' F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 R6 w8 z* E0 Q
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ W. E1 h2 ^( K# t. t" X( Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 \- R4 Q' Q& P8 B4 A' y- F: v' f* m2 y6 |7 u* e8 r
CSR = 0x0000;! r2 I2 c% n2 V( p
INTC_INTMUX1 = 0x3d;
- k9 f9 X+ @ X* c' l ISTP = (unsigned int)vectors;
! y0 j, E' e1 k6 I) n! ` ICR = 0xFFF0;
E6 A) U$ Z2 M IER |= 0x12;
6 F- I0 b# j, u CSR |= 0x01; $ m2 {2 P7 j" J1 {% d
. F% ^/ o" Q) w) c/ A+ N7 M
: T3 U9 Q2 S. i# g
$ Z0 a% T6 t- z& [" }& k- {* F
还有就是两个输入输出函数:# L4 K- N5 V+ m
void output_sample(Int32 out_data)
3 R2 m4 h" _( X" z' _{
" l, p+ j$ m5 K% } AIC31_data.uint = out_data; 6 Y# d# m: @7 }) |! Q d
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ T. j1 G; X8 z0 q) x
}
5 N7 z+ B* Q/ B9 I: R$ e% y3 D* v% h# q
Int32 input_sample(void)
1 V, w3 C9 K) {{ / u) M! Y5 y9 z9 W
AIC31_data.uint = MCASP1_RBUF0_32BIT;
& X! v' I# U! }, L return (AIC31_data.uint);
) Y* ?5 u3 S" f8 v/ f" e* _}% M: j$ [4 B+ M) [( X/ H3 x S, W
0 x8 J. x2 z3 y, k; I
|
|