|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 w; s8 \7 b' p* c/ r# G
main文件:3 t- E6 s) A$ P5 u! ?8 `) w O
interrupt void interrupt4(void) 4 V- `- b6 p- D. s/ ~( E' Q
{4 I) {" E; v6 S- w# k
Uint32 sample;
" D5 Y- [# t& c; d/ O, d [$ ^6 h+ z$ `! ?3 `# P) E2 I
sample = input_sample(); // read L + R samples from ADC( ~8 H5 c* {) r q6 g- L6 \
output_sample(sample); // write L + R samples to DAC
+ u v1 T& t* E: v return;
4 C- B7 E& \9 C! _}9 [$ I7 L4 Q0 l; Y* a/ U
x5 `8 X+ T9 R5 \3 @$ w
int main( void )+ j- W( v! X: E4 a3 \5 G$ ^: @' Q
{
) j6 p$ Y# Y# u) ~5 y9 U) u& ~! T! A% Z
/* Initialize BSL */: h) Z4 B: K+ v+ q8 P4 v' _, O4 G
EVMC6747_init( );( L, m% o# l# d5 d
/* Call evmc6747_intr function */
& X3 [2 G" o- e aic3106_init( );; b) Q. S% N8 U
while(1);/ I% O! O* z: [
}! v3 f( f! h! K5 s
0 {" s: D" K# I- K2 i- p. ?
/ X& E' E, L* s8 T) d6 c4 T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- B. o r2 H, C5 r" K( F( U
/* Initialize MCASP1 */% B( J- B0 [( S" W" L2 d d
mcasp = &MCASP_MODULE_1;
- ~6 w5 ]' d; T0 K1 U$ m* b mcasp->regs->GBLCTL = 0; // Reset
8 a0 p" ~- R a% O# _ mcasp->regs->RGBLCTL = 0; // Reset RX0 s7 ~2 ^' R3 W$ ~5 w
mcasp->regs->XGBLCTL = 0; // Reset TX
& R* L# t1 s( u# N9 l; D) c mcasp->regs->PWRDEMU = 1; // Free-running: y- }5 u+ \ m
// configure McASP0 receive registers
! j T/ e0 Z) {" Y2 z. m5 K mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. z2 c3 }) G2 o( J% {* k
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. I a0 R! D6 K% Y* _; M
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 l d* a: Y; q! F mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 O( c0 [5 R4 u1 P; W ~ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% v% B0 a& l7 M, y. m/ E
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 R, c0 h# U* D, ?2 A$ H/ o9 `( ]) } mcasp->regs->RINTCTL = 0x00000000; // Not used
+ \/ G3 _' |1 e. p- c1 o; h" _$ M mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 v2 e4 e8 I+ r' S$ o
( v( b9 X8 `# m/ f7 F; R0 h
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 S( [ C" q9 s# F, b
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" o2 [* k# W& o$ H# x# |
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) Z( l% x1 ` b( p* h
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ u5 u9 @" _! [$ q9 e; d0 _
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, k3 W5 m3 l+ R% F+ X
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 c! M& ]6 S9 E: x, J# l mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit( K& Q3 B$ e! ^) y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' F7 G" Z0 k* P% q
2 q9 i1 J% c! L1 y9 R3 o7 R/ e mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ B( ^. k2 p; ~$ S* \5 H mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT+ T9 `/ W& B) b4 U1 e/ b y
mcasp->regs->PFUNC = 0; // All MCASPs
3 w% V/ \4 U6 b, \4 { mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# G7 T+ e) ?9 ~( K1 j9 `$ q* c9 W
. A' z5 W) Q. i mcasp->regs->DITCTL = 0x00000000; // Not used+ k6 o8 q5 T- u/ x1 \ e. @
mcasp->regs->DLBCTL = 0x00000000; // Not used
3 {* G8 O* d: v. \ mcasp->regs->AMUTE = 0x00000000; // Not used
* z# L1 f3 J4 S7 h
~( r; }4 M+ D6 ?( S7 J8 G- w2 L/* Starting sections of the McASP*/
7 T0 b8 a; R9 s+ B; C9 x6 L3 Y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ a4 T* \$ _8 I- G6 m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ c4 V# A. N" C) w; K mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * }0 W% x+ q( w; l, @; k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. v$ ^8 E" T2 ]7 ?6 f p
- G# L8 _4 N' w0 J mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' \7 E7 e/ D. _; Y8 @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' b( R& P( |( n/ O mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 T% P7 I* _% G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 I, a5 M% ?" Q0 l! v
+ V: X6 \2 \0 J4 T" e mcasp->regs->XSTAT = 0x0000ffff; 9 `9 O+ r/ x- x$ x; k1 L" m( w
mcasp->regs->RSTAT = 0x0000ffff;
' @& W- N; {' X5 l {7 X; J5 \. t! C
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. }6 f; r! [+ k% \/ F) f# L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ `" N; |7 m( ^; o: N. S) \ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! ], @/ d' N3 o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! n: Q3 F3 L0 h( b' D
7 u. a8 c% L! H# k9 u- m /* Write a 0, so that no underrun occurs after releasing the state machine */
% \: J3 L0 d6 ?0 n! O mcasp->regs->XBUF5 = 0;; ^0 o2 X6 ~. w! `4 s3 Q; ~" Z0 E
mcasp->regs->RBUF0 = 0;2 }6 p) D4 x U$ K$ n6 M
- D6 K; h" E6 j, l: @
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 Z. I* u$ W: f, ]4 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# g4 g S/ K, d" z( d0 \
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 `9 x; X& a& J" v0 o; b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 R8 _7 Y6 }# ]8 y y
" }5 @% Y+ `6 p8 l/ o5 [* m) Y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 F( o" K- l7 c% f3 k! A x3 j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 T; }" R% x- w7 ?3 b
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' r( z; [; @# ?$ ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 Q& I' m( t: e( C
' y. @0 \( R' y" t CSR = 0x0000;4 z/ o- J2 j2 g* R- ?* @
INTC_INTMUX1 = 0x3d;
3 V+ T4 J1 A- Q7 ~/ d4 U" B9 G ISTP = (unsigned int)vectors;8 q1 ?" @- P) @ t
ICR = 0xFFF0;
. G2 v4 M* I# E1 L1 g) u* ^% G IER |= 0x12; 1 I, }, K4 T$ L) @7 C! W& T
CSR |= 0x01;
( T' A* A8 C7 t! l7 J; Z: }5 G2 k
, Z% G' f9 T' L7 }1 t# }
8 B( C( Q3 @& U+ x: p
还有就是两个输入输出函数:
4 G' H; o9 v; o7 T, _9 i& D2 e" t* Yvoid output_sample(Int32 out_data)
: D$ A% D W( e( Y' f+ F{7 ]! {9 i1 i% U4 M5 f, D! r. x# S1 z
AIC31_data.uint = out_data; ( y5 S4 Y; v' P
MCASP1_XBUF5_32BIT = AIC31_data.uint;2 G/ d" I$ }+ D8 z, F
}, z7 v5 v* [3 P# A! k
" f- j( D5 ]- g
Int32 input_sample(void)
/ n) V; }, p; g4 x" y{ + b1 x1 b$ H$ K" k# e1 h' V# r
AIC31_data.uint = MCASP1_RBUF0_32BIT;, G/ i9 Y+ b0 K+ ?" S- p
return (AIC31_data.uint);) x8 J3 N L, q5 r
}: z2 e* R, c3 [4 P, O. _: d+ g: [
+ l8 f4 N& ~' F: r |
|