|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" H8 n: I+ r; z* {main文件:
/ E" v4 A4 D3 U/ M0 F0 Ointerrupt void interrupt4(void) ' Y$ A5 [# S; l( w4 _, o% O
{
: k. G6 F2 V$ m, v8 q Uint32 sample;
+ c. H+ o m3 S2 L2 I9 R$ D0 n. _: Z4 \& O+ y4 L/ s
sample = input_sample(); // read L + R samples from ADC
/ \6 g4 b5 f; y Z9 }: p output_sample(sample); // write L + R samples to DAC ; b1 t! M& I& G/ M! c7 p
return;
]8 G- z4 D# A/ V* @/ \}
) m/ r) c/ y! x* n" W: X9 V0 h' \. y# o' V1 G
int main( void )
# Y# t* {5 F4 A( C j# _{
$ ~ U$ o9 f" n! U+ b( n: ^
, ^8 u5 y- d$ _- S4 e" w, e /* Initialize BSL */
4 D: w9 @3 g# B! P1 P& f; F EVMC6747_init( );
2 U' K; I1 u! m5 ~6 C+ u /* Call evmc6747_intr function */3 g' {8 c* x+ m9 ?2 M& A1 _
aic3106_init( );0 m1 A5 C4 M4 _4 X+ M
while(1);9 ^# e. j& N, K7 q. G. b
}
. u# h, U7 \% \# w6 y3 D" D* k; S0 M2 n3 B* J0 W
, B6 `" [* z5 B* oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 g0 F3 C- F7 u+ I
/* Initialize MCASP1 */
) R" L: ^; R0 Z& ~/ a4 o z mcasp = &MCASP_MODULE_1;
: H$ O" n, e. X- O9 G. p) n mcasp->regs->GBLCTL = 0; // Reset
4 \, x: i/ g" Z- c2 A: y" E) ~ mcasp->regs->RGBLCTL = 0; // Reset RX
; x4 R' q9 v q6 C3 b, R r/ B mcasp->regs->XGBLCTL = 0; // Reset TX4 [* Q. ?0 D8 n0 {% {
mcasp->regs->PWRDEMU = 1; // Free-running; M* B- W: l- ?# U/ u: f
// configure McASP0 receive registers x' H9 N$ O) [4 i0 B' v. C7 b
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, D+ z- K' D& |2 `. i7 s& M- M
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 C. f! L+ K; k* G
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- L: N& t) E. `% M6 ^. j mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 E8 ?) D1 q2 ], |5 }5 C. J
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side). q$ n- {, g' G* Q8 @' @
mcasp->regs->RTDM = 0x00000003; // Slots 0,1( R8 z0 A7 ^1 f! t/ W$ |$ \
mcasp->regs->RINTCTL = 0x00000000; // Not used
! ?; j, q% W) z# R0 U mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 w" l7 i. h& j2 F: A2 P
" O9 c" T! J& j+ P" D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 t" Y( s4 ?7 Z9 X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# J# f- K( b+ w mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 i U1 |8 o& N* F3 @! i3 i
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 x, u/ v2 r1 M+ K3 T6 l; G mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
4 |2 J# C( E$ |% J3 A0 B mcasp->regs->XTDM = 0x00000003; // Slots 0,12 y, t$ }$ y X8 a
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
F9 R5 O% h' D) s# b mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, X/ L% N" t; g \, [- n% ?& v/ `1 Y
' x' {- i$ b: E% P' f- c: q( E mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN! w' L2 r5 t2 j. A0 U1 K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) G5 R" o% B- ~9 n, U `
mcasp->regs->PFUNC = 0; // All MCASPs7 S5 c. L: f0 N( V2 N7 g, X
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. y8 }- V6 k) H' M8 J/ ^, Q
. S) E4 C+ Y2 |' Q, [# h. t) s mcasp->regs->DITCTL = 0x00000000; // Not used
, E- n7 P8 s4 i+ n mcasp->regs->DLBCTL = 0x00000000; // Not used
$ e0 p1 p4 ^$ Q0 j! k" L, f( F mcasp->regs->AMUTE = 0x00000000; // Not used
9 I; e/ w1 b7 E3 P) m4 m
; S1 \$ @7 U% _/* Starting sections of the McASP*/
: K1 \' w& I7 O( q5 A mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 F- o7 ]$ l6 @' J+ a, x9 W: I ^; c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 S. Q0 \! j# M5 m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 @# P0 G) g& a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 k# B3 ?* }) S2 v" h/ }/ X$ D( y- o
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 h" a2 s1 U! x4 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 \1 R; c O7 B; L; g( ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
G; z- @5 P4 O# f6 |8 | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# x9 r! y+ X) l7 b. ?; y
+ i+ M) k( o z4 y' [6 t1 k* H mcasp->regs->XSTAT = 0x0000ffff; . b& e/ C9 c/ y" K. a
mcasp->regs->RSTAT = 0x0000ffff;
' g* d# M' v% O' [0 M0 ]# _' l% y3 x2 e3 O5 {- V/ G
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 b; c3 {, |- X6 y. m# |' r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 A2 O1 u( l5 Y* u
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 ?2 [$ Y9 o$ b }* ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# T( ]- P* I- Y7 A8 T+ h0 C
5 \0 C j0 t/ V
/* Write a 0, so that no underrun occurs after releasing the state machine */5 Q% B# c1 V, A. v9 y2 n8 y
mcasp->regs->XBUF5 = 0;6 x8 }" M/ W S* C3 e7 G
mcasp->regs->RBUF0 = 0;0 F$ C% a6 q) E
- \! `$ p( r2 v5 I z9 r& ?; r mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 ~/ Y0 `) \+ Q/ a) T1 Z% d" I- R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 E: [ B6 C/ b2 S0 E
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / W `4 r" u L( P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
@8 _$ B7 ~7 t. {/ m, l- E
# S7 n& r+ @% l+ ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 ?/ X- Q' Z! v9 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 M, S. C& i& k& g- f mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / Z' I" p! ^* ]: e) C' Y/ F2 \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 B' A+ {" l- N8 ?
- p2 l# n2 q) g K2 P
CSR = 0x0000;
4 `6 M$ O% N2 Y$ E INTC_INTMUX1 = 0x3d;3 V3 j, K0 @6 Y8 H
ISTP = (unsigned int)vectors;8 T3 e" M+ K1 o$ O
ICR = 0xFFF0; , u S! l. b0 n
IER |= 0x12;
8 g% N! m4 M% L) \( \- J3 P CSR |= 0x01;
) Z7 ~) b; T' L9 n, t
, Y" f! j+ ^3 i }8 t/ x% m+ e
/ Q; s ~" f; ~" E/ u8 P) y: s6 @
- X/ W5 N4 |1 L7 x# s$ T还有就是两个输入输出函数:
# A, M8 F* n* Kvoid output_sample(Int32 out_data)
7 _# ]3 G( e- u3 d% ~% l: W{
7 N8 F4 K- U9 F- i" Q s( S AIC31_data.uint = out_data; ! |: g; R9 ^2 Z4 \- ?+ T1 w' S# e
MCASP1_XBUF5_32BIT = AIC31_data.uint;! R- W! {- \2 k7 Z& ~/ [7 F
}
/ T. x% Z) F1 J4 H
7 c* u* v# i* n" K' G" D% ?Int32 input_sample(void)( Z+ y# R2 ~' b6 `2 `2 D$ F' N
{ W) s) D) {1 `: r8 \ i
AIC31_data.uint = MCASP1_RBUF0_32BIT;% B7 V( L* n' c7 J5 ~5 G
return (AIC31_data.uint);5 r, R/ V, ^! a8 X- C
}1 q* F+ B$ r1 @6 Y5 W* H* K; j: p; H! R
2 K, S3 J- \& Y0 m! \$ }& i
|
|