|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: Y7 D% t+ l+ D7 r, j% `6 _% c9 k
main文件:
& \9 k/ g1 K5 F& [. einterrupt void interrupt4(void) 4 j. a! h2 o2 P
{* K5 Y/ Y, n" V, n& G
Uint32 sample;! \3 w' z4 s4 Q, J" g, S% z. T1 W
% Q5 b9 t. \, a sample = input_sample(); // read L + R samples from ADC
* S5 B( [; R: f! m% K" n# N2 N! j output_sample(sample); // write L + R samples to DAC
6 ]! y; Z) G4 l, w return;
, A" K! n% z& H P& e B}5 \4 k& i4 d* C
) N8 z, r6 f0 [: h& ~ cint main( void )7 P4 b3 o, \" L9 _; H+ N& }4 U1 a
{6 Y$ A" O$ H! }- K! v1 E
5 b3 m8 l) B. g p1 y; Y4 z
/* Initialize BSL */
$ | ~/ ~' Y5 g J EVMC6747_init( );
! H4 C% d5 e, \/ w$ k1 @ /* Call evmc6747_intr function */
; Z0 f! m" M, ^' Z( O% f0 d aic3106_init( );3 j) g+ d1 m! h4 I
while(1);9 d& D% z$ F: m/ T
}6 J% [* z1 l+ k/ S. V; v( N) I
& f4 H% r4 {1 W- V+ V: S
( Y2 @3 ]* k6 S9 o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 ?% @9 A# X4 S% m
/* Initialize MCASP1 */9 B5 [5 R9 ~4 w% t
mcasp = &MCASP_MODULE_1;
# `- f5 N0 Q1 i6 ` mcasp->regs->GBLCTL = 0; // Reset/ f) n- e9 |5 ]5 Q9 c9 _
mcasp->regs->RGBLCTL = 0; // Reset RX ^9 Q" `% r9 O1 U8 w
mcasp->regs->XGBLCTL = 0; // Reset TX
7 g, l+ U" `+ D! ~( X; {( X9 C- V mcasp->regs->PWRDEMU = 1; // Free-running! R; G, U' x$ [' L
// configure McASP0 receive registers* i6 r0 t* y7 b' I% J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; b6 s/ J+ y) _: p3 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& V6 ^1 B1 O8 v' A( `/ Q9 ?( p mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# {" s: |0 N$ U7 b I- m- u4 r
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 y, R$ k9 m: D4 w7 `/ I mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 e% A+ p! k7 ?$ n( I& Y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ r3 G( Y( Q/ ] mcasp->regs->RINTCTL = 0x00000000; // Not used
' s; K( O3 _7 ?( ]- R; } mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 h: B; p4 l/ U: Z% u' H3 c
/ k- k% ]( K: l2 U$ z6 Y" K mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% ^7 J6 S( B9 }- r& g$ _
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! {7 ]" ~2 f; m0 j" O+ v+ H: N mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 Z; ^/ D6 w5 A& s
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 }$ i% x+ M2 Q& e" X2 n( q" L; \9 Y
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! h3 M# K( x+ V% M( I" I/ P mcasp->regs->XTDM = 0x00000003; // Slots 0,1
: ^6 N6 y3 c2 h' ]( p' S* m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 Z9 ]8 t$ Y, Y mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) m4 ]4 V7 u0 P: \% p# I# i
+ a; E4 `+ \8 ^! j( m/ P3 j7 n mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 G' `% G8 g* t) T1 w" p' j mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: E7 J0 B3 x( a0 F) M* u mcasp->regs->PFUNC = 0; // All MCASPs
' W0 h( @9 n, v9 X$ z0 G' D' n mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ a0 j- r( c }9 L
- k# o' k, ?! D# }- S+ r; T mcasp->regs->DITCTL = 0x00000000; // Not used$ i1 N+ f' [7 S6 ~3 e2 {8 o
mcasp->regs->DLBCTL = 0x00000000; // Not used
9 ~7 @: Y: g( ~ i mcasp->regs->AMUTE = 0x00000000; // Not used
( \- R' C$ |# u& k8 [& ]3 h& g! X$ A1 z: c+ [6 n' s N7 m
/* Starting sections of the McASP*/
! p. p2 E! l. x6 Y. R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* ]( j4 p! \& x8 Q1 J1 n$ n: R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
; n- s9 C! A! ?! {7 A& u' C- ]) n mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " O5 Z9 ]) h q' V* E) a! V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. s0 t# p; h( g. v% a. [, x* c
# S6 r" W6 o3 k* D/ o& ]
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 S' w. ~* X+ }/ F: v2 Y) c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- K( G+ p" k2 O6 }' g: {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% ]: H9 R3 }- d- a. M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 q7 r* g$ s* }+ h9 ~5 X* `( L# o2 \8 w
, K+ F& s7 g6 k mcasp->regs->XSTAT = 0x0000ffff; + @3 w. N% u g1 W' y2 ~5 m
mcasp->regs->RSTAT = 0x0000ffff;
1 ?0 `. a3 z) C e' p S# b8 F+ y; j
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; D) F. l0 m; u0 O. x, O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& a9 J4 E- z) g- S0 _
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) s+ _5 L& w9 z* ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 X8 }; a' h$ I9 {" [" K& I( R7 @# @( F" N. k$ t, z
/* Write a 0, so that no underrun occurs after releasing the state machine */
8 I9 V# x- }; \8 m: a h mcasp->regs->XBUF5 = 0;
3 I U7 d6 Q% Z& Z/ i mcasp->regs->RBUF0 = 0;
1 Q; F$ i2 k5 s5 z# y/ _6 S- n# Y. O% a0 O, T9 F% R- n
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ { `# D3 X; M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# u2 U$ R" S( v- b; g
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / l+ `8 s( p9 ^) Q4 s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( l3 G' M3 G7 s; \ ?5 s6 d* k! s' q: i2 J" x I9 r( u+ s# s
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 O6 {; ~& r: b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ D2 i1 }! |' S6 R1 x8 K mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: H" z- V! o$ }2 A Y: K5 g) a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! B$ p! q4 b3 d+ m) l/ Q
4 o7 a; W# z, y5 I h CSR = 0x0000;
- y" D: Q2 G- I4 X9 B INTC_INTMUX1 = 0x3d;& n+ T) z* o0 @5 J6 _ h
ISTP = (unsigned int)vectors;
6 r5 O! s- D' @4 P ICR = 0xFFF0; : a0 t4 ]' n/ u& _2 D8 k' i9 m
IER |= 0x12; & ~7 n B5 ]1 M; Q& B4 i
CSR |= 0x01; ) q# v; [2 j; ^; \
$ x% r, W" }6 a( a! M4 f8 m5 y9 m5 i1 [+ u
5 J l" }# R- q$ ~
还有就是两个输入输出函数:
9 E8 B3 B, W# @. t5 Qvoid output_sample(Int32 out_data)
5 [- i3 ?) K6 _; t' R' m$ J{
. q7 X/ z5 Z9 V& ]& Q AIC31_data.uint = out_data;
5 B' \, c& `+ |4 S" n: G7 o( S MCASP1_XBUF5_32BIT = AIC31_data.uint;0 d8 _+ z$ T: `3 I- N7 c2 \' e" e
}5 G6 o# G: n. X8 }5 C
& b+ V& l3 l5 g# L8 XInt32 input_sample(void)! E% r3 M) X4 K& ^3 t6 Q
{ & c1 M- D) a8 K: t# ^9 v; h, M: i' L
AIC31_data.uint = MCASP1_RBUF0_32BIT;. I+ T# E |2 R1 l3 s- d) y
return (AIC31_data.uint);6 W+ Q& q% z6 o& h
}4 O! f6 e, v, G; M( g
3 H2 [1 k$ y8 \1 A1 W
|
|