|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. n, x4 s0 H: X' O+ v
main文件:
( }' j! h0 u8 a0 k/ C$ N- Dinterrupt void interrupt4(void)
0 B: D& s4 C8 A) y2 r7 j9 J{! p. A: H. }' p: n1 K
Uint32 sample;/ S6 K4 P4 }7 z. V
6 Y" |: |, }4 Y2 U6 h7 I( c sample = input_sample(); // read L + R samples from ADC* v6 b& J$ k; q
output_sample(sample); // write L + R samples to DAC & v, G) V& T4 j' v0 o* k
return;% t% C& t4 B2 M$ c I' s
}+ N+ C8 I0 l+ d- W, [# p/ R2 q
+ g6 D' M# [2 S9 B, Cint main( void ); H F# @# v7 y) A8 J" T
{
8 u8 K: N& m5 S4 v' F6 |
1 P C: n/ v- p( h /* Initialize BSL */
$ c$ _. X( s7 Y; Q7 N; k EVMC6747_init( );! V! `1 b6 \1 C) J% A
/* Call evmc6747_intr function */
, T3 N" D& l7 o/ r0 S. A0 | aic3106_init( );
. f' X/ [, F( d( d8 ^3 k while(1);
% ?7 S. j8 j% V+ E) M, x) E5 {, o}
) J Z& C% y. N9 e) A+ e2 A& |: H( j: z# k4 S; n& {/ ~ y( V) d' Q
- N! J) K0 k5 L/ aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ i! ?: d* R( r/ l/* Initialize MCASP1 */& J9 l7 R3 R6 W; Z7 n
mcasp = &MCASP_MODULE_1;
8 M# f3 u0 r6 A) b O6 B5 _7 L mcasp->regs->GBLCTL = 0; // Reset! h. b# W7 w* R$ u
mcasp->regs->RGBLCTL = 0; // Reset RX7 G; ~% s1 Z" S! S! B5 p+ H
mcasp->regs->XGBLCTL = 0; // Reset TX
" {( E# b( g0 W2 v5 w( ~% y mcasp->regs->PWRDEMU = 1; // Free-running
4 w# X: r# E% g1 ? // configure McASP0 receive registers- W( j8 K( ~6 d
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 G8 V% C" A" l: D. P& q r q* b/ ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus N% w |1 o/ J( K& Q$ [
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 f& g( q' b U3 V' j% \$ y# e
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: ]' z) ~1 z. g7 M$ ^ H- o5 K mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" |/ d: G, T$ R- [' G mcasp->regs->RTDM = 0x00000003; // Slots 0,1) l2 s# P( N9 G0 Y
mcasp->regs->RINTCTL = 0x00000000; // Not used
- D7 T x: u: @0 x9 S mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 _1 }2 d$ k5 a4 F8 M
. |5 ^3 Q: o* C. ~
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
, H& l8 D% p$ \) f3 N2 P% D' p mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 l5 v* U" ~" s# \ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; w! X) |0 ]4 U7 G" a mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 }1 E: l+ c7 t# k) J% v1 r$ T9 x mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- {5 B \: }0 Z: C4 N% B mcasp->regs->XTDM = 0x00000003; // Slots 0,1- }- w: X* h2 | ~! E" u% L) e
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 S& J) r( G5 \0 g/ g mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- @" M- }3 f) _( w
v- e* ]- W* o% m3 i% I
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! t( F9 f, C' [% T& [4 x mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
5 L0 G7 @) @1 F5 a mcasp->regs->PFUNC = 0; // All MCASPs' G& W' {6 d9 S2 |- j) A" E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ G m+ a+ f! V5 t# O* @9 r2 t' N9 C" p9 O# D. {4 M) p7 O8 H
mcasp->regs->DITCTL = 0x00000000; // Not used" S q, L0 Z! G; e# N
mcasp->regs->DLBCTL = 0x00000000; // Not used
' [& j9 k7 I2 [& J mcasp->regs->AMUTE = 0x00000000; // Not used
6 r/ g+ m- K+ ~ u5 g9 M8 C, q$ `" H! ]1 O" F# ^9 A) T
/* Starting sections of the McASP*/
}; a; J7 c! ]5 k$ A mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( i. s% i* L z" @$ ~, g) n3 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ Q O3 l% c0 J5 V- B+ n- z5 W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; T& @ Q' E9 b$ Z) ^1 P0 c( a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 p- x1 Q4 e7 s, }( [, p0 b) t9 f# }; u! q) H6 n) a/ H/ [
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # Q3 W, D q% q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 C) n" B' p" g6 |0 X mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" [) }- {: m6 C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 [- H. j8 c7 Y3 v! ]7 E( Z
- L5 s) v$ h" E mcasp->regs->XSTAT = 0x0000ffff; [& D9 ~, n( x; j
mcasp->regs->RSTAT = 0x0000ffff;
# }0 B( I) \7 i# @
; \3 Q* u7 {6 ^) I+ ] mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 o' \3 H5 |6 m- b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); K+ U0 v# l2 k( w. D( A
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 u* f1 H2 f, j7 O1 f( I4 |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 R0 p+ \. S$ W* v$ W/ a
# `* @) _9 e3 q4 |+ m, q7 U) X /* Write a 0, so that no underrun occurs after releasing the state machine */8 T+ ]) b$ \! q# n5 j# q/ |8 y
mcasp->regs->XBUF5 = 0;
6 P3 r r- X$ `- r6 B mcasp->regs->RBUF0 = 0;( f, z* I! O6 E1 Q) }( y
2 R \- j% w! S& D' Q; Z6 g) t
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 T* U3 p+ w0 `7 h0 V% z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) n9 J' D p* C3 C& v) l mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 ?% ]- m- P6 ?$ Z0 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: a6 v, ^! C# B' Q
( ]/ [8 ]. z0 l2 r- R7 f7 O mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 D2 v; j& P& ^$ k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; M3 F7 o3 T# K( I) n: d* B mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 q* D% K* s& M4 W' {" e$ _! S" w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
P& l8 P5 j4 C# I' j% k5 u0 H
% T. t2 A- E* g3 _; }3 H CSR = 0x0000;
/ F/ L6 }7 H: d( K INTC_INTMUX1 = 0x3d;
! V$ Y" _$ T" ?7 p5 { d& X ISTP = (unsigned int)vectors;- n3 v2 z, ^3 Q W
ICR = 0xFFF0; 1 [6 N+ k. e- _" S+ m9 O
IER |= 0x12;
, l; i. N$ y2 F! Z5 ]8 ]8 B CSR |= 0x01; R5 ?- w! j9 o6 V, V( |
6 i0 a {7 z, X; p, p! K% b
# F! ]6 t# D" I8 F8 T/ b
8 h/ }1 t' v* @% k2 u P7 I还有就是两个输入输出函数:
" E1 d/ S$ p* Z {" `5 y1 bvoid output_sample(Int32 out_data)
. M4 C1 P4 l# G4 H' s{
( H# U. Q9 U w K- c: I9 d AIC31_data.uint = out_data;
7 `' ^( e6 a0 }0 _% A+ m MCASP1_XBUF5_32BIT = AIC31_data.uint;
# l+ z& L C' \3 N- x. Z+ C}0 D$ a( D( V4 a$ m- C% q V9 V: b
1 v& |+ i2 v- X+ [Int32 input_sample(void), l( l( ?3 Z1 Q+ k Z- X3 ]9 j
{ * @+ k8 ^/ ?+ X' g. P) F/ T" t
AIC31_data.uint = MCASP1_RBUF0_32BIT;4 x$ F1 X7 |, W. I* c& t
return (AIC31_data.uint);
2 b! i1 y: X- G( X: B& I6 ~( ], T9 S}
3 o8 m& T! b @/ i" e! t2 Y
' b% E1 j. c% H* s& a) S3 [% Q |
|