|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) F4 W7 f$ z2 Amain文件:
x1 i- d. D) Y$ R4 rinterrupt void interrupt4(void) $ s9 O4 E0 l! j/ P6 i
{
1 h2 @8 R: ]2 |6 H Uint32 sample;
9 V) V4 k: m( m( @! ^8 q: c' F$ x8 a
sample = input_sample(); // read L + R samples from ADC
3 z. S8 Y" l; a! n" C5 S& \0 E output_sample(sample); // write L + R samples to DAC # E" P. @2 r& r' v" c e3 \
return;
3 o' q4 n6 ~/ N9 A5 t! q% p6 Q}
8 N! a. Z: t$ h( Z
0 v6 x3 v( P, k6 X' _int main( void ): i8 T& S0 g: ^" m P, X1 g
{ d4 @: F8 x9 L$ ?% _( m* g
8 W+ }& }1 H) f /* Initialize BSL */3 X ?3 Z6 }5 k% I
EVMC6747_init( );% G+ W( L& X6 s2 S; `* u4 w
/* Call evmc6747_intr function */
& P0 x: `8 W# |5 V" J aic3106_init( );5 G% h( Y9 S ?# j& H0 Z O$ I
while(1);
- U& v2 T' i1 g3 m" l/ c4 T}
" ^5 X: }0 c, _$ `6 r
2 R- ?* ^4 V' p7 e
7 ]) K- e2 q! i5 P4 ?+ gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ a' s) ^& _+ w8 f Z( e/* Initialize MCASP1 */- f+ t4 g/ `" E
mcasp = &MCASP_MODULE_1;
3 h. j6 V2 k/ s1 C6 o mcasp->regs->GBLCTL = 0; // Reset: U8 O" [0 q; T8 j1 \* G
mcasp->regs->RGBLCTL = 0; // Reset RX
; v2 e: m+ k: Y1 q mcasp->regs->XGBLCTL = 0; // Reset TX
# G8 s9 ]' R0 [5 c mcasp->regs->PWRDEMU = 1; // Free-running
0 P- T: W1 ^; x1 w8 f3 K. q+ k // configure McASP0 receive registers
& f6 V% s2 p) k7 \ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used h" ^" T5 x( k' n1 s1 I5 Y0 B9 U7 e
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 L/ E4 K; x4 A
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 l- [' p. X, m5 ?9 [ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) G& m$ `+ q2 i- m! ?, z
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)7 k) y R2 l0 F" t
mcasp->regs->RTDM = 0x00000003; // Slots 0,1% s, g+ k; J* a1 g4 L( t
mcasp->regs->RINTCTL = 0x00000000; // Not used
5 J8 u: o: M& U0 ] mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 z1 _# _3 U' W1 [$ G# v
% O( I/ \( p+ P5 P5 e
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 }. Q3 C% f0 o/ C
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 H* V/ n+ N9 Z8 v
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 \4 k5 Y: t4 ^4 T% G4 ? mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 `! L3 W. B4 A
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* C4 _& i+ B! c7 C! U
mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ A9 c9 b* U3 P$ w' Y" ^$ V
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! |& q5 G- U7 K mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& l# T. V( M5 m% z; w- f; z0 x: H4 m: g# U; s0 D
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 T2 v/ P7 ~. h2 U$ i
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT% \: V1 `1 v# d0 T E' {! {$ H
mcasp->regs->PFUNC = 0; // All MCASPs! a& q4 L4 Y+ s @: v+ k
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ S) e. Q5 V7 H. c _& q7 g3 g
* U# W- T+ E. O# F
mcasp->regs->DITCTL = 0x00000000; // Not used
) u7 W. z0 j1 Y mcasp->regs->DLBCTL = 0x00000000; // Not used" N* r# ?/ G3 X* w& y- v- E1 c
mcasp->regs->AMUTE = 0x00000000; // Not used* X1 P% Q/ y0 _6 |" P8 r
m4 H' ^' ~; P
/* Starting sections of the McASP*/
) j0 r: S' d( \2 \- _ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( P% {" X9 K, @' o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
+ [/ e. V% B8 L6 C" F mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 m6 J4 r7 F: s. P# U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) p4 C/ j* A- V* ]) u
* P4 V. r9 m. F7 V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & D( G; t6 `2 R& f0 v( H4 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. u: X# \/ c) P6 M2 g. V6 o mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 E4 W H. `9 X& x8 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ ?3 K4 y" j) e. B- S- x" S1 P5 x( q, c; U3 a8 M
mcasp->regs->XSTAT = 0x0000ffff;
$ T, N$ h" q4 T B mcasp->regs->RSTAT = 0x0000ffff; 2 J8 t: _2 y" M* v }. h/ }
% v1 l: ?* u0 G7 B. `1 i, h3 J- o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' S8 J. Z5 y R, h* \3 o7 ]. W; M6 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. Q/ y, W) W! Y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : u p/ d5 @# T7 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 [/ g! z# l6 }# `4 r" B
) U4 b( j) P4 E3 w5 f' I: [0 z' S2 s
/* Write a 0, so that no underrun occurs after releasing the state machine */
; L5 S/ P8 [, m# L+ k: K( a mcasp->regs->XBUF5 = 0;
M1 \; V+ t) y h) [ mcasp->regs->RBUF0 = 0;8 C; C) L; ?; @) x' ^$ d
; ^, n# Z8 U! ^ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % \9 y$ x# m/ J. B. Y3 o! i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
o7 K' M, R6 Z7 V9 @$ b mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
^* W, \2 j1 Z' w- \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 ?8 H K# }5 m4 R! K+ K
" z: ` d# `' t7 w1 k1 e X3 M7 A; G
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 ]. Y4 P# A# O& x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# [( Z2 `# {2 q: ~: k1 [+ o
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - o" X$ z2 D: o& D; Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; C1 @4 S, l1 j+ P0 R1 J- ?: P7 u3 S" w f, p6 ~0 d- Q
CSR = 0x0000;4 X H7 P% R: ~7 N" \/ L5 I1 _# O
INTC_INTMUX1 = 0x3d;/ x. u7 M- s: F t: _
ISTP = (unsigned int)vectors;1 P' P9 l6 J e% G3 W4 P
ICR = 0xFFF0;
. M" B4 `: d; G! T6 k IER |= 0x12;
+ L3 O9 d" m- ]/ Z CSR |= 0x01;
) m8 R- S/ P, l; J- S8 N& @7 }8 P2 R+ e3 o3 f: I
/ {1 L( r. i% j5 G2 j5 w
# S* }2 J) a# z, p3 p1 x' ~1 p还有就是两个输入输出函数:+ O# w J# t. V8 L" F9 I9 c g
void output_sample(Int32 out_data)1 e m L% E- N! T
{
8 [! o3 a: p4 C# s; ?1 j AIC31_data.uint = out_data;
4 U* k+ X; D1 e MCASP1_XBUF5_32BIT = AIC31_data.uint;
) q4 f; @# u: q/ B- R) h# @/ ^2 k}; t7 I' U. z- W4 H& C
$ q6 }& ?+ ^( X1 H
Int32 input_sample(void). B8 A# F- y0 o% P
{ 1 P4 M+ V4 ]" p. D( c0 j
AIC31_data.uint = MCASP1_RBUF0_32BIT;
) I" C, B) j' P# a1 H# t" K2 F% P return (AIC31_data.uint);
9 |. c7 N8 [/ v( [* i}
/ F" z% m r" E9 M. v) b+ w5 D( K! n# Z% e7 ~0 H/ h1 r! g! U. N
|
|