|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ o( l" @+ M/ I4 hmain文件:
# z8 l. y, P: I* i1 O3 finterrupt void interrupt4(void)
/ {% @# ?" ?& ^ k2 H{* ]4 R/ e) ~4 m; Z. p* `
Uint32 sample;
' [# Q% @) G& G$ d9 [( r( d( u) K
. \; G1 K! S1 [% q sample = input_sample(); // read L + R samples from ADC
6 O4 m4 F$ X. j8 t: g! Y. W' Q ^, W output_sample(sample); // write L + R samples to DAC 0 S7 i" p# [* Y; s5 Y: l, L
return;9 H/ q3 C4 _6 ]1 h1 q% }
}" b+ b4 M+ y5 r8 f
/ x/ p/ A* J- {* D4 @: O* ^
int main( void )8 j2 L) g* Q! x
{
: B& @4 F' j) f& s$ v5 n' o) N, I R) a) `$ ]: E
/* Initialize BSL */9 e. h7 v6 \( x B
EVMC6747_init( );& U% i4 q- T% z) X( b
/* Call evmc6747_intr function */: h& {# {3 O! n$ F( Q
aic3106_init( );9 U( n, c: @/ ^0 Z) Z; p
while(1);% A& N) P; c" C/ t0 [1 z
}
" z V( U5 v& X# V$ r. z' E' j- e$ {1 n: g% S$ q- X
+ R1 m0 B, ]( j! j& R. ~! T& b naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 P9 r. p" S0 z1 T9 _2 ]
/* Initialize MCASP1 */
) N8 S$ {+ c: G- f: i2 t mcasp = &MCASP_MODULE_1;
; ]) V: E0 {" K mcasp->regs->GBLCTL = 0; // Reset
. f; Y7 v: E0 q) }" p# M4 w mcasp->regs->RGBLCTL = 0; // Reset RX
, K& H" p) h6 z( K: L mcasp->regs->XGBLCTL = 0; // Reset TX
/ Q" Q, i5 u& _2 n2 q d mcasp->regs->PWRDEMU = 1; // Free-running# E* {+ }' X0 h: c
// configure McASP0 receive registers
; j& e. t, V, o% W6 I9 V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 T) \0 O( F6 l, u9 C9 @ T' A4 b mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& k7 P) m5 ~5 ~4 M4 { mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 Y# o8 S5 O8 B6 v2 K8 t$ [ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: o% W3 n+ D7 z$ `; n4 c; Y) E G% l. K mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- E' q9 I5 M0 C8 T- w& w mcasp->regs->RTDM = 0x00000003; // Slots 0,12 K( C5 U3 I) n' U$ W* H6 T
mcasp->regs->RINTCTL = 0x00000000; // Not used* W8 _, g* E; K
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 X- K& N/ q6 D0 C2 t$ ~) g5 T2 u/ b9 s! d, V
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 P' m5 |) z S8 ?0 e1 h
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- O! l9 @/ e Z" m" \) q* r y; P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' y9 ^/ i% E; S( W: y- [7 w mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 u2 H, S8 w$ m
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 e3 E9 K( f; t! S mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' W; a' @0 N t5 M mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
7 [* ?' y$ Z7 i9 x# @ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 L6 l; f! { P' t9 U2 h K D* u# I
7 ^4 c3 O+ l6 A% X mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ A. w6 F$ |& w: w
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
5 E5 F, u4 v7 F- q$ b, S- m# l mcasp->regs->PFUNC = 0; // All MCASPs R! f. Z/ q1 _, E9 b5 w
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ K# H" Z) P5 m1 B7 o
$ B: O2 M5 p! {( k3 h
mcasp->regs->DITCTL = 0x00000000; // Not used2 c8 R" Q( w) r( P- E. [3 q g
mcasp->regs->DLBCTL = 0x00000000; // Not used
7 m9 b6 o( C4 Y0 E7 q mcasp->regs->AMUTE = 0x00000000; // Not used: e( P2 j% l. z) A
: ?/ e( `5 w# M$ N8 B( a* Y$ R
/* Starting sections of the McASP*/
+ S% w# N v8 r7 ]; H" f; A# \# M+ i mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 {% t2 ]& ]: @, {6 j2 X+ {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); h2 A( R3 B$ P2 a4 F. d
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 U7 Z7 P4 Y) J9 B' J: |( m5 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 ~8 x1 b: T; p9 N& m
& l. p. F7 N" j3 e+ H) ~6 ~% V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 V% d; m: v9 C- `2 y h6 f. C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, [! p; @# O0 T2 }* N
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 m4 c3 d9 Y# b! [/ K5 d& P+ x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 E' j- F0 B! D8 e% I' K' k; w
7 s0 Q7 \6 d; u! {% y mcasp->regs->XSTAT = 0x0000ffff; . a0 k) Q1 } D
mcasp->regs->RSTAT = 0x0000ffff; $ n9 e" z) l' C. w
3 u% |) ]" ~7 Q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 h# e* Z9 Y5 ], f/ [& u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 j( a! m9 F' H5 @0 M
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; Q' n4 L# s8 r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); R& e4 G7 Q7 n2 v
4 u) @- o- Y. ~ Y2 J /* Write a 0, so that no underrun occurs after releasing the state machine */ n% N) ?0 M1 {, F+ Z7 y; m
mcasp->regs->XBUF5 = 0;9 U& g |3 U( k7 I1 y H
mcasp->regs->RBUF0 = 0;! Z2 e8 m# z2 j: ~
& @1 q, u9 e5 X9 N' b0 X mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; j- ^0 t* m' j8 _; w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: e& {" h% T) \, d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ p* D5 q& G6 [8 h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" @8 \# D/ }: ]
) @: p! X! _ ]' u+ G. ~: h mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ A0 P' o- {. a$ C! {$ c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 g6 k( a+ j6 v5 s- U! Q
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( z2 C1 @! m5 J. `% W2 r& r8 b" u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- P8 R! v$ U0 i; k% h1 l6 O* \
6 j7 n. j8 G- G6 Y# M$ e3 B% `8 @
CSR = 0x0000;/ f. L8 d/ | M8 ^! z
INTC_INTMUX1 = 0x3d;
* q# h) Q- n8 d1 M6 M1 K ISTP = (unsigned int)vectors;! z0 L6 A" y7 B, E4 W
ICR = 0xFFF0;
* K8 A3 d: l+ d+ q' f IER |= 0x12; 7 P% I5 `+ q% F0 E/ w
CSR |= 0x01; : P* \$ s1 j! P& p
& t- R* k1 {, u
3 k f$ m" M- O: {1 }- l3 r
9 H, E! G: G) w h( S D5 V还有就是两个输入输出函数:/ d! t0 U' ]0 t" j% k. v% U
void output_sample(Int32 out_data)
" t% K8 f, a' f) p{. e, ~+ Y& D0 w8 Q
AIC31_data.uint = out_data; - Y( s6 q# R9 p
MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 k! L' b: I8 T}& B5 O; E: m! Y$ r" \( \4 m
+ w) ?' l& U3 D3 H7 e& g5 C; ]3 i: HInt32 input_sample(void)
# T+ J/ F) h) y T0 |, _3 \{ ; |* k: f( v+ j* {# [
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 B/ p) X1 I/ N6 Q: V" K
return (AIC31_data.uint);
: f3 F. K5 t3 n% a( Y* |+ Y}: a" e+ E& ]# P* e7 O& t$ G- R
7 {5 k- Z, R) o, ] |
|