|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 u) n4 L4 _" C3 _- v
main文件:
+ c! f2 v7 A" Einterrupt void interrupt4(void) ) O& d |' E1 i: `7 @; x
{
1 P# D8 }. [- Z( \) s% J( Z Uint32 sample;
4 w$ G) L7 B% m( `2 {5 K5 P6 [8 T6 D$ J9 R+ v, y
sample = input_sample(); // read L + R samples from ADC
2 T2 @% f. d- e8 o5 n output_sample(sample); // write L + R samples to DAC
" L4 k/ h) S9 I3 V/ A return;4 v) F: _; d) e' ^' n% m$ }0 m: x
}6 n1 R' E) E+ ~+ z0 P
j1 {2 S& {/ _. W, m6 |% F @; S
int main( void )
" A, Z& X4 L M' E' V) \{8 T: z/ R7 d. r9 z3 S" A0 N
* ?; [6 V J [% l4 ~
/* Initialize BSL */4 U ~5 |( @5 t C1 n+ p5 y+ H
EVMC6747_init( );# q& _- n$ r7 Q& j. f+ h
/* Call evmc6747_intr function */
6 K) q! X' A, \8 E) R1 m4 y aic3106_init( );
& W: r7 F5 ~; ~& E while(1);# I7 k0 D' n* }4 G m
}
: M' [! I" [- E2 y
! b/ l! Y P- J6 K$ `4 S& c( r. y2 ~+ w3 U7 V/ m. J2 |, J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 r2 h3 U" X) W* B% ~/* Initialize MCASP1 */
. _9 W" M% W. l; C4 [: M mcasp = &MCASP_MODULE_1;' o5 p/ R+ k/ A/ [3 D+ }) s
mcasp->regs->GBLCTL = 0; // Reset
. o9 U% W& l: b0 z( `% t6 x8 X mcasp->regs->RGBLCTL = 0; // Reset RX; p O0 U6 y y" E+ e
mcasp->regs->XGBLCTL = 0; // Reset TX
/ ]) m8 J3 P. m6 ^% O }0 {7 ^ mcasp->regs->PWRDEMU = 1; // Free-running- K# j1 p$ k' Z- R
// configure McASP0 receive registers) C+ Z. p6 o; F: p# r- _6 Y
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( }1 }9 m* T& K9 x
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 S- K# t& H$ l7 z2 q" c/ V
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ S0 R) _2 c7 ~6 U) o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( w5 p) B+ U v# S* f; A
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 n" D) L0 g8 D mcasp->regs->RTDM = 0x00000003; // Slots 0,1# U# ~% \' f% n
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 x6 ]7 A+ Q, Z, _5 h! }/ u mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 N* Q" |3 ~) b+ X# A% O. y3 `% d8 S* k. n( ?
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 ?- h) B9 O2 t mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 b, p2 t2 F3 e9 p8 d# a" [$ l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. d* \. W9 S2 Y: Q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 H- R! k C3 z, g mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% [5 v8 P% h" q% h; ]" n mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. v5 x' V5 @2 Q9 M$ f4 C; d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
9 F9 R& P1 c" w2 ~* a5 ]& p mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 z: W6 R( c5 U% ?0 F0 _' F* R
6 O2 D8 b, j2 l8 L$ U" v* i mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN! G! u6 t8 |# j _* a; M9 a( g- n
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' k+ {5 n5 s3 F! x mcasp->regs->PFUNC = 0; // All MCASPs
" W+ P/ [& b% R, V mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* V0 _1 e$ s# P6 j. r
6 |) P0 O; {( ]; Z/ |) S8 H mcasp->regs->DITCTL = 0x00000000; // Not used
, z2 d2 i' u& P. k mcasp->regs->DLBCTL = 0x00000000; // Not used
! m/ Z, W4 b* S; [$ a, e mcasp->regs->AMUTE = 0x00000000; // Not used
) ^7 Y7 i: G1 @5 ^0 Q, G1 u; c
: M* u8 k0 M* |: P; M5 p1 K: U, P$ Q/* Starting sections of the McASP*/
! I2 o5 X; \+ g. a$ P mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , N! F; v- O' S; u+ n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / [6 p, {1 b9 v" Q7 ]
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 l/ ]) H) Q0 v& w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 t' c0 T/ O/ G c1 V! r3 j$ e# s
w9 [( K7 `6 s1 D# p
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / Q8 y" s% B/ m! K d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 {% v; c* k' V/ K( u
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # R' t' M |0 }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, p$ j' T" Z* f; k( C3 a
+ c V0 B+ A9 m" g% H& E' _: ~; R; K- I
mcasp->regs->XSTAT = 0x0000ffff;
) V3 c& P6 S- J mcasp->regs->RSTAT = 0x0000ffff;
; f5 v$ o3 K, h3 r2 b% |0 { m' b0 ^) Q, E5 C# X, k
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 I$ T; F0 W3 u, ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 z. C9 R2 P4 F' _" u( O @ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 t' Y6 C9 {0 i0 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 p" ?6 g9 ]- a: o9 \
+ E* B! Y( X& q5 e
/* Write a 0, so that no underrun occurs after releasing the state machine */+ @- g/ Y1 |0 s: T0 v
mcasp->regs->XBUF5 = 0;
/ j1 h1 d' M/ E7 |/ D0 N mcasp->regs->RBUF0 = 0;0 S7 _3 C3 v8 u- S
* f! e/ _7 c8 S) o& T mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( R2 G( q4 {+ L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 e; S) W5 q# W v F9 G mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ U9 B9 |: U9 h) h* H z; M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 h/ r( A3 U9 v; S% m1 A$ N" V
/ X9 X6 ~/ P2 h mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* ?0 R, q7 ?& H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 r( \; E+ x$ d/ K7 g4 j5 }7 N
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; r' Z$ B6 y- R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON ); y* V; h' m$ v$ }4 @! O
9 A/ b6 z. _$ o
CSR = 0x0000;9 o) G' |2 c; {+ g
INTC_INTMUX1 = 0x3d;
7 d2 @8 i# o$ T2 m4 `; y ISTP = (unsigned int)vectors;
4 _) O/ N/ v6 {% X) K ICR = 0xFFF0;
6 u$ m* K5 R3 C9 O" l: U1 | IER |= 0x12;
2 w) h4 T3 B7 E4 ?* `# r CSR |= 0x01; ) Q0 P7 }6 ~7 ^0 K& ~
& a, |( l8 ^- F# c6 F. A' h$ T; N
2 }4 X d4 G- t$ E- g* c
还有就是两个输入输出函数:
8 w5 W) N: @5 P* J; H [void output_sample(Int32 out_data)
- q8 y5 V3 ~0 j- H; l8 K{* u, O; z6 Z& Y9 l3 R
AIC31_data.uint = out_data; 9 _) y9 B1 a- ^# j
MCASP1_XBUF5_32BIT = AIC31_data.uint;
; x; s% d1 U5 g- X" A}
, G& I1 v2 b: _! Z. Y" F9 a- {9 f V. N0 W* Q5 g
Int32 input_sample(void): i& H' X, f# R9 Y9 E. U* `
{
7 i: k$ R% `, S AIC31_data.uint = MCASP1_RBUF0_32BIT;
, s" ?. d9 F; H return (AIC31_data.uint);
) z: }) |5 W# \. l, q+ U6 w, y}
8 k9 r2 i1 o. q( f, p' {3 d
6 x$ A3 d2 ?/ q2 Z |
|