|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ g1 r$ Q+ |. x6 pmain文件:* y" ?+ @6 T7 Z# o9 w) F3 g6 a
interrupt void interrupt4(void) & |6 j* s# ~! o' L
{* J5 X v* J& s, f
Uint32 sample;- C& K. v) Z8 Q) E3 E
9 t; a$ `+ I8 ]) r2 j sample = input_sample(); // read L + R samples from ADC% E& O( @& W/ ^; Y# E. y: j* o G
output_sample(sample); // write L + R samples to DAC ) e' L- R# Y# O: \, x2 b9 E; `
return;
6 ^" ?9 ^$ U" {, t$ r/ C; L}
; ?3 u4 W, J7 s* E* {6 b
- `0 }8 S1 r9 U; o6 n! N1 {0 _int main( void )
. X f9 A& W( a) x F{0 K# z! y- V S- u
7 W; y& L5 K! P8 l; Y W
/* Initialize BSL */
+ C/ w3 S% s6 J `0 f EVMC6747_init( );5 q$ s. R: {" u4 y/ y
/* Call evmc6747_intr function */, n+ O' J& F( @! e
aic3106_init( );& D& |9 ~& C" u$ a @
while(1);: O& x. x" a! z) Y1 ?, J4 c
}5 V" ~$ o& K& `) d
; ~1 Z; L& i, \: C8 B7 M2 _' [( X4 Z p1 @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 D% L- D" G. ~5 T: n/* Initialize MCASP1 */5 e" P. B# E# e7 {& i; y
mcasp = &MCASP_MODULE_1;- x2 ?* t# f, t8 [$ Z$ ]
mcasp->regs->GBLCTL = 0; // Reset( d/ N e. k" y) c
mcasp->regs->RGBLCTL = 0; // Reset RX
9 G; D) @8 F8 ]7 q" @. x2 T+ J mcasp->regs->XGBLCTL = 0; // Reset TX
. B/ {# F4 O! O5 t" J mcasp->regs->PWRDEMU = 1; // Free-running
8 w) q O1 J3 i$ T% t; W // configure McASP0 receive registers
8 c2 N4 }. X4 N* K$ t; k mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 b0 W3 h1 ?( f& F% \9 q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( }# F/ i' J% M0 v3 Q0 w mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 k: f4 }5 W( O; k+ g/ B3 V
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 r. X" @ T, v
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 g e; H) U5 K& j5 X* A2 [( n mcasp->regs->RTDM = 0x00000003; // Slots 0,15 s! @4 [9 G& d2 G/ g C
mcasp->regs->RINTCTL = 0x00000000; // Not used
- Z7 u3 g9 P, z0 @7 | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 H& W/ ~1 g! o) c( i8 z/ g
B7 F g* B3 o mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. m( J9 M# Y5 s6 [3 c5 \ X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ }% W+ C& l' ?7 F mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 e7 |3 l ^4 n9 I9 F: E
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ I9 N1 V! W0 I! x% I( x" Z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. o; v w: Y' e6 S8 t3 C
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 q8 T. N: B& S; A1 [ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit( T1 T8 j0 x) ?5 a
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 O7 I5 {) R3 V" g3 K! }
, j; n+ E7 ], `
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN3 ~) `7 S1 U5 C: K" @
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
5 E7 O* ~$ \2 e; Z4 G mcasp->regs->PFUNC = 0; // All MCASPs# q. y, ]- s8 B
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 o. A: [2 @8 E h. P! V
$ K8 [1 J- n- `3 t+ E/ h3 S mcasp->regs->DITCTL = 0x00000000; // Not used2 |$ R/ E9 r2 V1 g3 q- Y
mcasp->regs->DLBCTL = 0x00000000; // Not used
5 R s9 L* w" a. E/ ^% e/ s! i mcasp->regs->AMUTE = 0x00000000; // Not used% D! i; x) l, P, S, v7 L7 A4 p
9 V3 A, s6 l% |/* Starting sections of the McASP*/, @/ c. h5 Q0 c' K0 j% ]" V5 z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : F7 Q7 y& l/ ^ i) V/ B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ j3 w3 W# w! e2 y3 T
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # w9 U8 R' Y/ i8 X: t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
y* ?* }& n _% O* X; s' @, n
6 W& g9 l) c7 }0 \3 ?4 F mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! m( k. T) C* Q# r3 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" Q: A0 f& R* u X& o8 {; M9 x mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" }' D1 b. i5 @7 i3 b. w$ Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 |& {" R6 R: f
& A" t+ ~0 c% u/ r% I! [7 U/ u( k mcasp->regs->XSTAT = 0x0000ffff; 8 W$ ~- _- g* U6 v: y
mcasp->regs->RSTAT = 0x0000ffff; 0 m0 R8 |1 h3 W O i: L0 b. b
8 x4 ?6 M) N* m mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 G5 Y- u( V7 w3 f/ P# n2 Y, ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 A7 e. z& @) g8 x5 w# | mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ _9 P3 l, J6 g) T4 f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ v; f" _1 ]6 h- N3 g1 T5 k) e3 l& w$ e+ x4 }7 a4 D7 R d
/* Write a 0, so that no underrun occurs after releasing the state machine */( P" F) _, u3 P3 L0 e N
mcasp->regs->XBUF5 = 0;& T6 l6 J' x; V4 O# N! {
mcasp->regs->RBUF0 = 0;
4 d4 V# [3 ?7 f) v7 _3 d1 ^* o- p
, K$ t/ H) }; E% S/ s. ? mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& ^# `* {5 A& B; }, y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. B+ U- O+ w( W, n
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* X6 T T2 }* ^$ _/ P2 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& [% M. E8 B0 } k9 R
0 b( I1 X4 Q8 f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : M: c$ d0 Z( v6 [% X$ A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
e" S7 K' Z" x mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ~) t! B. _" b/ E0 \) ?4 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" `; V7 O# H% E' {& t9 A
% C4 D: a( i' a$ L
CSR = 0x0000;
& o; Q g5 E& A INTC_INTMUX1 = 0x3d; P) \7 n6 z& Q8 q
ISTP = (unsigned int)vectors;
7 q+ T$ _% E6 _- ~ ICR = 0xFFF0;
. ^/ J3 C5 ?2 V4 a3 N IER |= 0x12;
; l; I# Z7 x7 t CSR |= 0x01;
3 F0 ] s' Q) l% c; _( ^( x# S
8 T# `" w4 p. V. X; |! i. G/ {9 z9 e0 Z
8 m, ^ e! b; l% ?* O还有就是两个输入输出函数:
* {2 v3 R: K, c. Z; V3 d" d" ~void output_sample(Int32 out_data). [* L4 ?: S9 M- D% r6 Y8 D
{. d3 q( B/ W T8 ^! }' e
AIC31_data.uint = out_data; % u" [# U4 b6 Q
MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 a/ J) F1 {$ k8 ~: o0 M, y}6 [7 E4 T; M; @
" w. y+ R9 }# d# LInt32 input_sample(void)
- _& H6 |. e/ g% q& f{
5 c5 O- [9 e' T7 {- e6 `2 P AIC31_data.uint = MCASP1_RBUF0_32BIT;; F* @- H* R% g; O! i x) K
return (AIC31_data.uint);
( r5 S# \7 ` Q* z5 [ V. e}9 G9 [6 S% y4 x& z& H8 M# k
( @: l( L) `" ]& t |
|