|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 v$ H( _6 e+ W) l
main文件:$ \. H2 I' t/ F% E1 |6 x) ~
interrupt void interrupt4(void) 6 G4 ~9 v/ N5 a0 G8 q
{
: i+ ^- V- `; o( a Uint32 sample;
+ l/ k* O* N: s+ C4 Y
& `& c N% B% |7 j5 D: y sample = input_sample(); // read L + R samples from ADC
/ a, F7 k; Z1 q output_sample(sample); // write L + R samples to DAC 1 P: ?: Y6 v" _+ e X$ z) I
return;
: Z, a+ Z1 Y' r- H}7 r) f1 J" r% t
5 c) ~0 u/ [7 Iint main( void )
: y5 A) B5 I0 P7 G" K" S& }{$ a, ~0 h: q) Z
% t( d# }1 y, o& C# E4 t8 J /* Initialize BSL */0 |0 P4 Z2 m0 m, V6 z; P/ ?' V% q2 G% J
EVMC6747_init( );! ]3 `( F6 i% q5 ]! \ O
/* Call evmc6747_intr function */0 T7 R( D1 a6 h6 j i' {" g
aic3106_init( );
4 P% v: _- @+ U0 F% w2 a while(1);; n7 F' a2 f4 L0 \. P# Z
}( d6 ]4 i# O! p
( s3 | D% S$ z: x$ C2 r) B, S" t4 {2 R: h$ k% Q# A1 q( o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ E S" o; e3 Q2 w/ I+ v! P
/* Initialize MCASP1 */+ n% |* O' u6 `3 e
mcasp = &MCASP_MODULE_1;9 A2 v. [* X7 \5 d# }8 e- l' ]
mcasp->regs->GBLCTL = 0; // Reset
+ R0 k3 i' r/ a! R7 U mcasp->regs->RGBLCTL = 0; // Reset RX
; P: S* w$ m7 F4 @' x mcasp->regs->XGBLCTL = 0; // Reset TX
2 J d V( B8 c( Q mcasp->regs->PWRDEMU = 1; // Free-running
8 l* Y- A1 w2 q& l" G5 P // configure McASP0 receive registers
3 w* ^5 c% i8 |& i/ N( T mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ T# H" H d' }7 J
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 D: z5 e2 j% n2 \3 ^+ @
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 a e+ Q6 K' E' h) \5 A) L9 \
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ ]; M/ }8 P' ^% p* w( C" v" r( H mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" m3 c" @/ z [9 I e8 y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
9 ?# n9 C- L+ S* q mcasp->regs->RINTCTL = 0x00000000; // Not used
9 d8 x6 L% v* W7 E: O mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 N" G" @6 N( u+ r1 [/ _+ }
* y7 S7 m2 q5 w' G; h, Y$ y/ b3 e0 ]) m mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
2 z1 f! R+ c* Z1 P' W/ U* c mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" i# Y' u7 T) l, t mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" M. l* e4 b4 w
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 r+ x. M) s2 U/ x( s$ h
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* U; K0 u4 D' j; Q6 m, X mcasp->regs->XTDM = 0x00000003; // Slots 0,1- H* ]% o0 Y! w4 b# P# J3 m
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
0 B; `+ @8 X' n0 Q! M, ? mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ f/ B# o2 J4 D* r3 i
* C' Z2 ~, p9 C$ h" u8 B/ o mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! g2 a. j+ S# s8 Y5 i- z1 _% z mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! \$ P9 a1 k n# X mcasp->regs->PFUNC = 0; // All MCASPs( m; ] T) K+ Y% D( L
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ A5 m8 H% |6 k; X5 ]6 @) m* N3 G2 ?. b
mcasp->regs->DITCTL = 0x00000000; // Not used2 A, Q' l) _ H3 ~, ?9 R7 D2 v9 P
mcasp->regs->DLBCTL = 0x00000000; // Not used! t& b7 W1 Q* E# h1 b4 v E3 U. S7 J2 b
mcasp->regs->AMUTE = 0x00000000; // Not used( d" _* R) d$ N- |$ h$ @! S9 E
# \ ?- R5 ?, Q- u! R0 c( |/* Starting sections of the McASP*/
* w j# Q" e; m+ f7 m& e mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" E3 J5 w' Z1 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! I1 }; U+ R1 c, ^* | mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& L) K5 q1 w7 V. w) f0 o! V, F% g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# y( v8 L- l9 ]8 h4 o, n& \
# n* C: h" {" D4 c mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 q* h' X2 O( d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' J) D; g2 i) O' i8 Z0 {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
C, Q5 E1 I. c- k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 L$ U/ M. B9 D; Y- D8 F& b
" H/ I( c7 M0 l: I: r e mcasp->regs->XSTAT = 0x0000ffff; 5 r8 ^7 P( |6 { d8 R3 E
mcasp->regs->RSTAT = 0x0000ffff; + a( x6 ?# b# r* O+ [6 q
7 Q9 \% i- d# ?' Y) @4 D* ]& C mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 ~7 f3 E7 T- i$ }$ b0 B/ D1 ]- [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ Y! r, @" v6 C1 y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ u* X# U0 I1 _5 |* p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" A! T% T& U4 J
! O: g! P' d& |# R! z /* Write a 0, so that no underrun occurs after releasing the state machine */
* f# Y* q! q. v2 e mcasp->regs->XBUF5 = 0;( C! }6 n3 d* I6 ?0 a* h4 {9 S
mcasp->regs->RBUF0 = 0;
) D. f7 o" z) m7 Z6 s$ ]; ^
7 v5 e( X" J1 z. U- i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 @7 F5 t+ ~: u# I& Q: d1 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 R( k( m2 h$ [# Y7 s( \
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 B( G# r) `( S5 w2 }. j' M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 e7 q: w4 Y) L. s' X7 u* @2 B: O' w) i0 P
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 M. G4 Q) e$ A1 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! _' ]/ x) ]6 U9 R mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ u) W! P2 D- o# l0 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 k6 A7 b1 V; [. a3 N
5 G- a) T8 S- \4 \ c! y; m CSR = 0x0000;/ x L7 F( _, ~" e2 o
INTC_INTMUX1 = 0x3d;
+ R# d* V5 y8 t: L1 \+ O/ i2 j l ISTP = (unsigned int)vectors;
0 R' ]5 B S1 E( L0 W4 f! g! }2 T ICR = 0xFFF0; ! Y4 _- g: [% G+ S
IER |= 0x12;
, Y% v/ ], H( } CSR |= 0x01;
" O( Z) N/ M$ \% O V( [- C; L! H/ j/ S0 x- i B
: V, q* V& |$ u% Y9 F, G0 k2 r3 O! t5 F
( f9 {( J6 l$ `$ ~: X4 d还有就是两个输入输出函数:3 y1 U4 S/ L" C5 R
void output_sample(Int32 out_data)
7 s: @5 `( r- u/ w( j r{5 ]* W T- v# N+ J- v1 ~
AIC31_data.uint = out_data;
x; {0 `4 K9 [9 E$ v; y9 b MCASP1_XBUF5_32BIT = AIC31_data.uint;
% N9 x! S. ]0 B2 i}
2 e( |! q- Z8 o* a1 k% ~7 j& {2 Q
( }: K1 J) P7 `' K8 D- o& d) lInt32 input_sample(void)0 ]( K% l9 K& H+ W2 S' C
{
7 u3 b7 u( P( `8 m AIC31_data.uint = MCASP1_RBUF0_32BIT;
# q# k) u- |: D7 s return (AIC31_data.uint);: S0 ^3 c5 h: t6 C# h( s1 O4 q
}
% R O6 W0 M% i9 N9 M( a
; T5 k H6 L5 v4 e! Y |
|