|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) O D1 l! h1 S3 |1 kmain文件:
% u1 J: {# x0 M- L/ h4 _interrupt void interrupt4(void)
8 U# |5 l) w1 Y. |$ K{
' L7 A4 V! `4 K/ \5 L. P: }. r Uint32 sample;
8 h9 W" p4 f; c7 Z, J( v% M5 l; |( m* K
a: q' Q% X- O+ g1 n sample = input_sample(); // read L + R samples from ADC
1 S* T% S' L% S2 { A output_sample(sample); // write L + R samples to DAC
0 A$ o: p6 A% r! {2 D return;1 j! L! t/ g3 f; o
}. f1 z# f; l" G: w. a% @2 D
6 L( h3 ?# l7 l1 y5 d# C8 jint main( void ). ~0 Y% B" n3 L2 h' y. v
{
$ e: w- p v' I( Z! u" N6 ~3 j+ T( \ P: l( _! o0 _
/* Initialize BSL */
% B I: e, N$ P/ ^ EVMC6747_init( );
, v9 m5 i4 D6 U3 d+ D p% q /* Call evmc6747_intr function */8 y& I0 C8 d B( B M7 N: c F5 J9 n4 e
aic3106_init( );
3 u$ y) b1 Q3 J3 s. ~% L1 U while(1);
8 B G; i! R! s+ u( q4 |5 K}
/ d8 j' \' N- C" T1 R8 l! W4 H: c `# _. h* }# J, M5 d* F* n
7 n Q. \! O3 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& g- h. {! U1 T) p/* Initialize MCASP1 */
% N/ [( L' i0 \* C mcasp = &MCASP_MODULE_1;- @4 |& u0 \0 e+ \
mcasp->regs->GBLCTL = 0; // Reset. ]0 l% u/ F' x- [
mcasp->regs->RGBLCTL = 0; // Reset RX4 `/ {6 @! h. c0 O& Y$ I% ~
mcasp->regs->XGBLCTL = 0; // Reset TX: Q/ b" R0 a- f* y7 i" ?/ `
mcasp->regs->PWRDEMU = 1; // Free-running
1 ?9 v m) z m3 V // configure McASP0 receive registers+ S; C$ a4 \/ K; j* a; t- s
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
& J4 H/ h- {6 l0 O( B! d6 k mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 J+ p9 N0 C; ?+ [- K+ {
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ }. g8 \, v F/ `1 ` mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% c4 f& V0 {5 T* _/ a! B1 n mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 e- F1 k% {* u7 ~% A, B8 V
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ K, k' u) c: t6 {$ u: g& w/ _2 c
mcasp->regs->RINTCTL = 0x00000000; // Not used; s) o9 P6 f: c) w4 v4 w6 F
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ r8 p0 Q, b% _ a
% }* L1 F0 c3 r' y! i; o& T mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 _* B2 |# w* m/ B4 C5 c( [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, t- L+ j' i1 s4 J
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: G/ S* s9 x% F6 @3 U2 _
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, a) _; q' {1 Q9 n- @
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! ^" a, O3 G% ]" G/ S( u mcasp->regs->XTDM = 0x00000003; // Slots 0,1& Z9 s+ h7 N( b7 t
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; }/ l+ Q" H3 B, e4 w7 x
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 d2 [: B: U) _9 Z
5 @' c( R) ?3 u mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 X: R. D& r. c: R7 ]
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
- B0 A$ r" B8 }7 q4 S mcasp->regs->PFUNC = 0; // All MCASPs$ D6 p+ |6 A9 B, U1 S3 G
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# M' E% X1 U) H) b _: x
# p- ^5 Q0 g+ m+ c P# @ mcasp->regs->DITCTL = 0x00000000; // Not used
. r7 m8 }4 b% }' v5 q6 r mcasp->regs->DLBCTL = 0x00000000; // Not used
. r& A# h) b+ I( p mcasp->regs->AMUTE = 0x00000000; // Not used! J# ^( L3 F, K, B! J+ q; ?$ ?; Y
- l( d4 r% Y1 \/* Starting sections of the McASP*/8 q3 c9 o3 Z; g% b! o# M
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; G* t2 q D& ]9 T4 F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 h6 w6 @& U8 w: @" w2 Z; s" b8 I
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # \1 w' {; g0 Y2 J n, u( U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: g% U3 G- j3 |- I2 T T
' x" R [' D/ v" n$ n) d8 I mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # _3 O+ r$ D) f1 w; h2 Z; w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( P: n' L/ |) @2 @# Q' ~/ p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 X( O# L. p9 O% a/ h& U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% b4 c" C" N% L) ~( T( w: ^
8 B' c% X8 Y3 D3 W( U) y mcasp->regs->XSTAT = 0x0000ffff;
. D2 A- w: [' t: U mcasp->regs->RSTAT = 0x0000ffff; # K: S$ R) H7 h3 ?; Q
- U# A1 E+ Y$ I" ~- s6 ?& v
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ u' \, m- ^$ E, Y1 d/ }3 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# D# p% R2 ]2 _/ Q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 A& G, \4 O9 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 u' |: R( e, `3 L: q
! [! K7 s# p* S' [# \ /* Write a 0, so that no underrun occurs after releasing the state machine */ P: X0 h/ a5 Y; Q
mcasp->regs->XBUF5 = 0;
" A$ F; y# d8 q mcasp->regs->RBUF0 = 0;/ a. I' `) l$ m! v8 e+ Y
' T) f+ n5 d8 i2 {# v
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + a9 e3 k, n6 e7 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! X, j) C- |$ Z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , J A3 R7 B z* b5 Q: Z# g ?; z+ p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 Z8 Q5 T/ K8 }6 e7 L* [' O2 r! b: y# q1 `) S0 v" q+ K) z: {& A, {
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 F5 r( X9 {, E: d2 H0 ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# \) V& F/ T+ ~. w7 g. Y5 D' l mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 T7 C* |' x4 m7 E2 d7 y0 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 i4 u5 P; a% O3 E0 ^3 u3 E' O
4 }+ f5 i. @. s9 J
CSR = 0x0000;
/ B$ r, E* o0 l INTC_INTMUX1 = 0x3d;
, o% q6 N, W# b8 N' s ISTP = (unsigned int)vectors;; S, w1 h3 ]* ^+ L7 h7 E0 B4 D
ICR = 0xFFF0;
1 H- @1 a* I4 k/ u0 o2 h IER |= 0x12;
+ ?, T% F8 _- _0 C0 I- G CSR |= 0x01;
, _, z& b0 o' o3 e: Q9 g( R6 j6 `$ y$ A6 R
9 E% e/ i. h: Z3 m. d5 K
$ R9 h7 `5 Y, q0 p2 d( u! t4 _, E还有就是两个输入输出函数:
6 h' e, N- n* o: V" Vvoid output_sample(Int32 out_data)
! S6 U, g; x9 e$ ^* ?5 S{
/ c6 T3 v5 q5 b4 n' l: u9 J AIC31_data.uint = out_data;
: o# W% a% m2 s" E' Q MCASP1_XBUF5_32BIT = AIC31_data.uint;0 L! L: P9 o! y
}
3 T* A7 P& z/ S/ C. W! ]% `' z
$ k$ w* t- b3 L7 p9 MInt32 input_sample(void)
o, \% f# o/ a6 X& { R$ O{
- I/ Q4 {" M7 f8 @! q! Q4 S& l; i @ AIC31_data.uint = MCASP1_RBUF0_32BIT;
. I/ q8 a: k" Q1 x0 x return (AIC31_data.uint);6 l) ?+ i9 T/ X) j
}
' @3 V- x1 ^4 f. S: C, M0 G3 E
6 T7 |) J# F6 o V0 m |
|