|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; r- T- O. A7 j1 n- |: B8 ymain文件:# w c- p6 N% o0 L8 D; z/ V
interrupt void interrupt4(void)
9 F, p: ]8 o1 z) j4 r: C{
& e7 {1 [9 b1 p' q2 P Uint32 sample;; F: u" d, `6 ~; C1 q/ W- {, n/ F3 X8 w
! j0 s H' ?- x; ~) P sample = input_sample(); // read L + R samples from ADC
$ A- q0 j6 U3 ~3 g/ e; B output_sample(sample); // write L + R samples to DAC 9 G( Q( \0 w1 z) K
return;
: [5 f1 M# K7 Y" Z4 }}% f$ Q3 v5 W5 S9 j( i0 `) V
+ i/ G+ l8 c* r) r+ b2 Pint main( void )# e1 U6 H* n& M* B% G4 L
{
' X$ ` a8 z% A7 J
4 R( n3 q5 }. }4 w& u /* Initialize BSL */! ?% ~" Q% `6 i( W0 C( x
EVMC6747_init( );
8 {5 H5 {3 p$ k- M" k /* Call evmc6747_intr function */% Q% O4 e9 x; K( `6 _0 \
aic3106_init( );' h; s) W4 l- m# B) c
while(1);
" E. J, [( e3 C4 Q4 {1 C x% ~/ v}! x& s9 L n' |
0 H1 ?) h: d# n& u7 D2 t. F
. _! {% a1 {3 w/ {+ V) L( O) n* Q1 W8 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) v# n1 Z. x' Y6 {- `' m/* Initialize MCASP1 *// Y& t' T% d% J( P
mcasp = &MCASP_MODULE_1; v) g5 p3 ]) f5 A7 ]$ m4 y' `0 L
mcasp->regs->GBLCTL = 0; // Reset3 p! z( C# a0 x1 {
mcasp->regs->RGBLCTL = 0; // Reset RX
3 N4 y% N8 ?/ y6 f mcasp->regs->XGBLCTL = 0; // Reset TX
6 p; }! Q' k1 `" R- a; s mcasp->regs->PWRDEMU = 1; // Free-running
: i6 j! E* K/ h" }9 d9 e8 N' B" y // configure McASP0 receive registers2 @; W' ]1 {3 p1 C% o
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 X+ ^) M' d$ M( y5 A
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: a5 }6 b0 B, j W4 V" O mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 e3 C2 c! ^& R) ]; d0 j2 P1 ? mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
a( f& W0 G c# r( S3 o+ a mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
: p% u. z& Y, q/ K6 @ mcasp->regs->RTDM = 0x00000003; // Slots 0,11 Y" F( k9 J9 M* W o
mcasp->regs->RINTCTL = 0x00000000; // Not used
& r% U% x+ G& F mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* Y3 O: o; u3 [( D- T! w5 Y3 c
# ~! B7 S# T; u$ ^* K mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
1 o! C. t! L: [. p3 d! f mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& N9 b/ W9 F7 j" l7 F! m mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 T) E7 V. k1 Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: ^8 x5 ~7 {3 x2 c6 d5 Z9 t2 h
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 \) M t! }" W mcasp->regs->XTDM = 0x00000003; // Slots 0,1) }5 N7 W& V& O2 [7 v" }" u- |% S
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 R0 C$ G) \0 \& r0 r/ n# z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# j' l* L$ h( n% _8 d
/ c7 C* l) H$ |* I6 T6 B mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. {; D' `" w: t9 e: y mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 R9 N& c& O( U3 J mcasp->regs->PFUNC = 0; // All MCASPs
( [, e$ Y) }8 ~+ o) V# E mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& }- \/ H7 c, @4 U1 W
; n+ R, N: S F I2 n mcasp->regs->DITCTL = 0x00000000; // Not used( d6 R8 ?' F U* ~) D
mcasp->regs->DLBCTL = 0x00000000; // Not used
7 s' [3 M. w$ ~1 Y mcasp->regs->AMUTE = 0x00000000; // Not used
" H# l- I' J8 y$ C9 x3 f+ r
# S- e5 l C1 T# k: g: I& \/* Starting sections of the McASP*/
$ @- ]4 _. b7 @4 }2 q! |$ }2 Q: D1 V mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ m! e6 [. y% j$ ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); * i* V# y9 Z8 C9 M# V
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# r. D8 D* Z- Y% @. m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! ?. }9 p4 n( m* r& o; I( \0 d# C2 J) v2 |1 I3 S
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& V% k/ M) l. m- F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
E& `6 F: t4 E2 u0 A: { mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' T% [6 M1 u( D7 a* g* _2 j( h3 D; \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% J- H- x, ?: W$ ]( V( O
, E. n, j u3 E5 n! W3 m j: C% { mcasp->regs->XSTAT = 0x0000ffff;
/ Z0 y$ q3 R! H. }, h8 ^ mcasp->regs->RSTAT = 0x0000ffff; * Y2 j) Y, _( g: g
. { h8 F! s2 `( ]( v
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& K$ z5 s8 N! r% P: I4 Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 J2 ?: l. p$ G- H% I' S3 F0 Q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & C) a! v4 j) @9 o. c r$ k- P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ X+ ~$ `3 T# s3 E7 I. v/ m9 M2 C* K3 v) ?( k% _( t
/* Write a 0, so that no underrun occurs after releasing the state machine */
' R8 R( E3 r5 H2 U4 r, W; q& f% k d mcasp->regs->XBUF5 = 0;) P0 s' K2 W+ o. F8 F
mcasp->regs->RBUF0 = 0;$ r- o9 T* ~8 }
3 G8 J* @) d. w# u# k% A mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 m5 L3 ^3 }% X X. P2 X' K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 W$ u1 l6 \5 w4 X. A9 h mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; n. E3 n8 A4 x' B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 h( b E, l, h, ?( ]+ M% m
0 ?" L3 W" ]2 F% P5 D% n0 H8 d7 D mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- y, H* p1 w% D1 g R. W" C) ^+ g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
M2 {5 s8 w! W9 f( O mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 D' @# }( Q- [! N; X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 {) t# `) n; _" r4 N
3 F) P9 n+ l6 S- `5 T CSR = 0x0000;+ P- y, _3 q- V% a
INTC_INTMUX1 = 0x3d;/ t" Q5 G5 E* o( q) i& c1 y
ISTP = (unsigned int)vectors;5 r- Y1 K# K6 P4 x8 C% r
ICR = 0xFFF0;
9 @6 i" v6 B) c! }9 b2 R3 i2 x3 d IER |= 0x12; : H# b o( `0 Q$ P& G; Y
CSR |= 0x01; 8 D6 N9 G, Z6 s' p- L
/ X( d) V; @: y2 f0 o
* v# |+ ` x. l& p) F, L; Q9 F- ~3 _7 ~1 I" a
还有就是两个输入输出函数:0 ^0 t" t+ `% f0 w Y
void output_sample(Int32 out_data)
1 W" v" U* e) q& h6 d. M{
0 g( t3 o) i/ N2 _! o! I AIC31_data.uint = out_data;
7 x5 L# @- d; D2 f C% d" X( I MCASP1_XBUF5_32BIT = AIC31_data.uint;
- f) A9 E6 C1 P. s0 D4 a}, g) D2 ]! b/ i8 O5 b4 A
1 s7 D0 Z/ X9 q6 e6 v
Int32 input_sample(void)
+ P; j' a; N! P) q4 ^ \{ 2 G" x d* I9 p- T
AIC31_data.uint = MCASP1_RBUF0_32BIT; W# F& d. z; O p
return (AIC31_data.uint);
. I6 L# Q) h4 E. g" L}( G( x# Y. K2 a6 A: L6 |0 @% f% G
; L2 v# L% f( R3 z
|
|