|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ Z# x! c! e' ~& v6 o P, Tmain文件:
$ x, u& ]( D! n& g1 Zinterrupt void interrupt4(void) 9 w" F/ Y: w0 V4 ~! K8 I& a) S! ~3 u
{
' M( {2 H* U8 J* L4 j3 ^0 M Uint32 sample;- J3 Z0 F( A2 N5 J
' l4 `: r+ X# O7 B, X
sample = input_sample(); // read L + R samples from ADC
. z9 c3 V! h% q! P* _ output_sample(sample); // write L + R samples to DAC " o: ?* R3 G- w1 w+ `
return;
C9 D: Y7 u" r. m2 r" Y}
( O a8 s- _# r& W: i0 O* G8 d+ T# _0 g, y* g$ ^7 S) n
int main( void )8 j9 K" d1 W \6 ]) u/ G9 F
{: q# Q2 p3 V6 \0 F& g1 M3 D; s
3 V( H# m6 e" @4 A: U9 j1 _; o7 p- E; L /* Initialize BSL */8 v6 ?5 X; P+ {4 g5 {' G8 U( H
EVMC6747_init( );
( V# r1 W/ }! J6 Z /* Call evmc6747_intr function */8 A. U, L$ s3 e/ P/ m( |2 Y7 u. u4 b" p
aic3106_init( );
) O6 I9 x- W4 h( k, E; U while(1);+ Q) \2 v. b( c
}
- z3 M e: x- ]8 y+ e0 n* }
3 Y: I3 Q2 f" ~% L* e
1 `& b+ M" o& [5 _, Z% K. f- t8 E; u1 zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 e6 ]4 q6 R1 U. H( a
/* Initialize MCASP1 */, m. }' \8 x' o4 a+ i7 l
mcasp = &MCASP_MODULE_1;
4 e* k) \) T& f: z/ W. k mcasp->regs->GBLCTL = 0; // Reset# _6 W' Y) @7 b2 D# h! x
mcasp->regs->RGBLCTL = 0; // Reset RX) n- d' ]4 l9 l+ k4 q
mcasp->regs->XGBLCTL = 0; // Reset TX. T. K1 d5 T$ W7 T7 H' O8 o: C
mcasp->regs->PWRDEMU = 1; // Free-running
! E" X7 y) \; p& A" b // configure McASP0 receive registers6 g2 \7 G7 S& n4 F# _$ B& ~
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used6 X( F c' x3 Y6 Z1 a# N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 p& b3 Q& r7 p: S+ T
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 n; F0 R! f% `' X( C' E mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ g# g, R# T% y F
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) p! g& E& ?. m2 x1 V mcasp->regs->RTDM = 0x00000003; // Slots 0,1: [. T0 r8 P8 q0 y
mcasp->regs->RINTCTL = 0x00000000; // Not used
2 Q# ^9 j/ d3 m! I, l5 R! ^ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" e+ L C0 e: t) V1 z+ A I, E: a7 ^' ]5 ]& q0 |( }* U$ s: M* F
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
4 g5 T* e. @0 f% M mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. |8 T5 _" s0 n7 ^
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 f9 S" R( n( e+ e3 v& n$ t: D
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# k# X7 e. s4 s7 S$ v mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 m6 @; T0 |: _$ u9 d' u/ N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ ?2 z# O* g! Q9 M* @7 X7 W mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* X" C" W3 }. ?! J% }4 X) K3 e" A+ Q2 T mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( K2 w# a' e* ~% [
8 @, M) Z/ v, ~ P" U6 [# ?7 Y! Q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: [8 g2 n8 X: z( I; B
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, M+ P# s( P. [! Q1 h1 D mcasp->regs->PFUNC = 0; // All MCASPs/ |0 X/ r+ [' ~2 D; P. T
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) v1 Q, h" d; H
! f4 |/ a, Y6 [5 v M
mcasp->regs->DITCTL = 0x00000000; // Not used( K& U+ Y. H2 G. |# C7 p
mcasp->regs->DLBCTL = 0x00000000; // Not used
$ D" p1 u: s3 Z6 n0 r mcasp->regs->AMUTE = 0x00000000; // Not used: k6 _# ~ K( d: F1 [
5 a1 o z3 Y& R5 x* ~( L+ ^$ h9 w/* Starting sections of the McASP*/3 b! W( J' Z1 L- V$ ?+ R0 E3 Y
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) L* [' {- U$ P o/ \) L+ l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
T( L% d' d5 W7 n. k3 R4 q, V; f mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 `2 \: u; P8 M- p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) V( l! T1 A% h6 b$ t: s7 f
' R% V/ P' K7 |. q5 l+ \
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 Y+ C# J( t E$ e. |. t T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; M& k- Q' h9 d8 }1 ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. g. u5 a; ?, G: M, k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 M8 w# p6 M) e C7 x0 ?5 |5 `
g! T) c& Y+ D8 H% j1 a5 u mcasp->regs->XSTAT = 0x0000ffff;
/ q. E: c$ U+ z- [0 ?/ N" Q mcasp->regs->RSTAT = 0x0000ffff;
2 Y* z( m5 e% P x. d; k5 @& e5 l3 ^6 ?$ T( ?
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ H2 o; y2 y% c' c( A" |8 ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ c6 w% Z6 X# C
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) G/ R" [! b* [+ r( S& l1 a* U( j- @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& [( I; w! j; [, g2 m
4 P3 |; U$ m2 q" c7 {7 @( h /* Write a 0, so that no underrun occurs after releasing the state machine */# f- ?! }; e# a4 R. q
mcasp->regs->XBUF5 = 0;
* e8 [6 r# O$ q mcasp->regs->RBUF0 = 0;' c q9 _. ~6 P7 F4 S' F: Q* {
1 ]$ C2 U! r' }2 D
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % s- b/ H9 B/ f- m w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, A2 p6 R2 I/ p9 u mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 ?9 U& t Q( f/ p7 X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! Y; z( s, m" M4 I, f
7 O6 }0 K, y2 z/ c- t( F$ F mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . r) Q; a5 ^6 I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% g3 F ~4 H- P) N* \ _, [# c
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 Y; i* L+ |: ~2 c2 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: h( K) g+ u' |6 [0 z4 @5 k& V q
o6 q; X% g4 ^# E: H9 y
CSR = 0x0000;
) N% m" ^3 G: U6 T4 X# ]$ @ INTC_INTMUX1 = 0x3d;
, D+ I1 B# K: d% {& X ISTP = (unsigned int)vectors;5 a! y7 t2 ?8 ~! Z
ICR = 0xFFF0;
3 g! ^# }) u% R$ D @. j4 Y" i IER |= 0x12;
$ q; C& `+ m9 \' U5 k! b CSR |= 0x01;
$ S( F6 g& l# ?
- J, C* J4 f4 G2 Q1 Y- d, D# ~2 U0 {( x4 h
9 @6 q0 v0 E7 G' F( Z8 h$ p4 k
还有就是两个输入输出函数:
( k% l% @9 [! c* l8 o- @7 g7 Yvoid output_sample(Int32 out_data)
: V& @: Q% H5 H! o/ D" Z{( t- t: x$ d( R
AIC31_data.uint = out_data;
2 c; b" R4 u" v4 ?( N# |. x* X MCASP1_XBUF5_32BIT = AIC31_data.uint;% R5 p+ F# J' l" N
}- W; a9 A* J9 k4 J1 v
2 e- a- r- B! R0 J+ l
Int32 input_sample(void)
9 T0 ?" b/ l, E5 c$ a# \2 ~, h{
5 n6 k5 i3 ~8 S/ F% `, s AIC31_data.uint = MCASP1_RBUF0_32BIT;8 u+ k0 ^9 O5 e
return (AIC31_data.uint);
) C. G5 h& m" B$ f0 z}
1 r+ s* K4 P( P1 \0 Y3 b* U# A+ x( q% b- @
|
|