|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, v5 k; W" e' ~" }; P+ xmain文件:4 P$ X/ U! A' |1 w9 l: ]& y
interrupt void interrupt4(void) % W9 E* ~5 H* D* w9 z- }
{. s3 t9 P; W! t j4 u( j
Uint32 sample;$ x9 |# u0 [2 Z7 q9 n4 x/ A
, A% `! {' B0 w* T sample = input_sample(); // read L + R samples from ADC
( p$ E$ M; R5 T: K4 T5 Z2 G$ P output_sample(sample); // write L + R samples to DAC 8 {6 N* P8 I3 ^# v' S
return;% C+ N% C) z4 D* l& j* \: R9 |: S5 J2 J
}0 o T" |8 w, r7 U
& n8 B6 v; Y; S8 aint main( void )
- s5 A( K6 C( {0 F. M t) L) A{$ l* |' l( W( [9 Q$ o3 g0 E6 ]
# M6 E- ~" ^$ k0 B
/* Initialize BSL */, J3 s% j1 ?, c$ b. j
EVMC6747_init( );& ^% d$ V) L- ^6 H2 i
/* Call evmc6747_intr function */
, {! L1 ~: s2 m' b5 ] aic3106_init( );' G! }9 x& J0 P& X
while(1);* y. v! M8 c! |. E
}
! B4 |. z; [' U( a
% A D. e. Q# o: p- C- f3 C% n( N/ ?$ _- ?$ [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' F6 O( T; v1 G; g5 t1 a- `+ x
/* Initialize MCASP1 */
7 i& h/ w! p( T. i mcasp = &MCASP_MODULE_1;* s9 R; q# I: y6 R Q
mcasp->regs->GBLCTL = 0; // Reset% M$ I: M$ f" Y' C. ]$ i
mcasp->regs->RGBLCTL = 0; // Reset RX) A" U5 L9 R/ g# Y" l
mcasp->regs->XGBLCTL = 0; // Reset TX. Y. [! D% K% X; \ u
mcasp->regs->PWRDEMU = 1; // Free-running
& H( B" a# y8 m- f- d // configure McASP0 receive registers& h& H1 d, x8 V. X# b* M8 V
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used6 }5 B$ ]5 F! c
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% ^3 i/ ]; @* E( }+ Q mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 r5 \3 N8 o2 M# c4 d. t# ~ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 ]' ]7 X/ e9 s! |4 `
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 }: _; h9 [: {' b9 E
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ g) l* |' a2 X( R5 z+ \ mcasp->regs->RINTCTL = 0x00000000; // Not used
6 a+ |9 B0 w/ b5 R! N* D% S mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- i8 P$ |' F' u- R& `) R# c2 S# L$ N. p( }( p
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 h! H3 ` [, W0 ^
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 h1 t: c3 g- s) @: G4 p& X2 l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ V( {' I! W! {7 k mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, `: `5 i4 {1 U! |, ~# V( ?) z/ u* k1 K mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; b1 S- R, \, r& v' D7 B% O
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
& @* V: [5 U' _, w8 J7 M0 S mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 H9 \! R8 s1 }) U" h4 u mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- Y9 c6 B, z7 K9 i7 Y4 N. j; u
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ R2 t$ Q) m+ D% i0 U4 p& f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
& G- T1 O' E8 v5 o# N% w mcasp->regs->PFUNC = 0; // All MCASPs* ~4 u1 N6 F4 H8 `& }% t2 Y" A) g( s( y+ P
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# j$ a* e/ q r* n- {
8 P3 X( y$ `+ v4 Z# e! q
mcasp->regs->DITCTL = 0x00000000; // Not used
: e# ~! |% e3 | mcasp->regs->DLBCTL = 0x00000000; // Not used8 P4 }5 {/ h" p6 w
mcasp->regs->AMUTE = 0x00000000; // Not used
; }7 c, _9 D" \# ^: P0 u! y) x+ l- E: S1 q5 y% ?' l5 x
/* Starting sections of the McASP*/
& a& t# N$ _& I3 G2 _. t0 Z* k mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # B/ Z3 Y; o) _/ {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); - Y7 e% Y9 B' U W, T
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - s, j1 D" b5 g' L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 P7 Z+ ^3 w" i$ f+ i+ j
s }) {/ d& I; A mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * v- B. g. S5 c* V& d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! \) ]0 q: y5 z mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. ]" v$ B3 M. Z; F1 O/ P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! l+ {+ }- n( N9 q" \! f5 E/ H* X6 p1 ]9 @9 x
mcasp->regs->XSTAT = 0x0000ffff; ! k$ x; L3 J& J ~$ D
mcasp->regs->RSTAT = 0x0000ffff; , A+ j% g* s/ Q9 B! j/ _; q) i9 l
# a' ?% d; N3 m3 [9 K: m& S3 x mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) O5 S3 x% v a, X# S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) _* P% |+ E3 Y9 f
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! s0 e5 J- ~- [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" S; y Y. n" z7 R+ S1 U& E9 l: d5 ~# ?- p. C/ R7 J* b) Z
/* Write a 0, so that no underrun occurs after releasing the state machine */( N6 ~" \& G3 w m, Y# n
mcasp->regs->XBUF5 = 0;
7 \/ N) t1 g+ X4 U1 D$ G mcasp->regs->RBUF0 = 0;3 L8 A0 Z& V8 R+ a% u, G, W
Y* \2 S* u2 g mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # c7 b2 \* c- |* I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 n) @# Z- Z& P9 Z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 \8 ^6 ]7 K W, Q( {2 d3 G8 V7 b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. {$ r$ M; y+ q4 f! k
5 I& J+ K8 S0 X" @+ k' ?% Q: L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ |# R/ B: }, P& k+ Y Q2 {3 E- b: G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; w+ [* _ M0 J9 G9 A3 X mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' w8 ~3 V" V# C- ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& u7 M8 R3 v4 g7 Y1 `$ ]! _$ {' j. F n, a' Y1 @6 `. @! \
CSR = 0x0000;. W% @. ^' n( I4 i) y
INTC_INTMUX1 = 0x3d;
1 l! b9 e5 ?4 G3 j- { ISTP = (unsigned int)vectors;
5 t6 x/ a0 s( l* |3 W) c( g( B8 e- ` ICR = 0xFFF0;
. S4 m8 t: `6 J1 }) K IER |= 0x12;
" J2 y6 K8 S0 D4 i% c CSR |= 0x01;
3 V& u6 v/ I9 j Q5 E+ ~- |, a* z& t) c" k
( j! D$ k2 n6 m3 x9 B/ T; J
8 m. f" ?" ^! n( `+ d还有就是两个输入输出函数:
& ^; N. {' e0 ?6 c$ y' Bvoid output_sample(Int32 out_data)5 n2 R4 w9 w1 r- n
{
, _) ?, H0 h3 o6 y; t3 s' P AIC31_data.uint = out_data; ! ~9 N" K3 Z+ x" o" U5 q# Z+ W
MCASP1_XBUF5_32BIT = AIC31_data.uint;; v5 j( A6 @7 R8 C0 u k6 M! F! a
}
4 y* G: Q# |, H K! Q2 l* v: c& _4 C0 J, s4 }8 I- B# z3 K
Int32 input_sample(void)
$ W: R- A6 X& h/ o{
0 h( A) B& i7 U0 A! \( K% @ AIC31_data.uint = MCASP1_RBUF0_32BIT;
! |7 ^5 l' M7 J return (AIC31_data.uint);
6 _+ R$ l4 a- y' n; u; m" F. W" M}
g' X# Y9 f6 [( I4 ~6 ?' j- z _4 R O
|
|