|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: L* {! m$ S8 B6 F/ ?6 {
main文件:/ [) V& K) O1 M4 W' _1 R
interrupt void interrupt4(void) " P5 z m! n' W) I: e
{
6 ?+ \+ p& H+ J2 t' X7 s Uint32 sample;/ Q {7 k7 s0 Z# j
/ G' l4 s, J! N B! _2 k' W; u
sample = input_sample(); // read L + R samples from ADC/ [. F, J: v) n# z2 ]
output_sample(sample); // write L + R samples to DAC
! z* d5 _' r" m7 d: E return;
8 G; L: v: t: B* J2 G' M* g/ m2 r}) H5 j; K) @) e- \# a
8 @7 l7 b) U9 J; u) H1 p# ~int main( void )
8 d, F6 i* w. q4 N5 I3 a{
- o5 L; d2 a5 J
i2 y0 ~+ |4 ?% I! M; Y /* Initialize BSL */% v8 D* e1 g1 _( R# {; b$ G C1 X
EVMC6747_init( );; E; z; e+ e0 | m4 |0 E+ ^' a5 G" _
/* Call evmc6747_intr function */
/ t3 n% {) P3 j aic3106_init( );
4 m, ^6 `2 }' |% q6 L0 M while(1);
) x- Y. _7 a! I4 y4 A}4 I7 f1 C/ l& v/ O" ^1 W0 a
& j! G# a3 v) I3 d0 u& K; w9 |3 }9 p' `+ c* C9 x! z$ A q* G; Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ I, D9 n' e+ {/ ?+ V/* Initialize MCASP1 */
, d/ a& q0 J7 _# v1 s3 g mcasp = &MCASP_MODULE_1;
! \+ B( P" ?! [5 l3 l4 s mcasp->regs->GBLCTL = 0; // Reset- e3 V' h/ l# P. J, Q) N
mcasp->regs->RGBLCTL = 0; // Reset RX( o+ Y+ O5 M; r) d" t3 y
mcasp->regs->XGBLCTL = 0; // Reset TX' y3 p3 [& o) \( ~) A
mcasp->regs->PWRDEMU = 1; // Free-running
. d& N7 j( j. v- P& y1 m6 q // configure McASP0 receive registers! ?9 {$ a& ^! r S9 T7 Y9 J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 W* b( o* y0 w mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ g- P, g4 C h8 D4 T. i9 o3 G mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 P- v2 d1 b6 b7 t7 B4 r
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 y3 G+ [- D3 K- |9 X, v- Z) c mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! C! t# v- U# i3 R
mcasp->regs->RTDM = 0x00000003; // Slots 0,1% G, R! x+ |! M3 ^2 R
mcasp->regs->RINTCTL = 0x00000000; // Not used' }7 Y6 L; [! e% V
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% Y5 W4 _9 J9 c% h2 a+ y
; J6 b: L" ~+ E2 w/ r; c* v8 Y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 m9 A6 S4 b' k% [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 L5 _7 m% {* Q- b# J) x( s/ p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word c2 u# b* J, h5 X
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" h( i, ]' n# q2 Q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* e( n! B* Z; G; ?/ [9 Q mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 F- u% D0 y8 ^; v2 F: ]' y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
5 q- ~( ]/ f5 |8 Y0 M$ s# |. u mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# m- N+ a, o# U4 u0 f. U( }( b+ n9 G9 O6 G
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
* h% }' r* t! B' Z- i mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 O5 N$ }, ]: g- g H
mcasp->regs->PFUNC = 0; // All MCASPs
) A7 o9 b8 A; b5 @' c mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ a% f9 N5 }5 }9 t
7 ?, j9 W( r, D/ c( Q mcasp->regs->DITCTL = 0x00000000; // Not used
7 C' ?0 I7 }/ D3 B mcasp->regs->DLBCTL = 0x00000000; // Not used7 |3 E- A3 F* E. {2 J
mcasp->regs->AMUTE = 0x00000000; // Not used, }$ O L2 G4 S4 I, w& v
# [6 \+ }0 u. }9 M0 ?# Y/* Starting sections of the McASP*/
1 x, g; m! _% C( Y7 K mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 _% o% W3 I6 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( A+ n5 W( z2 V. W. L mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* _4 t, R% Y C. l% E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ b5 }) ^8 K' v7 D7 h) I
0 I. h; _+ v2 ~: n3 h7 L9 n* C mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' N* M3 t8 G3 [: g* I- z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; A- Q2 J) a( ]1 A mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& L8 [* R7 k; d' {; J8 z* k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
_6 u% O, V1 o# K9 E/ K
& G# P1 \2 p& v mcasp->regs->XSTAT = 0x0000ffff;
9 A. ]4 W- R/ @/ A7 V mcasp->regs->RSTAT = 0x0000ffff;
0 ]% S5 y* |4 w _, b$ A
$ d: @/ h/ H, y& q( H mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. Q! w$ a/ A+ C/ A+ {5 G# T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ z0 b3 P9 T% |# L" B; @$ \" O
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; U) X' ?( P: l8 X1 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 b' X6 G* f3 ^0 ` h" k
4 l/ H" W7 ^' X+ A7 k /* Write a 0, so that no underrun occurs after releasing the state machine */: p) f/ ? Q! @0 G& A( W, i/ S' N9 X% s
mcasp->regs->XBUF5 = 0;6 F" T; j o+ o; b8 Y9 }
mcasp->regs->RBUF0 = 0;8 Y( K: @5 T% {& G
' f8 e3 d2 _* ?8 f" I mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 ^ Q' p, H1 _+ j4 t0 C( Q& b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 S3 J4 }4 j/ o2 h mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 k" C6 H. S7 |" y: y4 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- d$ B6 J9 H* U7 F( B z
8 E) |! a1 { n! y1 n# v" h7 @' q) p mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) K) e, _$ h. x5 Y/ S4 J% F! H6 i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, G( w5 o F: A8 ?4 S mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & W* N: |+ G7 e& W4 e) F( r; J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 d3 P' }+ J. |1 B8 Q
: y0 D9 {8 M. L% u9 x( ? CSR = 0x0000;* d" D4 j+ M( P! M8 C
INTC_INTMUX1 = 0x3d;
* i4 [1 N/ o& f2 C/ E& ~$ J: C ISTP = (unsigned int)vectors;
& s8 \0 L& I& u, H O ICR = 0xFFF0; : N* C5 c9 c2 v0 X, q
IER |= 0x12; + f! F- |8 k. d+ l+ B5 f4 y7 Y
CSR |= 0x01;
) T2 T9 _$ B' U" H/ f4 ^! h
- W, }9 G- m& T n% y' f: O, K5 `* Q" W0 E- ?6 N
, O/ r* m$ x$ [还有就是两个输入输出函数:
2 [/ e+ ]# C, N+ Hvoid output_sample(Int32 out_data); W. Z' [# h* L) ~! O4 T- \
{
$ h/ p J. z# l8 ?0 F% ?4 Z4 p AIC31_data.uint = out_data; % D( n, v! m8 L' w! V; g
MCASP1_XBUF5_32BIT = AIC31_data.uint;
! J4 ?+ e8 j+ \9 H) B& t: k) }2 u}
* J% n3 q: u& X2 E
3 a0 ]% {( C7 r) e8 z2 p! Z$ |Int32 input_sample(void)
9 U8 _: }% _& M. n{ - U& p$ V- U, K7 w1 z7 p
AIC31_data.uint = MCASP1_RBUF0_32BIT;6 N0 o6 y* s6 w! z5 b
return (AIC31_data.uint);
8 }+ ?/ Q; Z- m1 V: H, O% i- _! x}
& g& h4 [& n _7 x; ~
" {, V: h2 d8 J* o |
|