|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! w) k0 W. l9 f- D2 d) bmain文件:
7 Q* w! i7 G4 ]" F- ?8 M" vinterrupt void interrupt4(void)
& X! j: [$ H: p/ g, H! } @{0 |% ]# B/ G( A% b/ J
Uint32 sample; u- F* {, v1 b8 @4 m
- k8 k& t; P8 v3 E sample = input_sample(); // read L + R samples from ADC
+ Z8 p* j @2 D0 P0 ^ output_sample(sample); // write L + R samples to DAC
- t4 v5 r' ?6 @7 x2 I: B0 d return;
& w7 k. F! G/ _8 p# E}6 O Z% y' d$ W2 o" a1 d4 i
7 \; K4 w8 B; I. F$ e$ Aint main( void )
Q8 T$ _ u! W3 s/ _6 k7 ~- l& X2 I* L{
0 _1 R5 L& i$ d( g) @
) _: J6 t7 H5 m) c8 p# U7 X /* Initialize BSL */
7 ]! B/ D% V, R+ t6 { EVMC6747_init( );
0 c+ s/ E* |" s8 H2 n/ _ /* Call evmc6747_intr function */1 b% p, o/ B" m. s1 y y
aic3106_init( );
! L% e! H" p0 q# u2 u$ K6 X% P while(1);0 n# H2 _% ?, G' u! `
}+ t# U/ ^5 J$ r- E7 p' K
p' q/ u2 g' `6 m2 ?+ K
5 f. n0 H; @+ ]+ h: t% Q8 Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& A; C+ f R1 Y$ \5 R# {
/* Initialize MCASP1 */
. d9 @, Z/ G5 K- T* J mcasp = &MCASP_MODULE_1;
6 G, U$ c$ q# k# v* Z mcasp->regs->GBLCTL = 0; // Reset
; k/ g' ~% A8 F4 D q8 \5 c: [1 _ mcasp->regs->RGBLCTL = 0; // Reset RX
0 q$ V2 u# R1 l$ C+ U. n) k mcasp->regs->XGBLCTL = 0; // Reset TX2 I. w" z8 z5 e: T8 L% U
mcasp->regs->PWRDEMU = 1; // Free-running
6 X5 |3 `% i8 n( }8 Y // configure McASP0 receive registers$ J# g8 q" s. V! ?4 N- [
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" s9 @% Z- X$ J7 e: y: i! x
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 o' o- W" f/ ?( }2 ~8 G
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; F$ N* \+ C5 ?3 X1 K" Y+ R: o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); r8 e4 f7 V! t0 a7 ?' P6 a
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 A& d- _* C. l; O1 E( a mcasp->regs->RTDM = 0x00000003; // Slots 0,15 R. c' i& E0 A }* q- {2 k' J8 x4 }
mcasp->regs->RINTCTL = 0x00000000; // Not used
( ~3 P3 y( b6 h8 B9 E mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% h* E* E1 o+ W2 }! @/ q$ t# |5 g9 Q. ]7 s' c1 i7 w4 b( k& [* u
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) y) F7 W8 a8 {& O. c
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 ~5 f) Q# `& {4 }& N' c mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" y& c; {1 [! H/ V
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 j* b! D7 X- b6 t% r mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ y2 |' x C. D2 N7 Z/ B, g |* v7 @- J
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) n6 _& \2 |/ e# Y& a; r( N$ G mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ ^5 B4 e$ T6 `& t! v
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" G& y4 c) ? j& v# a
4 s$ A; f$ r" Z+ i$ J mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ p+ c9 u, |: r( y- j
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 a2 n& _3 \6 p" {3 Q, ` mcasp->regs->PFUNC = 0; // All MCASPs
6 g+ H2 `6 a& g5 m7 z/ W8 @+ {+ [/ f mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: T+ R3 o4 s- u
: {. g' r4 W# t$ s6 w mcasp->regs->DITCTL = 0x00000000; // Not used
4 o& S, C0 H% Y4 u0 U mcasp->regs->DLBCTL = 0x00000000; // Not used3 {9 A/ n5 b2 W2 V
mcasp->regs->AMUTE = 0x00000000; // Not used
9 D( j3 D, A& }# m$ Z9 b" u6 c7 X) _/ @# f( O0 K0 e/ Y& R# x0 C
/* Starting sections of the McASP*/5 D& e2 f' d7 X; V( ]
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 b$ ^; L, S) o9 @6 A( y" Q: L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 2 y9 W5 B3 S# T5 F( O1 P! P. z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 @2 s+ t4 P+ V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( C2 ~2 w' P9 y2 o/ U( p
& I7 }! }9 O6 [2 `* L mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; ~, h. \. i! Z% [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 |2 ^1 E# U5 c
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 v9 s. Q" U0 Y1 l9 _) v4 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 [: l Z d A
6 p- h# B' B, k7 Z% v4 v" @
mcasp->regs->XSTAT = 0x0000ffff; / k' U' c4 q) K5 M, Q
mcasp->regs->RSTAT = 0x0000ffff; : Q1 C, [# A$ J; p+ }9 o5 `
3 X& X& e( B, L mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 C K/ w0 [0 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 ~: g) _# ?8 _# ~* w
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / l! W9 X& C, S" x- @$ r$ D* `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" F/ ?8 V' k! i9 \: a+ m
) `( \. N0 o$ C e$ [0 l# O) ^; j /* Write a 0, so that no underrun occurs after releasing the state machine */
; t: c! \ f) _$ B0 Y1 v* C$ S mcasp->regs->XBUF5 = 0;
3 D! b& T" P6 P5 R% L7 w mcasp->regs->RBUF0 = 0;
. L! R ]8 \. ?4 e' j7 K* ?3 r9 v6 M8 q" Z& Z3 m- Q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . U( p: o+ v. I$ M9 x N; N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- ?3 y3 z* U# ?' x3 y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ I2 d. o, _. U4 e+ F m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# P, Q! O9 d2 t* G6 Z& b& U" ?6 ]* B; Y% v' V) Y5 |
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ w d; v2 q6 h* Y- S3 E S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 M4 v0 L( |2 [6 u, h& Y8 A( V
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! N0 w* T" \- r; c+ Y I1 @# Z& E5 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' y, b' T" E7 {4 h$ w6 e. _% M/ e' K0 X/ y3 m; i! m1 h) ^
CSR = 0x0000;
. n% |7 L0 o# L5 \ INTC_INTMUX1 = 0x3d;
! k! A4 O1 Z; n3 G ISTP = (unsigned int)vectors;
g* E5 _" J. Z- F9 G" R ICR = 0xFFF0; 1 I& C% `" Y8 P+ f" X
IER |= 0x12; ( G# K9 D. {4 i- Z) b. R
CSR |= 0x01; - Y& R9 l/ S$ H% K/ l4 e
4 M3 Y/ d. M; o, H0 X/ p4 D# c& J7 S$ w# S, i
0 I0 `$ n% ]$ F$ A, P% A- F e
还有就是两个输入输出函数:5 W& f2 l3 n1 B
void output_sample(Int32 out_data)
6 D6 I' n: g2 j) K" T# L{
3 y! \) d+ s- ]) x AIC31_data.uint = out_data;
. r" Q0 x4 n2 Q% h2 h MCASP1_XBUF5_32BIT = AIC31_data.uint;$ w8 {- Q: C1 C* t( f; o5 `2 [7 e* Y) U
}& Y8 @5 Q# \" z& \8 \9 g0 e2 t, |
! w) r; O; [) x. N1 w
Int32 input_sample(void)& j( x' d' a7 } H. i& Q+ o
{
, v$ Z7 y5 h+ A8 q0 p: k8 H2 A5 Y6 g AIC31_data.uint = MCASP1_RBUF0_32BIT;- @$ f r1 F9 n$ ? a
return (AIC31_data.uint);
( a0 O r: I$ I5 t, V/ F. I}
6 I6 e; J: ?) [+ Y9 v1 i D! | u( ]0 d9 {/ B( _
|
|