|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 U0 H+ a9 w2 b o* {
main文件:
& v y0 F+ ]( E# H% c+ q7 Sinterrupt void interrupt4(void)
0 I/ M9 R5 Q8 Z8 s7 M{1 E. g% {9 K# r) D9 w! B' q3 ^5 E
Uint32 sample;' v+ b! I0 F: Z! @9 M2 |6 ~; u9 B% b
6 l# H& l! p/ W7 W- m3 s* U9 l; [ sample = input_sample(); // read L + R samples from ADC1 t5 E. b0 k. z# s* Y: s
output_sample(sample); // write L + R samples to DAC
3 Z! }% [7 j9 w b, M- T$ t return;% U2 O8 }! j3 [) }; Y
}# w5 ?0 r8 L* B, K! O7 O
) c5 t6 _& x% g3 q: |8 v
int main( void )
8 U3 Q0 k0 e* A, B+ u( I0 ^{1 _& t: x- Q o4 G( n6 B3 ]6 m ?
2 ]7 M7 V6 s, @. n2 q( d, H /* Initialize BSL */
$ s+ C; }+ p1 S% l" M EVMC6747_init( );
- o3 @, H/ i7 Z8 J' B0 y6 O! o$ D /* Call evmc6747_intr function */0 A \. b+ a# e
aic3106_init( );* M3 ~: h b/ r7 T2 q
while(1);% U% }( C3 a5 ^0 \% h" R( S
}( h% U" g8 Q3 L' H; Q# {* f
+ x2 r! Z! N! O7 h9 z; l
, N/ w1 k* ] J3 T. L" R2 l; }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) J" H# }2 O( v u/* Initialize MCASP1 */( B& s: U$ {1 n1 [
mcasp = &MCASP_MODULE_1;
7 G4 L2 x5 J/ r- Y9 c3 W7 u/ O mcasp->regs->GBLCTL = 0; // Reset
. g/ D7 G' p$ D1 d mcasp->regs->RGBLCTL = 0; // Reset RX
% Z/ d2 G1 a9 P9 q2 r* Z: Z, } mcasp->regs->XGBLCTL = 0; // Reset TX8 t1 D; o* b% |" r( v& c. j- p0 ?- J
mcasp->regs->PWRDEMU = 1; // Free-running
) R' d$ B# o$ e8 E' s // configure McASP0 receive registers# I+ K& _- E1 ~7 h* @
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 D, @3 |# z5 V! d W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, {; U# l; t# O7 Z8 T mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 o! x, _- q: ?/ ~' o2 d; J
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 k0 ]9 Y. K4 W9 B& ], v
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ _' |5 y- ?9 q- e% u
mcasp->regs->RTDM = 0x00000003; // Slots 0,1: u% g: `7 S8 s$ P+ d* R) M6 T
mcasp->regs->RINTCTL = 0x00000000; // Not used( y: }" g$ {- k0 e! g9 u5 ?
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! e" G9 A2 j0 E! b$ ]4 X5 j
6 u/ c" V7 ?! J* {! E mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. _' O0 L, j6 ~5 I: i0 A2 Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* @/ {1 J* ]- O' q; }. w
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& o: s' H* g0 v, y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: i! X# F; m+ h% C9 o- p6 L& ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. J6 D" |) a' A# x
mcasp->regs->XTDM = 0x00000003; // Slots 0,1, O! j" l$ H! F. W$ a. Z: C! a1 E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ T: F0 b4 l! X0 |( c
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 x' X2 K6 D r2 `
S6 J9 ]# L* s* v% P# u) G& ]8 Q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! P5 n1 D: m% c mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ q+ k2 m. K& x+ O' i6 y! k mcasp->regs->PFUNC = 0; // All MCASPs2 J, O- \/ h' D/ i6 x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 D5 G8 u S' {8 i. r/ m1 A
: l: H( S3 X) r T# N/ r, j- X" [
mcasp->regs->DITCTL = 0x00000000; // Not used9 T% G, T1 X& w' {) x6 u& I3 H" I
mcasp->regs->DLBCTL = 0x00000000; // Not used- E/ K7 R2 F; ^" o/ X" D
mcasp->regs->AMUTE = 0x00000000; // Not used1 A* Y6 E7 }- \8 C1 @# b+ B
% c' { L! d6 ]5 D6 h- z# W
/* Starting sections of the McASP*/
) i( ]" ] t! y! R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. u& j8 U7 v7 h* V2 s, S) t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 P/ K8 @$ I! Q3 n0 s/ h4 f
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( N2 C6 G* S* R+ p$ m& a- Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ B3 X& J: A2 N5 S2 M; a, X o& h" L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 I+ K$ w( l5 a4 f; r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); b6 K- G7 i r% G! t, S
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . `$ ~3 c$ W: t$ [ m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 a2 K8 ^4 F- v7 x+ A8 R" J. u( J2 a/ U4 v
mcasp->regs->XSTAT = 0x0000ffff;
/ a" F( B, S1 z mcasp->regs->RSTAT = 0x0000ffff; 5 Q7 E# Q0 O7 u
- V" m2 _' h9 O2 v8 \3 ]1 I
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 `0 `- w$ T! W z- R( h! Q2 E3 m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 y; C( \( b! h# {! e
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: ?9 p' \3 L& p6 O( x1 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ l: @( N7 [* S4 H
, Y2 t4 a# Y2 F7 |! T
/* Write a 0, so that no underrun occurs after releasing the state machine */
. o" W3 ]9 F/ Q- g" B7 R# r. y mcasp->regs->XBUF5 = 0;! W4 c% } E' g" i% z$ _
mcasp->regs->RBUF0 = 0;8 E+ p) ?: u3 p/ }8 a0 \1 C
% |" [) L" r% r0 {# |6 n% G
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 A `) N* w2 N$ }% `+ R) q4 u u' v9 r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, r7 a# O! p5 |6 y. W
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
e5 `2 f* l6 I: y& @" e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 N( i- H4 B3 s( z* ]4 D4 c- m+ q% C6 p
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " w5 z& i" u+ H( y! z% h# \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( C2 X1 Q; n: ]+ _6 n# L
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. p2 |( F2 ]2 R j5 `& w- w3 `8 Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* g4 }; q! M% z" \
6 d( I: ^0 d# b8 S7 b" c- C CSR = 0x0000;: [" S+ c2 b+ Q! [+ s& `) Z- L
INTC_INTMUX1 = 0x3d;
* p p F: U; ]; R, v8 p: F ISTP = (unsigned int)vectors;
2 \5 D: c* ~2 c( ^1 t ICR = 0xFFF0; ! n7 C1 ~7 U4 y2 a0 Y
IER |= 0x12; " L# S9 e# d, m" U8 H3 P) f
CSR |= 0x01;
' n" |2 Z# I: J( W1 A% a/ k0 m$ a% s7 j
, L! F4 a$ W) u. R
# Z# g+ O4 {( B还有就是两个输入输出函数:' q9 y- F8 G" |: z) z2 O
void output_sample(Int32 out_data)
p9 Y1 p4 j4 G0 b{
0 t7 ^5 U. \7 K& ]9 t! V AIC31_data.uint = out_data;
2 y; w6 }7 t' u* \ MCASP1_XBUF5_32BIT = AIC31_data.uint;
) ?; a) `/ {9 _$ w}
4 X7 C' u' I! J5 _
; e7 T" X: i5 ?( Z7 B7 RInt32 input_sample(void); \1 r/ x7 F. R, U) @2 r
{
6 L) l$ m, D) H, ^' o3 W4 a AIC31_data.uint = MCASP1_RBUF0_32BIT;2 r9 {; P @ ^# ^& I
return (AIC31_data.uint);
- }4 k; H& y) C( v& s}
. m' M# K- D, Q* {9 A$ @, J& B5 {
|
|