|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: n5 q c0 W: T' b( t3 Rmain文件:
& M" r# e, O& o1 Z& tinterrupt void interrupt4(void) " K$ C" I/ [8 ?2 }, c) B7 y5 d
{
6 n7 G& Q" e% p# V8 \ Uint32 sample;. |4 p. W. l4 f+ P! N
: `5 `% i7 H3 A sample = input_sample(); // read L + R samples from ADC
) n) t! w$ t$ H/ g! L2 Z1 I% Q output_sample(sample); // write L + R samples to DAC , [; }4 p. Y) B% k4 v' F" Q( _
return;
5 g$ ~6 f- ?# L/ `% A}0 c; \# H z8 d
! D5 d7 k& ?/ ^. Fint main( void )
# U! {, S) L* \, _6 C: b{
- n$ D5 D" y* @8 n* r2 V3 _# t" q( O7 C/ Y; P+ i4 D* l
/* Initialize BSL */
+ h: F; [# k" f EVMC6747_init( );
5 \7 H; W& |! M( T /* Call evmc6747_intr function */
# x8 x& ]2 B8 T" P9 ` aic3106_init( );' p4 p: S3 m3 K; b* }; K+ X' _
while(1);4 B" R2 o) h% [' a [/ z
}/ a- Z: F( y* k5 F
" G% X `" p# q9 @% d+ n) g
3 K7 l0 D3 R" N! D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, U! Y5 G. Z) u, Q/* Initialize MCASP1 */* D1 s9 e$ L3 p0 b( m1 l
mcasp = &MCASP_MODULE_1;- S( I1 s! O; V+ Q1 t4 g% z# ^- x
mcasp->regs->GBLCTL = 0; // Reset
5 n' @- \1 |# U, a) C; o mcasp->regs->RGBLCTL = 0; // Reset RX
@" y0 V$ g9 M8 p; I mcasp->regs->XGBLCTL = 0; // Reset TX
, F& M+ @& d) R; l6 u" J; ^2 G mcasp->regs->PWRDEMU = 1; // Free-running4 z" v0 J- N$ h" k* d& Y* E) Q
// configure McASP0 receive registers
1 t: o$ |+ ]& A/ W mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ s3 m w, K& i* y+ F mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 y+ y9 F/ U( n mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 l8 _* ]$ s) e8 v; V1 U mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 s z( ^% H# U' `
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 `$ r) q* w7 m8 \% j: H- \3 I* |, F' m mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# I0 q& X) z" T. G0 L+ z0 b) S& n mcasp->regs->RINTCTL = 0x00000000; // Not used
1 |1 P& x+ `; E0 E, s/ E mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* G( H+ k3 |9 H4 e/ R, ]' [
0 I. C3 q6 R, v8 A6 R9 ] mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ [1 E7 a9 H% S5 A. B& j( [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 Q) \! B J: A) L$ k mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# b1 n, X1 y1 L4 c3 J- Q- ]
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 r% u6 f/ M$ {( g$ ]1 T! ?( f mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, s4 I4 M: m' y mcasp->regs->XTDM = 0x00000003; // Slots 0,15 R0 b1 j: \; i1 \, e7 E+ s
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, y3 N0 R9 B) a4 y2 N3 F mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 u/ o4 X6 B8 Q( W c3 l
$ C+ t3 J) V( Y+ \& }% U mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ \6 I y4 k& z) z% U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT% l4 d- C% r7 g) ~4 d$ f( k
mcasp->regs->PFUNC = 0; // All MCASPs
X: e3 o5 {6 _1 M& K mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' d# ~) B+ G* v d7 q/ [1 W) b& y
7 n5 s, A# ~. L7 E mcasp->regs->DITCTL = 0x00000000; // Not used2 Z( B* o1 n8 J% v) D: c( k) Y$ l
mcasp->regs->DLBCTL = 0x00000000; // Not used9 k, Y. a( C! q t1 v
mcasp->regs->AMUTE = 0x00000000; // Not used
+ d& W* x4 }% m% f" }4 U3 g: G5 i0 I* P8 Q D$ N0 ~4 M0 K
/* Starting sections of the McASP*/
! z: Q+ `9 E: b E. k- ]# b8 C: }+ T i mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ Z7 y9 E* k8 Z$ t5 E! Z- o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& @! S& Y8 ]' `0 |: q" G mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 P) \: z; I5 _; g, ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 V" e' x7 j& U
" F+ b) D3 F ? h! `- @& C% O& T
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 ^; I* C3 m+ _1 ^ |. l- } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' O! a+ k, c5 j' }0 `! g* p: T
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 r" b Y: z4 ]" V) N2 t$ ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( ?) P0 t" e2 b
, `% H$ D, F5 k/ `7 A3 v
mcasp->regs->XSTAT = 0x0000ffff; ?- a% u+ E/ f% b9 L3 A
mcasp->regs->RSTAT = 0x0000ffff; 2 M8 w( }9 i- K! ]# w
7 Z0 V$ x3 }6 h* u' T2 F3 g; D+ O
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ l/ W! I8 E# t" Q( y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ ^) K. e/ R3 D' o1 N- G+ a
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % u, c) b* T& [6 U- \0 o" b9 M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# j) B9 K; y( \6 B' O4 H/ f4 R/ ]: B
# a8 k/ V" X2 ?" a+ ^ /* Write a 0, so that no underrun occurs after releasing the state machine */3 P) Z; u6 V e( v7 y
mcasp->regs->XBUF5 = 0;
4 \+ k1 E/ U& c mcasp->regs->RBUF0 = 0;5 i* B9 d$ e4 ~" N% n
% B8 o$ T: _' r0 w5 Z& d l mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; }2 P1 Q3 b; }2 ?7 ?7 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 N3 l! H& u% u- D( x: ? mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 D( K0 I* n* X* t# L" ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! I* U$ d7 _5 A# s% G
6 W0 `' H/ r# ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ h$ _9 V4 \# k* A# R7 M+ c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( c) K; Y$ U9 }2 }4 z! } mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + E5 f3 g- M2 V0 y) ]3 C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 Q3 ^" D. P, G+ Z1 ]: x
2 I( ^! J" |# T4 E CSR = 0x0000;
% c8 X. G$ P( l ]" c INTC_INTMUX1 = 0x3d;) m- ^1 v, N) y" U! U/ |; G8 B* x
ISTP = (unsigned int)vectors;7 M, ^7 x' n z/ T2 X2 u
ICR = 0xFFF0;
5 f$ ?# n: l7 t2 f IER |= 0x12; 1 y5 Q/ E3 Q5 _/ s7 y& v7 L
CSR |= 0x01; ' A4 q b) j7 y7 p
$ j$ W$ \: f2 I1 S
0 ?. p( k( _% N, ]
, @/ O! h9 U6 c1 F* [还有就是两个输入输出函数:
$ i6 ^: x _6 P3 v5 ?# | ]8 nvoid output_sample(Int32 out_data)
# g, o+ ]. r P& F4 {3 p{/ ]. W/ X2 x+ Y( s( @
AIC31_data.uint = out_data;
% r7 u7 a3 m1 U; S$ F MCASP1_XBUF5_32BIT = AIC31_data.uint;
. p8 u8 n. }- P, d$ ^) O# X% Q X}' J M4 C1 ^# r! a
$ w: W9 h+ a7 L7 `& h0 m0 IInt32 input_sample(void)
9 J+ ~4 f5 R9 m- \, Z% d: A" r% U5 Q1 S{ $ h! y' K& G' O6 N$ `: P+ ?
AIC31_data.uint = MCASP1_RBUF0_32BIT;/ e( H' B0 s4 h. Z% I# V$ l1 n+ {
return (AIC31_data.uint);% A( D% D( X- m4 K2 b) s
}
* B5 p% Z4 ]5 l$ C# P) t- @
5 Y( | h2 n4 }/ F- ~ |
|