|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! L! `: m- ^. ~ D; q' X; U6 c( Mmain文件:
9 j6 ^7 ~7 A/ G X r1 S$ \interrupt void interrupt4(void) + D8 t+ y9 r& _. N
{( ?0 Z M S& d l
Uint32 sample;. {; \, s7 Z, {3 w4 h) B
$ N# d$ w+ ~9 {, i# }& U3 i sample = input_sample(); // read L + R samples from ADC
0 l0 M* F% e0 E1 F: t output_sample(sample); // write L + R samples to DAC " s0 h; V+ h7 G! k
return;$ S' l; l! I8 [6 |" i
}
/ D2 a/ I6 W7 A# e" a# V* x
+ E& A* g" z6 `% aint main( void )# W2 ~7 j! Q, R% s2 q+ z
{
% J: h% U# |+ s7 o, q; I. B- A4 o# s; b8 s$ @) y$ j0 W
/* Initialize BSL */
6 ^" X+ C- C: j0 m& L8 E$ q0 m EVMC6747_init( );) l5 l% v* b9 G z
/* Call evmc6747_intr function */
( T4 ~! J8 t; X( ^ aic3106_init( );
; c4 f; q4 f1 U- i while(1);
: S5 _" `1 s2 e! e}
& {9 x# D; `2 h! o5 |+ d% E+ H8 p
# d+ \$ W8 s( ^) g7 N7 A. u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 i! W! g8 K2 C. |* q+ W) O; `
/* Initialize MCASP1 */2 k3 ~6 y! e4 {2 m, E8 n4 ~4 c
mcasp = &MCASP_MODULE_1;) ^$ I2 x3 F4 j" o. N
mcasp->regs->GBLCTL = 0; // Reset
) S( z/ p$ T! A5 r; b: Q mcasp->regs->RGBLCTL = 0; // Reset RX
3 u0 t5 t$ {6 W+ o4 l) o mcasp->regs->XGBLCTL = 0; // Reset TX7 o4 X) D5 G4 q. N: U* P( M/ }
mcasp->regs->PWRDEMU = 1; // Free-running
6 B0 C/ }( u- f6 ? C H // configure McASP0 receive registers* B1 T( P9 Z' B; s1 M
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
. M7 t Q( o, {7 Y) ` mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 W4 H" w, U/ X1 ?1 E7 I
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word: M7 Q1 k' s/ a {2 i# J
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). ?; I. m" J4 n, l9 _- ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" J/ @ O1 n. G3 P1 U( S$ a mcasp->regs->RTDM = 0x00000003; // Slots 0,1
0 s" ^3 H+ K2 }1 A7 ` mcasp->regs->RINTCTL = 0x00000000; // Not used
- G9 P; F f4 ?. b! D mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 E4 \0 R; b2 \4 y/ K& f. _$ O
. w' |/ C+ C3 S1 u mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 D9 S$ G2 [9 w3 Q$ y+ a
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 z5 a" Q1 w, \2 j: ^+ W" A6 B9 @
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( A# f; p/ Z0 z1 P1 L J2 S/ V/ e mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ @: O+ y% Y3 h5 ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
9 [2 N: J4 ~5 I- R- G mcasp->regs->XTDM = 0x00000003; // Slots 0,1, I5 l/ ^- a7 L: a/ L! T! W) V
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 a1 t2 Q& d$ `7 c' r. ]2 h; O mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ a( P6 _2 T" h3 C1 c6 t
9 t; f/ U( H. P1 ^2 G- ` mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
8 \3 D& |, G( C* }" s1 \ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; X6 w7 E% K# E- \- [) p( ?+ t mcasp->regs->PFUNC = 0; // All MCASPs
9 g: S0 x3 N* ~1 l" R6 M mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! C8 {5 ?* C4 E
- O) T1 i% U$ \( m0 f0 v mcasp->regs->DITCTL = 0x00000000; // Not used( a* G$ |, Z) D) u
mcasp->regs->DLBCTL = 0x00000000; // Not used
- f# @# z" ~2 t( P( z mcasp->regs->AMUTE = 0x00000000; // Not used
) B$ n, p% Y& S2 S ?# [
" P% Q3 `& }# ]' Q4 v/ O) C* @/* Starting sections of the McASP*/7 x: O' V5 v9 B7 A" G5 k
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) g7 k! _+ E9 V2 k, @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 7 q' }- o2 k' D
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ i E8 y1 i4 c+ Z7 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 j$ g- f: N5 |! Q& O: G2 ^6 I0 @
! G7 D% M8 R/ C" B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 d( \ k9 z6 N6 Z# W2 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( s) L% M( p4 E% _
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) b# e; Q6 M0 D4 ]; x& G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" Z: K. W$ q' Y" ^1 i
6 w P% l4 }8 v8 z; V mcasp->regs->XSTAT = 0x0000ffff;
5 ? F1 R7 P8 L- O/ G# c mcasp->regs->RSTAT = 0x0000ffff; - J% J: m9 W' Z9 E
% ^, L- s2 ?- b! A& `' n3 z+ {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 A8 L3 w3 j) Y% @; p& {3 }& y2 G; P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. Q @' i- `; M* {. X' N2 P) d$ o mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& N4 h, W( p5 F; N: _) X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- ]( ] t6 Y( U# ^7 G6 S2 M% q% Z; ] L1 X6 p; D9 Y
/* Write a 0, so that no underrun occurs after releasing the state machine */
9 W2 w6 {# L/ U) k mcasp->regs->XBUF5 = 0;
2 w' j0 E. h% r( B2 n mcasp->regs->RBUF0 = 0;3 w" u0 {6 K. ~
3 r1 s5 D8 }/ {% W9 R) k9 a4 F mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. r/ w0 f/ y/ F, }3 } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 ^) }# _4 C9 G0 y: r" @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. Y( B O9 L: V: H `1 g9 }1 Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. v; U6 C, w$ r: g1 _* d( @+ L9 y! ~& {0 ]: J0 Z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * }4 W/ @0 @. n+ P* G7 P$ ?' ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; ~ Y4 _( d1 q4 q- F ^. ~& t k mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 G- ~( \ }& o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* ?& ~8 [ f, \6 d
2 ~: W8 J/ T2 D1 t+ D% k N
CSR = 0x0000;
, z. G D6 H! D& H INTC_INTMUX1 = 0x3d;
. A- N+ h, X& ?; h ISTP = (unsigned int)vectors;
; ^: Z' W: k7 k ICR = 0xFFF0;
* a$ R% k" s7 o+ x! E IER |= 0x12;
8 m7 Y' Z) N# H CSR |= 0x01;
* {) }& h# |$ r; V" n+ S* c
) L$ W, _+ R7 z0 o1 o2 R
1 B7 E) B7 W" z* R% } M4 ^( ]
% ?, R5 @. m s8 _) s5 X还有就是两个输入输出函数:
% k: ?7 P# ]4 O N8 xvoid output_sample(Int32 out_data); T4 n4 ~' w2 F H
{
4 `8 G- b$ H! a7 H$ X& [ AIC31_data.uint = out_data; 9 l# }( _' x$ E$ e X- X
MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 `9 K" G/ E; j1 z7 l. N G; i}9 P d9 ~+ `. u. T/ h
2 b5 u* s$ C) F! `: |9 D7 l3 y9 EInt32 input_sample(void)
( J6 K6 f7 O8 | z{ & V( m9 V2 h2 e, T+ T |' I
AIC31_data.uint = MCASP1_RBUF0_32BIT;* n: `, n; c# R( b# Y
return (AIC31_data.uint);+ a8 N8 T! Q- w4 L$ R
}. L2 { S4 v6 d$ \
6 l/ h. d9 h' |
|
|