|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 h, }& m7 N3 E: O
main文件:, _$ A6 ?/ M! D3 j
interrupt void interrupt4(void) % y4 C$ w+ U! H6 K
{
/ n, h! X, O4 z Uint32 sample;$ z$ x0 a' x2 ]0 r0 j
, ^6 d9 u5 R% H# c sample = input_sample(); // read L + R samples from ADC# n2 N& V8 q% b
output_sample(sample); // write L + R samples to DAC
7 J4 F+ h- Z) `0 @1 f+ J return;
* y+ A1 Z* `/ E, `4 G; x}; n" c0 c z3 w$ L( K0 o( Y
& D& O. Y, s6 E0 Vint main( void )$ X& |( N }! U4 `5 P
{" j! X" ?1 H: _" K
S; [- o6 n6 h8 ]/ w9 s7 X /* Initialize BSL */
6 X& V$ [8 M8 ^' B) B8 ~/ o EVMC6747_init( );* Q$ ]5 h" S, H ^% m
/* Call evmc6747_intr function */
* N) x* [8 t, o! [& _4 G aic3106_init( );
( B3 P( R& T: d/ K/ _; X+ F# l7 G$ O while(1);, q# U) N: n! T7 w7 n5 c
}
! H* C, q; B8 f: z9 F' r
' }3 [ ]0 _2 q3 q9 u( T. |1 X$ D" a1 F4 e2 @6 Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, f8 V0 M- |. B7 R
/* Initialize MCASP1 */
% @) k2 V' u0 e( ]9 ]4 V mcasp = &MCASP_MODULE_1; ]& q5 K1 m5 R4 `
mcasp->regs->GBLCTL = 0; // Reset; o# W) |' K, g0 z6 ~
mcasp->regs->RGBLCTL = 0; // Reset RX1 o D& G: c* _- {) c
mcasp->regs->XGBLCTL = 0; // Reset TX" R9 F( Y4 M8 j* g# U0 g9 S; P
mcasp->regs->PWRDEMU = 1; // Free-running
) ]/ O4 l5 K4 B6 z1 C! s // configure McASP0 receive registers
& D1 s! I7 J$ I3 A& R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( M: b; C5 j, ?1 K: [9 l( F+ _ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' I9 f. t4 r P; u/ q5 V$ I+ o( ] mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 Y$ _" J5 j: d" \1 Z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 V4 p( E' K7 v mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 a2 [% @& S4 n1 V& o
mcasp->regs->RTDM = 0x00000003; // Slots 0,1( L, ?2 v9 i# p1 W7 ` ^
mcasp->regs->RINTCTL = 0x00000000; // Not used
, T0 m6 L$ p3 q+ _7 Q" p mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 t9 P* D# P6 _
2 |) V9 i! b6 i/ y, Q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- v/ S- t) w! l, |( B# X+ I7 i
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" k6 D' j3 a5 `3 V% j6 p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ N& C( D" C4 o$ S
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 ?" X' m8 \1 c+ `: J" X
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
" W; _$ o: v0 N9 s" V1 g mcasp->regs->XTDM = 0x00000003; // Slots 0,19 z" o i* ^4 _# a3 z
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit3 Q" f) [ a, e$ e
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 { c h9 K0 N3 c2 J( P- r' g9 s/ }& F
+ B2 R" E- A7 K% r0 A mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- k7 ~6 K$ y6 m- f6 r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ M! ~( [* V8 P7 O
mcasp->regs->PFUNC = 0; // All MCASPs' s6 R3 v. V! m/ M3 s( U
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 g" k6 j K J, U9 C( h |
/ h* r( v9 Y p mcasp->regs->DITCTL = 0x00000000; // Not used
/ n( x) g Z* j- O3 f1 I mcasp->regs->DLBCTL = 0x00000000; // Not used
" t$ v6 U; I9 ~4 D mcasp->regs->AMUTE = 0x00000000; // Not used, t/ X. M0 N% a" m7 w
: G' c( ?5 q4 y( L% w
/* Starting sections of the McASP*/
$ F6 K2 I" j; }0 X8 y: B6 p mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ R; g/ y2 D) c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ! v! O. M* T' n; l9 q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; l8 R" j% o' v" |7 y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& ^* U4 z" i6 W
c$ h+ J' v5 C5 } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 ^/ I; G9 n. {1 C+ f/ L# J0 u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( P5 h" T1 Z+ y( n mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 J' K/ b! g$ N5 X1 \+ P6 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( y9 J, `+ d! d. `
* ]/ i9 G# K7 N: w( F Z. J( ^
mcasp->regs->XSTAT = 0x0000ffff; * b8 w' D, v+ d8 W
mcasp->regs->RSTAT = 0x0000ffff; : ^& r$ O6 n$ M: S H5 ?
7 n4 b0 c0 D$ ^) A, n mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. o9 F; x% b/ p1 I f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& J: t5 p5 a% N& Y0 {/ V* Z# ?* q mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, f, l; U: c) W i6 e+ M6 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* {3 H; a2 g4 R$ w5 j: x! C: c! [ g3 }+ @& S
/* Write a 0, so that no underrun occurs after releasing the state machine */
& b0 O$ t' J. a% d& @ mcasp->regs->XBUF5 = 0;3 F4 C$ f1 X5 B4 ]# q: S% T
mcasp->regs->RBUF0 = 0;; a% D1 }: z% Z% d- J
" P' b# u a; ~ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 z3 p4 l' D i$ _7 z. w: n& @5 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); e2 {$ c" V7 p# C; u h& X: z
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
Y; [4 ^ U" V/ u; v, L/ } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. |$ J1 K0 {- w
9 s' z4 {% u' D; ]& y mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, R8 w% p3 l# i( O1 i9 _% S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* n7 Y* T# w* l- R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! V `+ w4 r/ l6 k& H. M- Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ {$ }% x9 X+ O+ c
; x" I* [$ R8 b) }, [ CSR = 0x0000;
{& X8 P7 x, R/ z INTC_INTMUX1 = 0x3d;
: o& S0 Q2 U, s" P/ B0 }& G4 n+ ? ISTP = (unsigned int)vectors;7 P. o, t0 r1 D' d8 S
ICR = 0xFFF0; " `# C @, f5 _4 h5 v) I
IER |= 0x12;
: P: x4 o$ F5 U4 ?% O CSR |= 0x01;
- D2 N' j! [9 T( z; {! e
; ^, ~3 Y8 t d0 E
' O W6 L/ u5 D7 } G/ K+ O, Z6 J/ K9 B7 i+ \% F8 B
还有就是两个输入输出函数: i% C( h2 R8 T4 e# M
void output_sample(Int32 out_data), I% l. R' `. u4 h E
{
0 m' h) B: J: N0 m6 } AIC31_data.uint = out_data; . E$ \/ q; P5 T6 G$ K
MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ A; O1 L/ ]! ~! L2 S* l+ c' D}5 W0 f" a( O! O1 V' c
* D1 g9 b$ |0 c4 v+ w. o3 EInt32 input_sample(void)8 y& M9 J! Q8 ?- g! D' C! P% [ K- x* ]
{
9 ], K0 l0 K! j6 f AIC31_data.uint = MCASP1_RBUF0_32BIT;1 e& l: U/ H) e7 ~
return (AIC31_data.uint);2 j9 B. P2 n* W% |
}
4 t. N& \, t5 J( T1 w+ j; k* ^
. F+ m8 J: |* Q |
|