|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' x) _. i0 Z* H8 O" {5 g. y
main文件:
* O; j4 |! J8 l+ x+ Q# u- M7 H& w7 minterrupt void interrupt4(void) 7 z% J1 `- f$ e/ f8 ]+ G3 o7 q
{
- A8 P" f. E; u3 J* h% `8 F Uint32 sample;
& a( \1 B/ u2 G* x1 U8 n
0 ~6 Y- r0 z( V4 [5 H4 C sample = input_sample(); // read L + R samples from ADC* }( a- V/ y: H8 p& A
output_sample(sample); // write L + R samples to DAC
9 L9 h* ^# I% @, J return;) a# Y, `: F' |! m2 O
}- \/ N: V% a& p
9 u9 I& o/ |) W6 q8 Uint main( void )
! y, X) Z/ a$ l' m8 W{
3 ]) ~8 a6 u/ G, Q' Q* n9 H; _0 t0 ]$ ^( ?
/* Initialize BSL */
9 v% T( Z7 `9 p5 O: z, y( i EVMC6747_init( );
i# f, F6 `3 `* o9 R! C# D6 F /* Call evmc6747_intr function */$ v7 k: s6 y, o
aic3106_init( );
4 P& t3 Y W# q% a4 F h while(1);! a; t* w5 D m7 T4 \
}
/ O! T3 P3 D9 S. x7 l ~' J- Q
/ t5 P- H. |" q. E9 y: x( j& s$ y/ `& T6 A3 ~+ b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 T w# r- _, j4 q( J/* Initialize MCASP1 */' g4 o1 C0 F6 I. h( |
mcasp = &MCASP_MODULE_1;; @1 X" Z2 Q5 ]. F ?9 G. G* m
mcasp->regs->GBLCTL = 0; // Reset+ B0 ^9 l, X. @5 |: I( c3 ?3 U
mcasp->regs->RGBLCTL = 0; // Reset RX0 }, |: Z) z" F! D' ~
mcasp->regs->XGBLCTL = 0; // Reset TX
1 q/ W) M5 i- N* r( k4 n) T+ f mcasp->regs->PWRDEMU = 1; // Free-running( X+ _) A7 J! y
// configure McASP0 receive registers6 z3 r0 W1 C3 |
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! `9 \! H4 [; P1 w- z8 x6 L! @- m# V
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ q7 R" z" ^. B4 j/ a" Q' @ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word( ~) ~3 R+ y. f% f) K0 a# I1 y
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); @. z* A( Q! h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 u) s/ _+ G7 ^% A
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ B4 P+ e" K9 d) B mcasp->regs->RINTCTL = 0x00000000; // Not used% ^; K% U F2 H! C' _& H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 ~+ i0 O3 t$ K& o' l( ~
. Z, w: \ z9 T7 q/ k mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* \+ R3 U8 V9 s4 v9 v8 x# \ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 {! s! Z) b( u+ c: o3 Y. t
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( ?6 k2 w" i4 m" ]- i$ C mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# q- n M; u3 Q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: K% n; X! p9 p6 C6 @ mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ }' W# ?) k" a) C
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- R9 |2 ]% U B9 M7 s+ E1 b4 ^ s mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ U! ?% E7 G, x& K/ x
3 \* d% J$ r9 L9 g2 @9 c
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- M' A7 \7 C8 @# M mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 a4 `; U- L0 w/ i, O" i0 D8 |9 f- ^ mcasp->regs->PFUNC = 0; // All MCASPs* T6 `; o3 g1 a/ Z
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 k% ^0 E6 A2 A) B. i" H6 V
6 t& b) X5 ~) a2 m mcasp->regs->DITCTL = 0x00000000; // Not used6 i* I4 G) Y1 m) w! X% J* V6 I
mcasp->regs->DLBCTL = 0x00000000; // Not used- F \7 [' }, i& Z/ \1 r
mcasp->regs->AMUTE = 0x00000000; // Not used
$ t, Z% Z& ~ _& k6 Y
- A& m# J! |/ p- g# @& T" F, Q) @% Y/* Starting sections of the McASP*/
5 W. ^; q H3 X! u mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & Z2 B& c3 a$ N* a$ n! \' D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 _: x- ?0 w* K) l& R- P9 c- B mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" Y6 T& i _5 ^5 l! X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- \5 e: T; B( ]/ t8 K' J& z
' Q6 [" r- u! C* k/ E2 S! \
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 S, t+ S) U# I5 r) H, b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 C* [1 {: l# e) X% k1 H# V, Y! i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , }& p$ e F, W v& W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 X* E4 X' k7 R5 q( |
2 w1 S. X* A- o% V6 e D# q+ W mcasp->regs->XSTAT = 0x0000ffff;
( q4 S. `' F2 \" z' g8 L1 y9 ?9 J mcasp->regs->RSTAT = 0x0000ffff; , n: r7 |/ k1 h( r) k) d: O7 `0 M4 V
' K$ L$ i' K$ ^% x+ g. q8 ]7 N mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" S( e& v9 e: F% {0 {7 S/ {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% `# V$ t, ?8 \# o' O mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , q$ C9 v- R. V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! M: s# a! N: U. l
% T. A6 |( A3 u$ ^ /* Write a 0, so that no underrun occurs after releasing the state machine */
3 @% o' h) y7 }" h mcasp->regs->XBUF5 = 0;2 R) `7 f0 z; ^8 F, G8 X1 q* F
mcasp->regs->RBUF0 = 0;( n7 H3 X# N g) j) k; F& L7 `
9 S0 T9 V; B/ V; |! L mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 g! W5 n x5 D" _9 v, @& R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% T/ J% X" f2 o# l! }% e' \ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' X% m* [/ G$ D' H- p# B) s; N. a6 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" L) A) q- x, ~+ t" O
7 x' d0 @2 p. N, i' a9 p$ C( T8 [6 R mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ K P2 X4 G% Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& ~! v1 q! [- R- ]0 C
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 |! k1 j7 d# c8 g) d, [! `- ~ ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( ^! N8 V5 D3 Y7 L) c9 \# l
: G! i$ J7 c/ d7 @. A CSR = 0x0000;
0 t# Z/ m3 K1 u) |( i* f) l! Z- ^ INTC_INTMUX1 = 0x3d;
" S F! f* u# R ISTP = (unsigned int)vectors;
( ^, K9 s$ ?. N7 J/ P ICR = 0xFFF0; 7 ?1 q: z$ n+ E# Y# c
IER |= 0x12;
+ {; e2 ^3 G- u, ^' F. f CSR |= 0x01;
g& H/ [, R7 @# r1 Z
, ]$ }$ _- ]1 Q% p9 i/ f
# V4 |2 y5 n7 {+ L* q8 y4 P6 t- ?4 K; c9 P* S% p; S4 A' |
还有就是两个输入输出函数:' {! s& o9 W4 L; y7 o
void output_sample(Int32 out_data)% u$ o! H3 {. }0 \
{5 p h* T* X$ E- U' u) V( p" w5 C
AIC31_data.uint = out_data; 9 T% O3 s& J& G i4 R$ Y! g& k
MCASP1_XBUF5_32BIT = AIC31_data.uint;7 ^: G& s! S$ S4 B; |/ r" b& o# o
}) [; _; h- E# c# [( @, q# S$ z
3 U$ K/ X1 t" o1 a5 @6 n uInt32 input_sample(void)+ Z D+ u$ \. g0 Q7 s
{
) n1 p% h# X6 ]. X# y: t AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 }7 B- I* @. q' n& Z6 c0 T return (AIC31_data.uint);) {/ w; ~7 u( Q) ^$ ?2 w
}
: c: r: d1 D4 q% J" H1 y1 U
% I' G: j; s: ?# c$ r# E/ Y3 J/ o |
|