|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ V5 W9 n* o! Y$ A
main文件:; r6 o* j; e7 x$ X: H
interrupt void interrupt4(void) 3 W1 {# S5 w, d" ~0 a) h. M- k
{
: f0 w( L1 M0 h6 H { Uint32 sample;0 o0 Q, v1 Q4 o/ B' h
i% U! f, U" p$ m2 J
sample = input_sample(); // read L + R samples from ADC
: h# D+ S8 S" z- E* _) t2 w# Y output_sample(sample); // write L + R samples to DAC # ^. P7 `, _' ^3 a+ q, G9 Q1 n/ [5 k9 l
return;
, }8 {5 L0 ?$ _9 O1 l( ]6 h7 C}' [4 }! b) C+ x* X( `, b4 _
4 ? x+ t$ I& N7 F# t+ @int main( void )) u3 Z$ ~4 T4 N# m/ V
{
1 ~3 W1 x" _* t6 A9 ]. `$ @/ H$ i0 V; |" s/ |6 I
/* Initialize BSL */2 q: U. d$ [( n/ v" P8 m
EVMC6747_init( );
! o- j) V- P; W2 ?' O1 M3 U /* Call evmc6747_intr function */+ f: _! s# c O5 ]/ s
aic3106_init( ); N- a& w% S) M: Z
while(1);
$ b4 R r4 o1 t# M}
5 L: }+ B0 B& C' A) {4 l D! {
3 V4 }# n. `. ?* e5 T- a6 B8 ?9 X$ P
" g4 h& O7 E8 y& Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 w& [9 D& j/ j7 z
/* Initialize MCASP1 */
3 p8 \5 |0 ~1 _& _! o8 O1 ]+ G$ t mcasp = &MCASP_MODULE_1;/ x# O- J3 L, w2 o7 O( ?
mcasp->regs->GBLCTL = 0; // Reset+ l3 z3 A" g S: o3 R1 v
mcasp->regs->RGBLCTL = 0; // Reset RX0 I0 W ]6 s+ v3 b
mcasp->regs->XGBLCTL = 0; // Reset TX# q4 Z1 L( O& X3 l% l' ?5 u+ i
mcasp->regs->PWRDEMU = 1; // Free-running. Z# Y( T0 N9 x; i, i/ X
// configure McASP0 receive registers. |1 f) I A% m3 b, P# x4 \2 t
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
) V3 R2 t$ x' K- E" I7 A* \ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 m k6 ~6 B9 _& a3 K J( Z3 D
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. j' ^' r6 h0 u! c mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- p; P+ ?( l& s3 Q: X mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)7 O! w9 f$ j' K" Z6 b
mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ Q8 } v7 h/ Y# ]% w G4 K. e8 k6 l
mcasp->regs->RINTCTL = 0x00000000; // Not used
: B4 _' Y7 W5 v( c; L R. ] mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" e+ A8 ~6 b |: m4 ?- q
/ ^, S* q+ T. i' E. _ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 d" b% m1 U' ^4 U( W7 q; h
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) X2 e& t1 m) z" k: G( O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ s0 }* {. a8 B/ R) y; b S9 ?3 _ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) o4 f- @. e* V6 V# C! U% h
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK' N& ?) Z1 X9 Z1 o$ o3 W
mcasp->regs->XTDM = 0x00000003; // Slots 0,1 C) K H, B" g# E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
J0 n7 N6 n" a4 P. o mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 t, S' k9 q) z" D
* S) t( p' r: }, ]9 t mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- U, z2 C% P z3 f! j O2 i
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 s o. T$ M; A" O( q. L0 d% _- Z+ C
mcasp->regs->PFUNC = 0; // All MCASPs1 m; F5 c% l1 F, P: ]7 `
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ M5 z; x8 R5 e1 Z; |& F6 X: ]9 C$ I9 T$ S/ V- J! r( s6 E3 \
mcasp->regs->DITCTL = 0x00000000; // Not used
, Y( N. P! u9 l2 S6 e& _. R& q1 r# Y- B mcasp->regs->DLBCTL = 0x00000000; // Not used& a$ x$ s: X0 D7 r$ d- ?, f
mcasp->regs->AMUTE = 0x00000000; // Not used
' |( i0 `5 @- N- t* X. p
- v/ ^" I- q( M+ J# j0 M/* Starting sections of the McASP*/
$ P/ U! i, V6 W+ F5 b4 b9 I; r y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 E9 h% }5 D- x+ c8 w: K" `8 ~+ s- [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); * A3 m/ E9 f6 H
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 [2 s' T9 Y" X( E/ o2 @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ O) x; U+ n5 T: ^4 @' j( |$ C8 M: e& B5 L# H6 W
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& K1 j. O; P) c( }9 G9 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ g$ J5 b( h0 I* @9 H+ X- k; A( j mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; P1 u+ f) ~0 d8 i: T0 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* W1 [3 m8 c" q* q# o
R7 t+ ~( e" D N8 V \
mcasp->regs->XSTAT = 0x0000ffff;
y& c! h! ^4 M mcasp->regs->RSTAT = 0x0000ffff;
7 [. K" Y& U4 }+ Y; Y: V
) X9 M2 z* w6 {, A0 x$ c. A mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 g1 ]8 k3 h9 r) K# u# W8 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; E' ?8 c1 q* J, Q) w7 ] mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! v5 m* ?- a+ l; k" k+ V0 p" o1 ^. t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: k" z! M. D( t' ]+ i
% Z5 C5 w( ^2 O" F" ]& l( Y /* Write a 0, so that no underrun occurs after releasing the state machine */
5 l' E5 w1 q/ _, L" E mcasp->regs->XBUF5 = 0;
- Y1 V; @1 K5 ] mcasp->regs->RBUF0 = 0;
* z& _* d% [- R0 z4 P. W& Z; _# ^; a( ^: J. q: M
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ p7 ]/ Q' y: U! O- l& t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 \5 L$ x# v, ]1 H- O mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 E& X+ Y8 Z% o1 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 P) ~ b' {" T1 r) `( G" T0 E) `9 P! v0 N
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 c r0 }1 _: n% s3 z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# r+ o4 i# f: O
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; g) m" M# `4 k5 M! c! _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( l* R2 R( m5 x/ c2 I
( _* [0 J$ N7 ^) U* c
CSR = 0x0000;
& Q; L& F6 w6 M6 x1 V6 y4 G INTC_INTMUX1 = 0x3d;- L1 Z1 _( r( n+ o, R( Q5 t
ISTP = (unsigned int)vectors;
2 @" P9 x' b6 t4 l- _, v3 y ICR = 0xFFF0;
" {( C! V1 g! i7 p4 ` IER |= 0x12;
9 w7 G8 k' o# m( E) S" U8 A s2 s CSR |= 0x01; ( V. ~% s8 V6 S: ~( N$ K) n
/ |* Z+ o6 d; [; R
# y4 g* t0 R- ~/ k. v/ P/ p9 u% R1 U# C/ o
还有就是两个输入输出函数:9 o3 j6 l3 }; ]% Q
void output_sample(Int32 out_data)' q, B/ }5 S# u/ k2 c
{
( {$ U$ k+ h3 R. ]5 H" ` AIC31_data.uint = out_data; $ m3 w/ A$ z6 v3 b1 l# d
MCASP1_XBUF5_32BIT = AIC31_data.uint;4 y+ d+ V- p. t4 }( c) g. x% D
}. N9 ^$ Y' z' m$ `" P
( {% c, f& g" X5 k: L# d5 PInt32 input_sample(void)
! K6 N: X: ^* n* i{
4 T' C. i$ N4 E' D' d AIC31_data.uint = MCASP1_RBUF0_32BIT;3 N/ C; A6 J+ w3 E
return (AIC31_data.uint);
6 u% f+ ?6 m, j$ B* _) ?+ Z}: a; E, v4 F# b+ I2 ~) ?
. l8 G! s4 Y7 W& z" H
|
|