|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, A2 V8 `' M3 X% v' x8 x' ^( r6 Q
main文件:
5 ?% o/ m, L. v8 g- b \interrupt void interrupt4(void) 5 j* D' [% v, r2 G# T+ _
{
5 [* A& G$ a" l2 ~8 H8 h! w5 d7 ^. R Uint32 sample;/ ~. @) v2 h. O% l; D' P
! R ~* r# r9 G5 q: a0 G3 \ sample = input_sample(); // read L + R samples from ADC; K- Q7 j d$ c& H# \$ b7 @
output_sample(sample); // write L + R samples to DAC
! a) E9 [5 s' q9 L0 O return;) U% z$ g" o$ {' v/ N
}4 |, }- c% ^- M! X, u2 {' P1 x
- k m t1 k( G) g4 U
int main( void )6 \- I' M( U( h4 @0 U+ o' h
{: `2 H- ?2 r5 \$ K
k, l7 h! l9 _8 M
/* Initialize BSL */
* y8 }1 z1 c0 n. N6 S EVMC6747_init( );9 u% v4 R# v, u0 ~0 u' P+ @5 l
/* Call evmc6747_intr function */
. c4 m V( L9 J6 x7 m aic3106_init( );
. I' t1 \4 y* ^; [3 b" h& M' n while(1);
* m/ r: D4 F9 j( V}/ j! ~4 q+ t1 e* |
- y1 E: R2 L7 v% |
; E. |! U1 y5 z8 paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) D8 m) j1 j, M# s# ]
/* Initialize MCASP1 */( M( J Q0 }+ }8 x) K
mcasp = &MCASP_MODULE_1;. k3 k% d& w: k6 G# u H- h
mcasp->regs->GBLCTL = 0; // Reset
9 S4 V- x. O! V! ]5 g mcasp->regs->RGBLCTL = 0; // Reset RX
4 z4 C! ~6 `) z7 R mcasp->regs->XGBLCTL = 0; // Reset TX+ t0 c* j$ H* t* x, h6 ?
mcasp->regs->PWRDEMU = 1; // Free-running) V9 _: ]) Z( N4 [* a- Z% S1 z9 @
// configure McASP0 receive registers3 |! I" y/ E8 M. v
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 h# T0 }8 C% Z% K+ e$ d& I mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus L+ Z4 y% N, |; W2 O) ?6 B
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! d6 M# w2 ?# y: p. @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# s* P# S% T9 }* F mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 C* L5 {6 t# P* w mcasp->regs->RTDM = 0x00000003; // Slots 0,1
0 |: b9 o' L! }7 v& W _( H3 n* A. c mcasp->regs->RINTCTL = 0x00000000; // Not used
c2 f) z% I! M/ G# H3 _: v/ i mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* W4 t% P; J t
' m: H. G) V# | h. g mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used B' q+ j) c* k" ^2 S* U
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 \" c- j7 ^/ G( Y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 ~5 z! K( _8 s# H$ t8 b# I, A) W mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 Z0 m9 V3 Z( r/ z/ v, T
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( L( U$ W# l+ b/ l: p$ }: V
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
# ]8 T- F7 p$ y' H% O0 i3 b9 x mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
' L5 X( A: S5 D mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ U% l& Y+ O$ g z9 l W
, E. y$ T! T; _2 I mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 \% h1 g. w* ^, I6 T mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 t4 L* F% ]' w" @ X, q+ Q mcasp->regs->PFUNC = 0; // All MCASPs
- ^6 a( b, z2 s, g mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ ^* s/ {) Y) g1 i" K6 s6 x8 K1 `3 O/ s1 M* u1 b9 V
mcasp->regs->DITCTL = 0x00000000; // Not used
, F: {+ O2 W4 g. }% i. Z mcasp->regs->DLBCTL = 0x00000000; // Not used
2 l: Z7 C: P g6 U mcasp->regs->AMUTE = 0x00000000; // Not used2 j, `# f& W" S& D6 S6 z8 m; c
! K% h3 v6 g# Z0 q7 G! Q5 T6 Q
/* Starting sections of the McASP*/
: J5 b, J4 g& a. H! r1 Y6 z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , M% j7 |" Z: d" R) v. A& ~% J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 g8 X& D# r) h6 G+ a mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & m, H2 {9 s& y0 o9 a$ S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( ~) d* B7 s8 J1 @4 \' A# B! h
$ k/ l% R' s) ?+ R mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 u6 P( N0 _( T* R4 p M2 C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; f5 N2 H1 K# G6 O) v
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " g0 P6 s0 V/ E" \+ X3 C" ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. O- U, }( n7 B0 f, N6 P9 |
6 g0 C2 X |. Z; ]8 h1 T mcasp->regs->XSTAT = 0x0000ffff;
) a+ P4 i* e$ t0 ` mcasp->regs->RSTAT = 0x0000ffff; ' r9 A O4 c7 A0 z: h9 `0 T
2 C* c R9 g _1 y- v( y8 \5 P* m
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 h8 q# e, F- d4 H8 e( e9 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 v5 I4 G! I/ b" j
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 e3 |1 }0 I2 O& \ D9 E% z; h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& y$ M4 v' m8 H% N
" f$ b7 `4 t% z# A/ L, V
/* Write a 0, so that no underrun occurs after releasing the state machine */
* D) _5 q$ [/ ]' b mcasp->regs->XBUF5 = 0;; d2 T2 M. d0 \' a5 A: _0 e7 U
mcasp->regs->RBUF0 = 0;
! D* c6 Q) Z. i) o; z$ i
7 `2 T/ ~. Z% L! E8 g! U mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( `: }/ l, c" r% p* o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 g1 E# E/ X0 O( e: |8 S mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& G1 B' |1 h6 ~' j% h3 r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 d ?* ^0 [0 e" G8 Y' w! h
3 I- u4 z8 @+ F( D0 V* G" s: F mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 a; Z# g1 Z# n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! I# q$ w' d7 }$ K' y2 _: v6 X
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , x0 q, |2 q" W5 K7 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& `7 x. O$ b" z" R+ [' I. F
0 C. n$ P$ Z8 }/ P5 @% n CSR = 0x0000;
' D+ h% o$ s' M: J6 k INTC_INTMUX1 = 0x3d;
, e' s) Q- Q4 l0 T7 P2 O2 M3 h ISTP = (unsigned int)vectors;9 V! A+ v6 s* k+ g
ICR = 0xFFF0; 1 j. i% M, s! w1 z
IER |= 0x12;
# I0 U0 x( c& [* w CSR |= 0x01; - @. F/ n7 |: c/ C; ~: g7 }
+ m# J& W9 S, v* g' t1 [
( N: |8 u- l' T! J) g! G& ^& C
8 J( r7 {) ^* u! \3 P; B8 U% U0 @还有就是两个输入输出函数:9 Z, G9 [) R0 K0 `) j& U
void output_sample(Int32 out_data) D# }6 {( l5 O
{
; S# `# ^. x8 a/ G! ~ AIC31_data.uint = out_data; " v& d0 _; {- a9 e
MCASP1_XBUF5_32BIT = AIC31_data.uint;3 L9 \; V% q& o+ ~& K- M
}
# S! g" {" `% a+ f2 x: _9 l- O) u0 Q& B; U% R- o" A# a
Int32 input_sample(void)! o1 l. b% I/ x2 j* S1 a2 B
{
/ m$ w0 A" q1 r: Z; r8 f3 c AIC31_data.uint = MCASP1_RBUF0_32BIT;
, D) f! N2 B# Y+ P. j5 O% ? return (AIC31_data.uint);
5 E1 M d J& f' U% U( ~}
' Z8 j( J: B8 ?4 ^4 B: Q* C3 j; v
& f3 ^+ m! K3 P$ l$ w2 i( a |
|