|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, P) u- r' G2 _( |0 h* y* ^) M5 a
main文件:& q3 g8 U6 {" n0 v$ i8 p
interrupt void interrupt4(void) - u1 x& M3 @3 g N. i9 ?2 N3 e% `
{8 u! Z2 W, o7 n9 i9 t$ t5 M9 k
Uint32 sample;4 T2 E; J( }; y- ~3 B0 e7 ?
3 X8 E" o" e- Y6 D7 S3 z sample = input_sample(); // read L + R samples from ADC
( o' {2 Y& D4 v8 S5 } output_sample(sample); // write L + R samples to DAC , I: m) N5 x5 q/ S& l8 f
return;
* z: I. f5 I- {+ v" R}
! M6 d/ Y5 ], p' z1 j# ^, ]! @% i4 ], @6 z, D9 B
int main( void )5 s" g, E+ l { I
{: p! K2 j6 d, b8 o% v
9 [) w" u( y! b2 U/ J
/* Initialize BSL */. i) X/ _) `- q. L+ {% g/ F
EVMC6747_init( );
* l5 O w- n; H" `1 @, m% k /* Call evmc6747_intr function */
5 |6 Z+ c( J$ Z( ~6 B+ d( s& j aic3106_init( );
& }) {4 u! S1 V3 S! @ while(1);$ _2 y. w# a6 z' n ]3 l$ A
}
" f5 |4 s! D% k3 l1 X4 H4 b" Z$ f$ E
8 o2 W+ `: k: l( R4 g, a; faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 {/ [2 h" x: g+ m
/* Initialize MCASP1 */
+ ^: g& q& ~$ H5 J/ q mcasp = &MCASP_MODULE_1;
" x( q, m9 N l3 E mcasp->regs->GBLCTL = 0; // Reset
+ F$ q2 W4 ~; d mcasp->regs->RGBLCTL = 0; // Reset RX
, W% A0 B. a& i* H% U mcasp->regs->XGBLCTL = 0; // Reset TX
5 P e: ]7 B2 u% ?2 W+ M" i4 r' c+ [ mcasp->regs->PWRDEMU = 1; // Free-running
`3 e F. n; k5 `! A/ j8 f* ^ // configure McASP0 receive registers. q' T7 b3 _! @2 Q3 a" B [
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' | M* h; H+ i3 u( l" T mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 t g: N+ Z# D! ^+ d
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* B6 x7 I+ {9 c mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& l6 s) u( ~: M8 i7 T, s5 ?4 v mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 L' \- M; v/ b
mcasp->regs->RTDM = 0x00000003; // Slots 0,16 `1 J. J# d! e _3 d0 `* G
mcasp->regs->RINTCTL = 0x00000000; // Not used( g( k3 ]' u4 u1 {9 v ^" y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 B& D/ F' _( {! p- z: h, e7 r1 A% W" H( T% u8 m) J# m. r2 G
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
b3 j( B! B! G9 y" V4 c0 a+ S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& f) C1 S4 L1 R: A- ~
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& i8 X9 a) o. a1 N/ P: d mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 c0 y! H# d8 x1 I; n* Q6 I' M mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& ]6 _2 h# ]2 X
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 Y( {( M. p X8 w$ ` mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
5 T" H* _* b9 }5 M mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 I: H2 n" W! c. R4 `8 ~
+ L" f; k6 g4 G' u3 c9 k
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* @- U; L# k8 k" T6 r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 I0 i m. h$ {! F
mcasp->regs->PFUNC = 0; // All MCASPs$ t V) F5 {( p# g# P% C
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# B/ H! L7 |, r+ U
7 c2 v( x& `4 X% K# v mcasp->regs->DITCTL = 0x00000000; // Not used
/ B Q5 M+ i7 k6 L; j mcasp->regs->DLBCTL = 0x00000000; // Not used
. H# @) L; J+ A' W mcasp->regs->AMUTE = 0x00000000; // Not used
7 v6 P. I$ d4 X
; }7 z3 T6 J) Y% ^% W- s( g) b. E/* Starting sections of the McASP*/1 g( m+ i$ Q0 `7 p6 L& P" \+ Q, L8 K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 L8 D& {! @, L" }6 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ N, U9 x( X( D! ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; q" a- N4 b$ u0 |+ ]8 f! N2 J) V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 G( C" r4 }# V t, H0 f
. k2 ]" }4 A; T9 V% Q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
e* b' W# s( d( @3 Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 E: c1 A1 W! n! v; w
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 A6 O2 H0 K1 Z6 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ d5 v% Z$ M/ W+ A$ e8 k D* W
' K+ H+ R1 H+ [$ J' ` m mcasp->regs->XSTAT = 0x0000ffff; * J5 j B! g) z( F( Y0 R, m
mcasp->regs->RSTAT = 0x0000ffff;
( N( q# m: M! F7 m0 {8 ?
7 N3 {, h9 ?* `' h, c2 c mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ Z$ L' \8 S! M3 U! b$ q: r1 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. v$ E6 U+ G' q+ H, w+ ~0 R
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , z) R/ \. n, k; {% O6 k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 `$ d* F5 d, R4 p4 a& N% D' _% w+ l. S
/* Write a 0, so that no underrun occurs after releasing the state machine */
3 P4 E! q$ e1 o- U& M mcasp->regs->XBUF5 = 0;
, K; I! ?$ v! w' n' c: E3 K mcasp->regs->RBUF0 = 0;
}( A- W' C3 `1 \
. y2 g4 `* D: }" q' p# m mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, ~* U# k) |- ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 }& f) a8 L' d0 R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; U) l/ e5 Q+ p+ g( L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
]3 D1 h$ j( F- V
9 x, I' Z+ L4 c: |/ q) ^ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( i5 T" h; u: i6 l8 M- ]2 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 n8 F0 s$ {4 l" o! \ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 t: f6 j' n) v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 G( q/ O% r2 L% M G5 G' i" h" ] G ~% U' r$ x/ _! Y9 ~ Q
CSR = 0x0000;2 R- C8 n" G/ ^$ j: M6 O
INTC_INTMUX1 = 0x3d;
" B5 m. {) U- d2 \0 u) R ISTP = (unsigned int)vectors;
7 ^" v! @: Y: q& r ICR = 0xFFF0;
. H5 y$ y3 o- O* \' ~1 { IER |= 0x12;
" Q4 A6 f0 B% Y- u) f; i CSR |= 0x01; 2 n* U3 F9 h/ ^, O$ G8 O) v) H' n
0 l, d% U3 h% l* _% k1 Y( }8 T* n5 s& w; x( ^: I. M0 l
" j/ T% h2 w) {" m7 {9 Y( o: a
还有就是两个输入输出函数:
. u) w; w! e/ |- @; L* `* Svoid output_sample(Int32 out_data)$ X( x$ O4 i5 c; R
{# d C+ A5 W* a- p" j* l4 A8 L
AIC31_data.uint = out_data;
" L& Y$ }6 b% ]6 e$ S/ P MCASP1_XBUF5_32BIT = AIC31_data.uint;9 v5 p: y% W( i4 |
}& Y s3 ?8 `2 Y# q, O4 e' u
4 R9 ^# u& M N* B$ ]9 jInt32 input_sample(void), t$ B S- ^5 a
{
2 S+ y9 @4 y7 Z: B* X( C' O AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ t+ {; d2 [ r# R return (AIC31_data.uint);/ O1 c& V8 o$ a( |
}
, Q5 P6 _) F2 i0 M4 r; p) |3 O2 `. ]* E. C
|
|