|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# T+ d% M( ^7 _( M. U) `, e; bmain文件:
' ^; E9 m2 P5 P3 t/ ]interrupt void interrupt4(void) , y6 R8 u8 e* i1 _! C
{
" _0 S# v& ` V$ ` Uint32 sample;, | {: A" E8 j" e1 M3 w9 m" ~$ P
7 R5 W# x% d+ D+ _& M sample = input_sample(); // read L + R samples from ADC& b3 b @- @" ^; W- [5 s
output_sample(sample); // write L + R samples to DAC
- |& w: s& o9 T. _ return;
2 W- _& Q7 A" U% c2 `8 |% I# l}+ v% F( K- E2 y: \7 h
. B2 u4 \. t* r. U$ I% eint main( void )
( ?3 }7 |# J# O `2 q% _{, V$ p' V# E- O* k5 w) ]: e
7 p! \/ X8 f, e B- L /* Initialize BSL */$ t/ c/ `& F& T! a
EVMC6747_init( );7 K, J2 O! G3 G# z* r
/* Call evmc6747_intr function */
1 `1 e9 d) g: t+ Z/ I' O* W aic3106_init( );, A; s$ d/ X$ b6 v% T: L
while(1);8 C L4 b$ E \/ i7 }- e6 v
}
2 X( Z8 L$ G0 J" Q7 ]2 f8 p
+ [* Q& S& Z3 Q/ }; f- T" T l U0 w, w1 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 w+ i4 o2 Y7 e: n/* Initialize MCASP1 */
4 I# A* Q. B9 }. t8 Y- P" l mcasp = &MCASP_MODULE_1;& m: U2 U5 g' z5 g7 O# U% W0 p
mcasp->regs->GBLCTL = 0; // Reset4 u2 _( L2 w9 V6 d& L; O
mcasp->regs->RGBLCTL = 0; // Reset RX
% z( r$ W) m9 O0 ]. W; f mcasp->regs->XGBLCTL = 0; // Reset TX: {5 \' C/ J& f/ k
mcasp->regs->PWRDEMU = 1; // Free-running
$ A D, [5 T4 |( h) A M // configure McASP0 receive registers1 s6 J/ L+ r x, ~4 c$ @" r5 j4 J( T
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 X* F1 g( @. i( C3 K+ i6 P" S mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. b( n! b6 v/ k2 b
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; R. g/ t0 N- Z5 W+ O
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- i. K, @; G S" {2 s C1 B
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" R2 K8 z- o" \+ g8 j" |; I- T mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& y; _, P5 h0 w! K5 j3 Y mcasp->regs->RINTCTL = 0x00000000; // Not used
: A* k9 s4 T; U7 I: V+ S8 y mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 O5 D7 |; L I# Y( t$ o. U5 F
- h! d, d) {( y# S& f mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# q1 c C6 n) T/ b4 Y7 S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 c$ q2 K; F& h4 G& J
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& `0 t0 _9 y* H" b( H/ y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' N. q4 _" u' J, y* n mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* u9 p. C! K' ?: h1 k6 P1 j2 P mcasp->regs->XTDM = 0x00000003; // Slots 0,1, t$ e- u% l9 y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit* f. s& b; q; e$ x5 j4 U: d4 f1 O! l
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. d2 Y+ S% L+ i: a
: S4 K2 Q+ m" ~. ~7 x2 ?
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# ]$ ?% q4 }2 {+ U2 @
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
) Q3 S9 [- u4 F) j! ~" t( \ mcasp->regs->PFUNC = 0; // All MCASPs
* j) W0 ]6 U+ B+ g" r5 `4 l mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ v( d9 k8 |) w- P! t* k5 X
5 S" |/ x! k% w: ` \6 i. a7 b mcasp->regs->DITCTL = 0x00000000; // Not used% F9 i |: [) z4 M9 b
mcasp->regs->DLBCTL = 0x00000000; // Not used( C$ T) R4 i5 |: T' t5 L4 h- r
mcasp->regs->AMUTE = 0x00000000; // Not used
, \( F& w9 j1 q- U5 O( f4 l; J/ N6 p9 V b( }; u4 \' W
/* Starting sections of the McASP*/& ~- A8 E0 u( m1 U; @0 j- o
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " P8 B' o6 G5 r8 I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 [6 g8 N) o8 G. V9 ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 L2 h; d2 a! n1 t2 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 Q5 N4 y# d. U) D; H5 u/ W; b) f) S, d* n! w5 Q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( x2 p/ L9 S5 @4 F. V/ E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 V. t" `3 M, ?) c% r* y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( l5 ]/ ^5 I- I9 \" s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 N9 O* v$ r- X; C7 c
/ M7 @: N% ?. ^6 Y mcasp->regs->XSTAT = 0x0000ffff; . g& L+ Q& e1 _, i( w& b
mcasp->regs->RSTAT = 0x0000ffff; 5 y. a$ R/ I7 k. D8 I
J6 |2 i: ^* f$ m% F% \/ `$ h! x! i9 W mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. |9 K6 b" m' y# B- q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& Z4 j, ^& h. r4 \6 o7 C, f& N
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 \% T9 @ `3 ~; K- b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! v+ d2 Q' q% M5 h3 z6 A$ M9 V; f4 @: t) _
/* Write a 0, so that no underrun occurs after releasing the state machine */
; X( r# F: ^- b mcasp->regs->XBUF5 = 0;9 k& R4 N2 x- t4 z& a1 S6 S, O( k4 z
mcasp->regs->RBUF0 = 0;
7 `: n# j9 e- R$ ~! r
& ]8 `9 w' d( ?( } mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ k6 J* E' u/ ~' |9 q& ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 | @8 O1 j; B5 X1 q6 a& W6 g
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; g4 X& S1 d C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 @" X+ o) N6 n# H3 B5 J4 E( c7 N+ \1 Z( _ }# q$ V
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 f$ D' v) Z* ~$ _6 d. L$ w# P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 i. {9 V6 W1 N. W mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; v4 u+ \' B7 X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, `+ J; O# Y4 m
. E) ^" \' s0 K$ w CSR = 0x0000;
8 U; ~* |+ W6 E* ?( N& M, a! Z$ `4 \ INTC_INTMUX1 = 0x3d;
4 S$ }' h) i1 m# \ ISTP = (unsigned int)vectors;( G8 Y& B j% G% `5 ?
ICR = 0xFFF0; $ {+ @3 P1 t! M1 [# u( @
IER |= 0x12; 4 d# j7 J: _& i: |1 {* P
CSR |= 0x01; % X$ x+ ?, U* L; Y
; E, a: J# Y( C2 V2 b' T
, K, \& x2 i# F% k7 ^$ {: `3 j6 c0 S( |+ b5 v5 N% S' c
还有就是两个输入输出函数:5 ]: C9 T( i( b' l/ N
void output_sample(Int32 out_data)' d N& _* W) c# W4 o u! A
{ C- j2 d! Z; P$ y
AIC31_data.uint = out_data; # \8 I2 s# T- t- E3 P* S. u! t2 Y
MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 v4 a& r/ G8 G# _}; ~4 D- \ h, H" ^2 e( [8 B1 k; `
% o' i+ D1 X+ t4 {: ~. `
Int32 input_sample(void)
( i8 G0 `5 c, D* [/ `8 a{ - ^5 J& w- U& `, ~4 F- _
AIC31_data.uint = MCASP1_RBUF0_32BIT;
* M& Y& N% k% F8 c% q# A return (AIC31_data.uint);/ W/ \- {! t J {/ b6 V, ~
}( u) b: j& C8 d* ^: |3 m! r
2 R5 o$ S& {0 w# q
|
|