|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% ?" W' I/ ~' F1 `9 F" U0 tmain文件:
6 ?) g. r5 D7 w! s( N9 f+ \% Jinterrupt void interrupt4(void) 2 p8 P3 g9 `% h0 H) D
{
3 C/ F2 f# ?* s Uint32 sample;5 K' S8 T' P" _) T! x9 M G
9 P* k2 u5 w% N! r5 R( m
sample = input_sample(); // read L + R samples from ADC3 [% N: P) H3 N! y1 H9 N: F
output_sample(sample); // write L + R samples to DAC " g2 S: u Y3 u: M
return;6 c( o+ i! L. P0 B( r3 g7 ]
}7 `7 _8 c$ Z" y
$ S: g8 R5 k. K' Y8 E" U2 vint main( void )" b# C8 T: b Z4 u
{8 A5 P8 u! V4 k \, A
# K' Q+ @5 U* f" u /* Initialize BSL */
/ H" U( P" C' e2 h; Y% `9 }; o EVMC6747_init( );
- a0 B2 ?+ `0 y! h7 Z4 Z& D4 @2 [0 t/ s /* Call evmc6747_intr function */
X2 F% t$ ]! Y$ x" ~+ u7 C aic3106_init( );4 a) T& V6 h" a' Z) w$ J
while(1);* j: m N* r* C V3 w+ g
}( h; j6 H$ Q! ]( f3 Q C7 U
7 ?; V" d% ^/ q- t2 K8 ?) k" i2 Q5 M$ V: w' x. w- a/ R t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 b" _7 k, l, s' N1 { D- p) v/* Initialize MCASP1 */* }$ c& g! \% J0 Y0 B2 G9 F
mcasp = &MCASP_MODULE_1;
9 d/ q3 f7 l+ x2 o8 M! b0 e2 a mcasp->regs->GBLCTL = 0; // Reset% T5 Q7 @1 {8 a6 r$ e) c& q# A, {
mcasp->regs->RGBLCTL = 0; // Reset RX0 j, x; ?* g; [5 W0 q" M: ?6 e
mcasp->regs->XGBLCTL = 0; // Reset TX$ _ B) o" n: }* [3 c2 P( M
mcasp->regs->PWRDEMU = 1; // Free-running
# J: C2 b- H. Q. C // configure McASP0 receive registers' j, u# W# g% Y' x8 G) z, f. H
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 z5 U# |0 l# Q; e9 a( x) o- X mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( N% ]6 @; Z0 h3 d0 A% Z3 d. U mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% B1 v/ I0 A6 h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 z" d# Z+ T; ^% w, t+ X$ ]; w; O5 w& n* ~
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 J' Q f5 x% L! j0 m! o/ B
mcasp->regs->RTDM = 0x00000003; // Slots 0,1: w+ ~( s; n# O
mcasp->regs->RINTCTL = 0x00000000; // Not used# D( H. l' ^- j" a. M
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# U- H1 w0 c7 c; w( B
- X7 }: {7 j# H8 @0 C3 Y% N$ C# @. d mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& [9 y6 V* S" ?" ~) G) q, @ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 s8 z( l$ V# G: F U# k mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% @7 t* R$ u& r5 u/ T' w mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- ^0 L* u; p2 a mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: u9 U7 J" a; T! r1 S& R/ Q: ~8 M
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. F/ G& j+ r- N$ v1 a mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
9 L* E! v5 i; Q- ` mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 X! ]# a, Y$ C6 v
( ^- R3 F1 j' q* B$ M mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' S: B% L. R$ E5 W4 P" U- h$ e
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. u* l7 X0 E* x8 S7 q! ^ mcasp->regs->PFUNC = 0; // All MCASPs
9 X# G1 A' Q9 A' c& @9 T* G mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- R+ a$ N* ?3 O; V6 V
; ~) \7 H$ M* P# e( @( F; t$ X mcasp->regs->DITCTL = 0x00000000; // Not used
9 R- h) ?; w7 M' x. D mcasp->regs->DLBCTL = 0x00000000; // Not used
$ C& U/ q H; A! M3 K' e" \ G l mcasp->regs->AMUTE = 0x00000000; // Not used3 V( A5 y( g/ m1 J+ \
' H: V" M1 W& u3 J! Q3 f+ M& ], N/* Starting sections of the McASP*/- K8 l) g6 N* q" B2 \6 l
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 l: Y) P' v4 n' K% y; V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % }" N. H/ f1 [
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; U6 h* K* E* K D, P+ P9 r" _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 ^) _1 E& P8 c+ U0 c9 ^6 C
5 a5 v: e3 r q2 M# N9 E mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 i, N. Q$ d" O3 f) E) o2 L z* a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( V; s3 ^8 _7 v" v5 |- }$ [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 Z: s! y+ L# F$ L. }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* H5 M+ w" p) v1 {) p; N4 ^% E D1 R/ v. w- f I* Z
mcasp->regs->XSTAT = 0x0000ffff; 0 F- C1 S# `0 W* g, |8 k
mcasp->regs->RSTAT = 0x0000ffff; 4 X/ D2 G, w+ r. O j: _
! E+ |; U3 g% E8 Z2 J! P5 \+ W, [
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: [9 K4 q* X! C) _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. r2 M/ S5 b7 z/ s) v" z% i/ T
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 b6 @1 }# t1 a: V$ A; Q2 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% ^1 f2 I/ b. t7 p5 R
% E3 M. C6 }5 v( }3 O8 t2 E$ s* ^
/* Write a 0, so that no underrun occurs after releasing the state machine */5 w8 v* J4 {0 C8 D9 M$ O/ X
mcasp->regs->XBUF5 = 0;
% d( L9 K( m6 @0 c1 A r! g( } mcasp->regs->RBUF0 = 0;9 u4 l5 b0 Q9 S7 d- I: b5 C; a
) h$ g( p" N& e5 J
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # k) g- i9 [& [- ?/ N+ `: b/ X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ F4 e! f0 S) c, B/ W( ]& j
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 r( J- @8 X0 N: A" [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 Z) W# I4 O# U
0 t5 h4 U! ~4 I* ~
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . A- f9 D( e9 I0 z% u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, k+ j8 F# a% L# W, ]3 n& A: P- w/ c
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 ]: U! {; t$ b# D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 b! Y& Z8 y y: D, Y# U
- Z) `% k6 ^( p$ q) x$ v! O, @
CSR = 0x0000;5 V. ]' g% V7 C. E4 |1 B+ b
INTC_INTMUX1 = 0x3d;
# G* k! M& ~2 N, t3 w' g/ V: N ISTP = (unsigned int)vectors;" |' H0 F A! R, b
ICR = 0xFFF0;
5 S- G7 ]6 j5 s2 t6 C! x# y IER |= 0x12; 0 W u4 ~+ c5 i$ {9 \
CSR |= 0x01; 3 [% j% q/ m4 n
# W# e3 |( e b" j9 ^, i
8 Y: x5 h* \4 m! f9 V/ J
2 j- s' x9 {0 x, r# D8 h还有就是两个输入输出函数:3 [5 F: ~/ z# ]
void output_sample(Int32 out_data)
% {% G. q6 J7 T4 x( i2 E1 t9 K F{
" b; r+ x+ S# e w$ `% e) N AIC31_data.uint = out_data;
7 \8 A' A2 ]9 ]6 I6 Y% }- M7 G MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 S) J. W- [$ [/ z( `4 m; P: [4 f5 P}
8 G }$ L1 k: u3 M
2 `* ~7 T: {* N3 m' PInt32 input_sample(void)
) Z3 }' H. S1 p! R0 E{
6 o' @9 q8 U. o& t1 l AIC31_data.uint = MCASP1_RBUF0_32BIT;, S& m6 l" q3 h
return (AIC31_data.uint);
8 I6 b% h* j4 @2 @* y/ ]}
2 T4 E9 a" H9 I! O3 X# T8 O9 t) Z# Y8 |6 Q' B, c# y5 \ ]
|
|