|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 K5 d) l2 _* z3 a p( i* H
main文件:
# g6 D9 r7 w8 Z8 a @interrupt void interrupt4(void) " l. [: `& r6 [2 v
{
8 Y7 B( M' z6 D0 J' L( @ Uint32 sample;1 n$ ]4 o) P% J0 ^- S1 j1 E) D( m
9 a/ f; `7 w# q2 a: A( O2 K
sample = input_sample(); // read L + R samples from ADC: U9 d! u# O, O
output_sample(sample); // write L + R samples to DAC & b1 H g$ e; W" W# w: [
return;4 H8 ?- b/ E1 v$ m
}' C5 V& A* D' a" q4 N& z) q& z
, G n: n2 ^! K% [
int main( void )
7 C: w- n$ l3 D! J{
" C, }* j8 ]- g" P+ s( {& l9 { }' a7 i
/* Initialize BSL */$ I( X4 ]' }5 }" B5 A. `) U! i, X
EVMC6747_init( );+ `; X6 @/ D5 l% f0 R
/* Call evmc6747_intr function */8 |8 ^( N& A. E8 Y- ^$ N
aic3106_init( );
3 s% j6 O/ O+ @# E! h3 c while(1);
' W- I' U7 \3 W, m- R: j}
9 O9 [9 i4 k% j0 E5 ^ L# @3 k l; v$ o" f4 j3 | s; ^- J8 p
, Z3 D- Z3 `8 ^4 R
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# p! g/ d$ x# C0 v7 k( n0 c/* Initialize MCASP1 */; k: u4 d! H! `, D0 h% r) B
mcasp = &MCASP_MODULE_1;
; O2 K, ~4 e; s) A$ g mcasp->regs->GBLCTL = 0; // Reset
" {: V V' j' B3 V mcasp->regs->RGBLCTL = 0; // Reset RX
0 J5 W0 F7 [3 t8 K' n mcasp->regs->XGBLCTL = 0; // Reset TX
8 R, E7 B& F5 Q mcasp->regs->PWRDEMU = 1; // Free-running/ ^$ s6 [8 ^0 D4 @# ^* ]
// configure McASP0 receive registers
5 h4 V$ R n4 l0 D( R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
) `# r& b U; C7 Y) n3 X L mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 R/ N% {0 P# }2 o4 d6 {- J4 A# _3 a
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 y; v) F! E2 ], t
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& O* J# G3 z% D) p
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" H3 t- z# x# I# P! v
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
1 X! t/ M) j2 f mcasp->regs->RINTCTL = 0x00000000; // Not used
3 R( A. T' B0 l; r' E% a$ N! N1 } I mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 P" w/ w* j+ w0 d
8 ]0 l( g. A+ P' E
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 Y3 @: C, d( G5 L- }
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 T+ k) p3 g6 R( n9 V6 W) `0 r mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% j+ `9 @/ E# b; w' U: k
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 r; ^7 R7 I; [* o mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 z/ S" @, M5 X. Y7 p o( g( u
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 q$ g+ t& Z' [, \0 F mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit/ ~; w0 N9 t: c8 y. v/ y5 g' h# D0 h
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, G3 V% S1 ~- B* m
$ e" D/ n8 `7 j2 B4 F mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 G, _ z0 `" w3 _! d
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) ~. k# l8 i1 e1 F; S& ?
mcasp->regs->PFUNC = 0; // All MCASPs
7 F$ j F* |3 E$ ]/ c D mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! o6 {4 }1 {/ n5 U8 r$ e+ Z" @( v/ |( D9 O
mcasp->regs->DITCTL = 0x00000000; // Not used
. X2 S8 d% j8 h. ]' Q, p mcasp->regs->DLBCTL = 0x00000000; // Not used! K1 u- C* i& l
mcasp->regs->AMUTE = 0x00000000; // Not used: m2 h8 A. Z9 j; c
' i) H: x9 M. X( S3 q( N& M$ r; t
/* Starting sections of the McASP*/& J$ E# v1 v! i! }8 T. e& \( F
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( ~- V- m+ [: [( I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " G; ]& d5 A5 T/ \( s) G
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) K6 E4 A4 P; Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; `% V( M" l4 f( c1 S* O$ W* Y0 M) u1 L4 `/ P* h. |: p4 |
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 o H- F# E/ @7 p" P9 e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# ~1 m2 P: P# Z7 F' ? mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) Y$ V- h6 f. M4 Q4 ?6 e/ _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% U; m# h v4 R+ l; k2 y
& E' z4 J. w$ a* t mcasp->regs->XSTAT = 0x0000ffff;
7 I* ~7 C) g7 z/ e3 ]; U! Y1 j mcasp->regs->RSTAT = 0x0000ffff;
7 g: U2 n$ E# B5 w& j/ @+ v
& {/ C; M% K! N s# \ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) s w/ [2 w# y* R# h/ M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' J" M# \3 A+ t- ?
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) P& ~9 L0 G4 z( d3 C: n4 H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' \, `# R8 [& x: q/ t, _
/ s: W4 Q6 X" v0 u /* Write a 0, so that no underrun occurs after releasing the state machine */
- z9 L% u+ a* F: o3 ] mcasp->regs->XBUF5 = 0;
6 O0 [8 q' x j& L3 r' c" `9 p' v mcasp->regs->RBUF0 = 0;/ f/ B+ i7 K0 p1 m1 D8 ]; C, ~+ q
0 c3 d" C7 q; d$ _) k( G A mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* ?5 i. F( O4 X+ B: P/ s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: Y( j2 ?! l* q, V mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# o8 c' U9 x% D$ k$ _+ @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 y8 \3 j" |0 Q" S' T
' T/ x3 Y u" c0 \+ B
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 Z* [' ]* z; s0 `* P( w8 k4 R+ O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 A% y; Q" \- T; l
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 Z3 b- A$ @. B( {( I4 F0 d1 p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 X# P Z1 }" Y0 M" m# \
, p- R. j, m: L) m CSR = 0x0000; c% G1 k2 h" C2 u" @
INTC_INTMUX1 = 0x3d;3 B3 ?8 y# y; V' z0 G9 E
ISTP = (unsigned int)vectors;
# j5 N* G) Z- f ICR = 0xFFF0; ' K* _! a1 c" {) H7 D; m, {! R
IER |= 0x12; ( U& U- s7 s. K6 v) e' d
CSR |= 0x01;
: @2 X) H% o* d m/ A% v8 [+ j( S, ?+ w7 ^. ~
5 ^1 A1 a8 n4 a4 q/ L
( j+ O! I. A! d% I% X还有就是两个输入输出函数:
2 @& F/ N5 ~, P, D9 Yvoid output_sample(Int32 out_data)0 a% x( ` n* S. A7 p( G- b
{
7 e' B( @- E( M7 o AIC31_data.uint = out_data;
* X! e5 Q/ d. Q/ v+ `2 f& X( H0 u MCASP1_XBUF5_32BIT = AIC31_data.uint;0 _. O( ~+ @8 Z6 ]/ F2 a, k
}3 v8 z4 x P6 ?9 ^ J& ]$ a
+ W* u" F X" |9 L( U" M, yInt32 input_sample(void), x; S" ]( M+ v6 {7 ?
{
8 q" b: \+ T: O$ y AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 {/ Q0 k3 j6 g8 x. @9 Q return (AIC31_data.uint);
2 Q7 ^ n0 ^5 b9 {4 ^: J- l5 y$ h}
3 n1 w# ]4 s" m8 a4 A8 Y. F' }
0 K5 p E+ B& B/ t5 { |
|