|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; q4 @1 o! d& d+ ?main文件:
9 J! t5 G& s8 v7 d: W6 Q- ]* M9 qinterrupt void interrupt4(void) " Q% o$ b* s" a- ~: A3 X( {
{" m; {9 t, B0 o, C7 @
Uint32 sample;6 P+ ]/ ]3 a; c( k
6 f9 ?* O8 o& X1 H: Y. Y% R+ j
sample = input_sample(); // read L + R samples from ADC
! \1 ^! V; ]2 K6 U0 n9 \" d$ w3 m output_sample(sample); // write L + R samples to DAC
* V& {$ H0 W8 [4 u6 ]# K9 d return;& j6 E5 D' H% O* f& z
}
2 T3 ?9 \4 v9 w; ~. g- } k& n4 f! y
int main( void )) E2 x0 w" D2 h. L# F! J ~
{% F* m" y& g! T6 J, `2 O# C, y! |
% O" K/ a, ~8 T: x& ^# p /* Initialize BSL */
0 n( `2 ^9 q/ p9 M8 i7 } EVMC6747_init( );, _: M6 S7 S! `3 _& j
/* Call evmc6747_intr function */) }2 N0 x0 I/ ~+ J. @
aic3106_init( );9 v6 [: Y$ g: A2 ~
while(1);
. F8 E- V6 @/ _: F}" W' @. U% H) c( Q. J( d
- D5 s1 u8 |& N& Z0 q2 x
. k1 n- Z# R% ?* [1 M- E8 \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 S$ E5 r0 g' G; c, M
/* Initialize MCASP1 */
4 Y8 |' z R8 P% l mcasp = &MCASP_MODULE_1;& f& |- n( J+ q; s3 N- a
mcasp->regs->GBLCTL = 0; // Reset
$ o, D4 `1 L. i1 \& L# g mcasp->regs->RGBLCTL = 0; // Reset RX( M8 n6 k$ y, J( p
mcasp->regs->XGBLCTL = 0; // Reset TX
3 l. ]4 \1 O4 Z( o mcasp->regs->PWRDEMU = 1; // Free-running8 _3 [7 |* ~% N( Y. q* e
// configure McASP0 receive registers
" p, @" J0 j1 M; y4 Y2 Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ H* |) l5 d6 r( u
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 _% c2 j6 Q% o$ q. X O mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* y4 i8 Z ^: \3 t* v8 W9 L' G& W0 u
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" a1 h, m( n: Y4 D
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 j7 R! @( U! Z) q" h( }
mcasp->regs->RTDM = 0x00000003; // Slots 0,1# O) b$ |. F ~) s8 L( N" Z; v, V7 [+ j% j
mcasp->regs->RINTCTL = 0x00000000; // Not used
( m8 B2 X4 B. K) t; D: g mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 x# r4 g$ n* S8 X4 L7 H- w5 s4 w1 c6 O4 ]1 q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 `2 `. @9 s% b, H
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, U# h7 v: [" e' o5 w" N5 ]; P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ }- s0 {0 X2 Z2 L
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16 J S) D! N% t1 O+ D
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) ^' {% x) y& N) ]) H mcasp->regs->XTDM = 0x00000003; // Slots 0,1. @3 c7 N( m: B1 _$ S) q) p0 B. ?
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, E2 p* K2 C0 ?
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 C/ b0 U s: Q" {; S2 s6 C
, _# X4 Y) |/ o mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' Z! c3 ]3 l; y9 K( S$ x I x
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
% w2 d$ p. r. L mcasp->regs->PFUNC = 0; // All MCASPs
0 B$ ~- D, X6 |+ e mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, H" K2 S( q5 a2 s7 N; ~$ n) |
! [& S. E' _0 L% L1 n8 g
mcasp->regs->DITCTL = 0x00000000; // Not used- J) z2 Q" m0 j& y# K) X
mcasp->regs->DLBCTL = 0x00000000; // Not used& r. @% b3 I2 p# H M) G5 m
mcasp->regs->AMUTE = 0x00000000; // Not used9 A6 w o8 { E. n
* p9 t1 O: b$ k/ \: E# t. X/* Starting sections of the McASP*/% Y& F3 y7 X4 P! n& B" A
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 K0 i. ^6 T+ J* q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ! {5 \2 X& S/ G6 e1 c6 Q* W. m
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 W9 \2 |/ \: S! R$ H1 R2 ^: E' P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* H" c! Y# o: c* m$ J
' _8 W% H+ v: y1 c" H) Z2 e3 { mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ W5 Y* U( B% H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 z) e: f2 ^9 l2 t) o0 d" L
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 U3 l4 Q# d' C6 t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 F( p; [/ X* q" X" s) u
! R4 r& L: C5 j7 b+ _6 h6 U mcasp->regs->XSTAT = 0x0000ffff;
- m. u2 }3 \# R% C9 n( N mcasp->regs->RSTAT = 0x0000ffff;
; S3 ^3 d6 T2 k0 g, J, \' U8 z1 E) Q! v3 f) K) Y6 Z
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 D- v$ x% a; ~3 P% k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) u8 @2 b3 o( `* Q5 ? mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : e s5 B: x! j1 m' L# P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* ]8 M) D& x4 ]! q* j, z' K* {$ Q* Q5 }' N2 r6 |
/* Write a 0, so that no underrun occurs after releasing the state machine */
+ w! c. [# ^. H4 c mcasp->regs->XBUF5 = 0;
/ q- E' V9 U6 [ mcasp->regs->RBUF0 = 0;
/ c2 [2 n9 m" }' s1 Z: E; R: [5 q
}3 Y6 W3 T9 p' G |7 @+ [9 W mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ \! Z* a* u- o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ G2 j) y. ~4 D. `/ q
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 _1 H, s9 K: I; p& y. X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( g2 [5 W" @0 H! n! s
0 a7 M0 x9 d& R. ?5 e% y4 \- i0 K- O' M mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" o# @3 G3 D% c$ a | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% c# D/ i6 v/ j% g: q5 i W. C7 T mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 O( Q6 Z" P8 K; E/ w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! Q. n% D8 _# j( {$ Q) v3 b9 H/ g% ], K7 d d# d
CSR = 0x0000;
! ?; I& T9 y/ n! d INTC_INTMUX1 = 0x3d;# A$ p) ^. Z* o& g
ISTP = (unsigned int)vectors;' Y( {: _2 V% ]( v4 Q% t
ICR = 0xFFF0;
' }" c i1 K) I% Q" x IER |= 0x12;
. a/ h7 e2 e# `) q3 |4 Y CSR |= 0x01; * n$ A( [& v, n) y3 [; E3 W8 o
! W) V1 r+ k. y. i) S* e* c
' e1 a. b7 x3 J* B7 i0 M4 Z; u+ K2 H& c! z0 w( p6 R
还有就是两个输入输出函数:8 j1 N2 w2 c0 z) V
void output_sample(Int32 out_data)
* W7 Z) b* A' |* U/ j4 [{% a$ \) [4 N) e) g( t
AIC31_data.uint = out_data;
7 ]. T! s% u3 e. a% n3 u MCASP1_XBUF5_32BIT = AIC31_data.uint;/ I. L* p" _5 E' K$ i
}! V4 u) i! c) a. k9 z
/ I& I- t5 }! A# O qInt32 input_sample(void); P7 _# O) Q9 Q
{
4 E* t! E( x8 X, `3 y- b AIC31_data.uint = MCASP1_RBUF0_32BIT;: ~; N. u, H( G- N" I' [
return (AIC31_data.uint);# E0 W- ]7 W7 d5 f
}2 M+ f: ]2 ?% X1 D8 W$ q6 e% ?! }: `
8 L' n6 o5 N8 {# M |
|