|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 g7 g' f9 Y* }2 a( ]# R
main文件:
* k3 ~) X# s2 M; E. ointerrupt void interrupt4(void) & U+ b9 H& z2 G
{
, K. J9 ^9 B4 z% x3 o; d% n" b8 o8 a Uint32 sample;9 V% `- a8 e; L: T v6 N$ ?! R
+ f) ]- |" J }& n sample = input_sample(); // read L + R samples from ADC
4 e/ S n* f; I% G output_sample(sample); // write L + R samples to DAC f7 U! B3 t [( l7 P
return;
# Z" C2 G Z3 m* K. h}
/ D3 G% e1 u9 R; I6 Z# T; d5 O) i- a8 s4 }! e( k0 D6 y* U+ G
int main( void ), D6 d! d$ Z% D! P: q% L
{
b2 Q- f. q2 ~9 ~
* e0 o6 U$ h' _ /* Initialize BSL */
) J. \' ^, B3 @( }9 y* \ EVMC6747_init( );
/ M3 g- R/ y- y /* Call evmc6747_intr function */- E. x' U( M: w
aic3106_init( );8 ~* P5 P. u G* \. J ~
while(1);; |8 f$ j2 g- n, j9 U5 o4 S; b
}
# q5 ^( p% @# i$ ? F9 s
& V* P7 M5 F3 }7 e' G" \& k9 E& ]4 w. Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: C3 _% {2 b! i4 I/* Initialize MCASP1 */1 }6 o1 W3 E. F$ C+ z1 U6 e
mcasp = &MCASP_MODULE_1;
0 V' F( q. i, O5 c t1 J mcasp->regs->GBLCTL = 0; // Reset
2 R2 k! D* p8 V0 B# s, e mcasp->regs->RGBLCTL = 0; // Reset RX
. R' Y. h/ _; u4 k$ I5 F, Y0 K$ c mcasp->regs->XGBLCTL = 0; // Reset TX# J3 d" y7 O. u) o3 }
mcasp->regs->PWRDEMU = 1; // Free-running
! m Y9 B) K4 q4 s3 D# D; X" E- E // configure McASP0 receive registers* g# M1 @ D( t' E, N
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 g7 G: T9 w" m% w
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- ~% A# }. E9 k* @" K$ V4 y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! h+ E9 w& L$ X L9 C! l4 _: F
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; d; K$ X( J( ]5 w' e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! e$ V7 ?* T1 b" i
mcasp->regs->RTDM = 0x00000003; // Slots 0,1) G0 s- @5 T1 p
mcasp->regs->RINTCTL = 0x00000000; // Not used Q$ _6 ?4 @, @3 N' v1 H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: U' m$ g1 ~) p. X* ^% x/ H& T8 a) r' {
: p0 F p" w( o4 \& i; @' I mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 J6 i) x+ `) P# V1 G
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 c1 ?& W" s& \6 o/ F mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 ^$ Z# O$ `) n( ?4 y5 b mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! {- ^' m- s0 U
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( r {& Y/ G1 g" W( l4 D9 h4 R mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ W9 w: C! ~4 d7 p% K2 f
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) o% Y! |2 Y% E, } mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( @+ k- I# x& ?5 c' k2 m3 _1 J% H* C$ f' o/ v
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 z4 n3 }6 v0 ^) x8 k" S+ I }
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- ~+ }' G5 M" [4 L1 b2 r5 e4 B
mcasp->regs->PFUNC = 0; // All MCASPs0 W1 e, |* {! O% ?4 b$ k
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' U( ~& _/ u d2 H' E
4 i4 u, l ]0 j$ ]7 t6 T mcasp->regs->DITCTL = 0x00000000; // Not used
2 |4 O+ s: f1 J) _- G mcasp->regs->DLBCTL = 0x00000000; // Not used
. ~1 R2 ^6 h: |# ]0 Y; e mcasp->regs->AMUTE = 0x00000000; // Not used
8 ^! b; i5 C7 X3 R. o8 ]9 x* o* t! N& y9 a, F/ b
/* Starting sections of the McASP*/
* s4 ?- K1 s0 {9 q1 ` mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 u) e0 H1 b4 ?( d0 B- r q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ! z4 z7 ^1 a# R6 G
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ _. Y( q. X# _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- h) Y P' _( ?; o" K
% \3 U# T$ g4 l$ f6 _1 ? mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # z8 X8 w9 n" X5 q; o! T/ |7 i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 g$ V5 J$ X. p7 W/ g mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
@! y: t$ Y3 L4 D# R/ G1 n: Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 ~) c; S& l/ u( z
4 T m8 J& U& X- h mcasp->regs->XSTAT = 0x0000ffff;
: r$ F+ M2 d" t% ^ mcasp->regs->RSTAT = 0x0000ffff;
% g( K: s$ F/ B& ?* ` h( a; B3 @& c& `& z( H
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, Z4 ^4 \% }1 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: l( o0 b# K: { i6 h2 Y2 G! }
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 y7 f6 Z( Z6 s" t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) p9 ~, P u- Y# W$ Y/ g, v7 M$ q" h' T9 p0 C
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 r1 @# s* @6 T- c0 d9 Z& b7 d& q mcasp->regs->XBUF5 = 0;; g4 F- v* e U, H
mcasp->regs->RBUF0 = 0;
& B9 L' f1 g; c
* S N$ D. q% L4 ]2 a- f4 E% p mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 q) ~! B! o; P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 B+ s+ C+ k. u. s' _) L: R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- D6 @" R# ]+ V- G- k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" o3 A3 W+ Y3 s3 V' Z
4 r& _4 e2 p3 _, ?7 j mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 C0 R {; |' Z, {8 f8 |5 _" i: b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- r5 @2 g9 Z! N- y( u$ j
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' C2 d" D9 U9 ~* Y* w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( }/ l8 o! I! Z
9 k& C/ u3 L( O4 n F; A/ S) y CSR = 0x0000;' O+ W- v% }$ ]
INTC_INTMUX1 = 0x3d;
3 _! M& R6 {9 ]) _" M, E- e7 v ISTP = (unsigned int)vectors;0 g! b( w7 S2 z
ICR = 0xFFF0; A. f( m+ h7 }/ f' M6 _* M3 I
IER |= 0x12; / q0 V8 x- P# c ?$ v
CSR |= 0x01;
* B; B/ `# a( b; s* ~; |
2 W: H9 G7 O y9 {9 d9 v# l
$ g) ]8 c. M5 I4 J: d* A% M, T
: z2 u4 J. }; _# N8 b还有就是两个输入输出函数:% u, f2 I# d! Z" j7 A( r8 }! _: r% H
void output_sample(Int32 out_data)6 a+ j. K/ F4 ^' R! F! Q
{+ D% j3 n. \$ b& j& S& |$ g
AIC31_data.uint = out_data;
; T& o* L$ S7 l0 _ MCASP1_XBUF5_32BIT = AIC31_data.uint;! Q- x/ R- Z% ?( }- t m! }. _+ G
}
# f& c6 ~1 Y* Q; G5 B: F$ @
: S' R4 h& n( Y; jInt32 input_sample(void)/ I' ~; p6 v$ Z f/ H% l7 |- i. o) B
{
) [" o6 B( A; `- p) L AIC31_data.uint = MCASP1_RBUF0_32BIT;
, J4 V* U! o) w& Q return (AIC31_data.uint);
4 a% h9 j- Y+ M0 a" r}
6 v) w! X/ C/ [2 g1 d; k* K4 H9 [/ |2 f- E7 d# Y" C
|
|