|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 h. r2 d2 k' h& T$ u9 l( {) qmain文件:
5 T8 B5 A9 J8 iinterrupt void interrupt4(void)
' i+ w2 A, K+ N/ F{' k! w- Y+ f3 j. G8 p/ @& {5 S
Uint32 sample;
- I! o+ p' J! c
( S8 Z. P D" V) N sample = input_sample(); // read L + R samples from ADC
! R' Y5 E, h9 O' p9 ]# w0 o output_sample(sample); // write L + R samples to DAC
) _' Y8 O Y; s1 u return;
, Q3 F* G8 l" j# H}
6 [: t+ D, o1 w. c) _6 U. M9 X2 e2 p
int main( void )) [; U0 t3 B' Y% |# c# {- @
{
$ G* U5 \9 N8 b. A- L, M8 d. _" N
! H3 N2 e1 b8 c4 W0 a) n /* Initialize BSL */2 o6 {' ?) w( d8 z
EVMC6747_init( );$ ]1 ^! ?- h4 I! k; {# m @
/* Call evmc6747_intr function */
8 E2 ?5 H i9 D8 S m aic3106_init( );2 G( s$ K {' I; g/ O0 [# Q
while(1);
/ M9 V% H3 k1 w9 ]1 x9 ]: m1 q4 _}
}' n: P/ G& q$ }7 p% ?) E4 p
( b& A X: [6 s$ G
6 G7 ~8 ^- h4 X. g5 vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 F% M) v; y9 O1 Y$ O# q: e/* Initialize MCASP1 */
! D) y1 d- R( C) p mcasp = &MCASP_MODULE_1;
1 S0 b/ C Z* h9 t% q. j$ S) u6 c mcasp->regs->GBLCTL = 0; // Reset& v* S1 @4 ^* V
mcasp->regs->RGBLCTL = 0; // Reset RX
' K8 ]: p9 Z+ A8 ] mcasp->regs->XGBLCTL = 0; // Reset TX
. H' @) {1 o1 f( Z% }2 N4 |6 a mcasp->regs->PWRDEMU = 1; // Free-running; U9 X% Q) d" G* R# c9 _9 [+ [
// configure McASP0 receive registers0 M; |2 L; ^1 I, v% T
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* F4 w; K( ?- U! _* u ^/ Y* c1 f mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) ~4 [/ B0 _, T
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 q$ |0 I/ S" N: h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 G9 I: ]( k% R; ~ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 [/ N- g5 P+ }$ E. ~8 O* g5 s* } mcasp->regs->RTDM = 0x00000003; // Slots 0,1
: A- ]# |+ Q% Z* E mcasp->regs->RINTCTL = 0x00000000; // Not used
6 c, U6 g1 z: P; l3 r& X% B mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* a; V( d9 \. m) ^! R% R
$ _! V, y, s; r @" v0 j* f! z! { mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- N3 y8 t, s3 g1 A, S0 a9 q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! z3 ^2 @+ O' f( y( L mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 s# v' c3 `! R( J4 e4 m! p4 l( a+ {) e
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 k, Q: N! p8 ^2 C9 D, r
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; w7 k" Z# [1 C7 g% G% W6 e% W
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
! I! {5 X$ t, w# F mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: S! ~- ^, D5 o( W; d. \! j mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 c+ Q0 y! R/ q5 O# @
, ^( c+ P3 L; j3 N2 \4 d1 ^4 y$ X
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 O1 _& Z+ `" j2 A$ d" { mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 m2 ?8 `# g y' { mcasp->regs->PFUNC = 0; // All MCASPs* Q( o+ t+ @4 B0 M
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
]1 u3 P, n# p; d" ]9 h. g
, ]6 \( A* l0 ]4 t mcasp->regs->DITCTL = 0x00000000; // Not used
# W' q# ^ D2 L3 {" I5 \ mcasp->regs->DLBCTL = 0x00000000; // Not used
( A5 H, _2 e- _/ P* Y- W! { mcasp->regs->AMUTE = 0x00000000; // Not used8 K+ k! g3 |7 X) n! T& o% f
) i9 n1 @) T: x% k/* Starting sections of the McASP*/5 j, @" P3 }) @# i1 e
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 a% N- T) n" A$ W4 o- ~ s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; @4 F' e6 s9 ]# s# }' I- b
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. m, o: h& u0 l7 r$ ?6 ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& c+ w& m( \' E9 Z( ~& v
4 V% l3 T1 n2 x" Z2 v mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! O# ?8 i; _. c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 ?; x# X* P& k/ ?% _
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) @- H9 b8 m( @- L5 i9 Y5 @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 z" e- ]# G2 B
, j1 d( p5 h+ l: [ mcasp->regs->XSTAT = 0x0000ffff;
# f; I1 `. _- u l* v ` mcasp->regs->RSTAT = 0x0000ffff; - d9 n, T7 [- j! W2 P! M* s
/ l! q/ s: l1 E% F9 k
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% i- e" O, N! z. I+ v W! o" J8 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ m+ g& l: b* N ] mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 M' G- W& |: O a, ~+ j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ I* u$ N2 R; u# {# M3 K
9 x/ r& d! L1 Q. F /* Write a 0, so that no underrun occurs after releasing the state machine */1 o- O! b( s/ C2 X/ U
mcasp->regs->XBUF5 = 0;: ^7 K, H0 M( T9 x- r
mcasp->regs->RBUF0 = 0;
* M$ E0 H$ G7 y' x# C
8 ]3 H3 V+ T. f: a' Y, ? mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
V( G: Z. i A8 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 X4 M& B3 x T/ I/ m mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' P0 ]5 v- U) c3 ~ r( [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- a! u& j: N4 Y5 ^ s/ V9 g. k# p/ X* ]. r3 G
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 t4 y8 l* S: _# J) p0 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: T0 P5 n8 {, X5 B2 K- W mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 N" N: D- p9 u U1 O' [& Y( A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; m! I+ R; |( v
$ p+ h. ^. |' D4 m/ U5 { CSR = 0x0000;
0 D6 L* y- s$ q$ B& n, J INTC_INTMUX1 = 0x3d;, N. w/ E5 o3 y
ISTP = (unsigned int)vectors;
& ~# Y) L" T$ b: y ICR = 0xFFF0; * A' X/ L, p' E' f% t
IER |= 0x12; ) c. l" }6 j: y2 K8 v7 m$ l! K
CSR |= 0x01; 9 t" O: S* R# u; C
/ H! n5 @# l+ _" J: `+ f$ a5 b- Z; H ?; M& w$ ]+ N
+ O M% n5 z% J5 W" l V$ v/ M
还有就是两个输入输出函数:, T \& c) f6 s' g _( ~& L
void output_sample(Int32 out_data)
; g# k# h7 A3 }) ^. m; g{: g: p0 x; B) {
AIC31_data.uint = out_data; 6 [5 J/ }2 m: k0 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;8 W( h5 v- o- t% q- _2 c- r
}5 \5 B9 K& d/ [$ {7 ^
7 V1 k. n) x L' X- l pInt32 input_sample(void)/ K. G4 O. k7 ^8 k
{ 2 s* K4 d$ C: y, f" ]2 N
AIC31_data.uint = MCASP1_RBUF0_32BIT;+ Q3 |* d' \3 l3 z# F& d4 U
return (AIC31_data.uint);$ o6 D/ o. t6 A6 M0 U7 P" r* b9 b
}
% g1 P, s C" I
0 j! g1 Z+ R V, g5 k1 i3 r |
|