|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" k+ ^( Y! }. v* c
main文件:
9 A2 l9 _" {" A1 B8 zinterrupt void interrupt4(void)
# C8 a- {: ?+ y1 m: C0 w4 f3 B{; l# b2 \" [! V8 M7 _
Uint32 sample;
- X4 I' w8 s) t' `9 i: Q5 ~( F7 g, |0 f7 ~& f( T4 s
sample = input_sample(); // read L + R samples from ADC/ z2 s7 M( Y; L9 G! m8 F
output_sample(sample); // write L + R samples to DAC 2 D( M: q" _) t4 D. _9 V
return;
% G. A% ?% M% e6 s}
) ?. H8 f# a9 H, Q# ^2 G
$ w% L+ y" o* B8 @ mint main( void )1 E# D: o# ^. y+ a) ?: ]( a" k( Q
{) z& B$ n3 N: a( o6 f) N0 G; q. t! L
. Z% m) l* ^0 G& K' c- M7 s /* Initialize BSL */
! ~6 x# z9 r# j! {. N4 T EVMC6747_init( );. x' y' }& ~! n& N( ?
/* Call evmc6747_intr function *// L; S. w6 E( `0 ]5 {
aic3106_init( );' {, Y3 f% K* I+ u+ b) r
while(1);
* M& T9 z$ C e, p* i" p$ X}. g0 w$ R( ~8 A! ^# ~. Q" J
2 M& p) O" p4 J. C( v+ L- c0 x6 i6 [0 o6 r, e4 ]/ l2 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 O) c1 n! |; @: k* ]1 g& j
/* Initialize MCASP1 */ {/ C# N) _9 b" d6 s
mcasp = &MCASP_MODULE_1;
2 s" B' X5 E, w; m- Q' H mcasp->regs->GBLCTL = 0; // Reset
' A* H$ r) V/ T q' I! P" f, i/ | mcasp->regs->RGBLCTL = 0; // Reset RX
& T9 `+ M* _% J mcasp->regs->XGBLCTL = 0; // Reset TX" l8 W; B/ ^2 c: h) M& M( a
mcasp->regs->PWRDEMU = 1; // Free-running
& t7 O" W7 i- ]' u // configure McASP0 receive registers5 n$ u: g1 P* S4 G/ l1 L, i, h
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& i2 F7 h& b( @& O5 I
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% e; M8 _6 e. R- W, d$ d: A mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word" `: U0 U. A- s( }4 r
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& p% G) }7 U' ^1 y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 w. j9 k; S7 d! N% ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) @7 T9 Y; z5 A; r0 o$ m" s5 S mcasp->regs->RINTCTL = 0x00000000; // Not used% o6 J) ?, z, w/ O' U- Y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: t/ q, \/ K, e. \* T" q
0 L$ ?9 u( u; }8 q0 W* o1 ] ]8 |6 i mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 e' R( G* B: r" R6 E, ` mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 [, B( T$ M! {( G) [
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% c" M) K. b, c* K) @6 Z( j
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# x" f- N; h% Q# h" W0 p: Q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% i" N( W9 |' z, F/ Y mcasp->regs->XTDM = 0x00000003; // Slots 0,18 U t7 @+ [, t7 A
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" D* f6 B, Z$ v( r/ \% N1 n mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ T# F. e! Y, g9 Q0 |
|# j: o: o+ v1 f( ? mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ _7 W# y8 c. j# c
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT. S( s/ M* C$ Z4 J' B2 P( X
mcasp->regs->PFUNC = 0; // All MCASPs
, |- E7 E$ W+ ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 V# A. Z; [1 E7 Y2 G7 b1 ]) P" o& O/ L8 g
mcasp->regs->DITCTL = 0x00000000; // Not used; `/ h {# O+ M0 M" x* N- Q
mcasp->regs->DLBCTL = 0x00000000; // Not used
, G* M- a1 M6 V/ I' d `" X mcasp->regs->AMUTE = 0x00000000; // Not used! _( ~- `% G2 }1 q1 J- y( v5 c: R8 B
- X7 r! P+ h2 Y. G! M- C
/* Starting sections of the McASP*/3 Q% M3 O+ R9 u5 V$ s+ |9 p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + T7 ?( M# J! U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); E' X& I4 _' R" w6 h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( I6 J' s! R. c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 i, v: v7 E, q% M
. c2 J8 u |* ?6 D7 E9 r) ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( P" s' @; p/ M* b# S9 x/ U; G l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ c' ^/ r! U( v8 S% V- X: [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ h$ }, l' l, h* F4 B4 t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' `6 T! K2 k/ e8 Y& ]
$ |6 q2 [( q. U. ] mcasp->regs->XSTAT = 0x0000ffff; * I* j0 Z! r/ g O+ ^7 V/ j( |
mcasp->regs->RSTAT = 0x0000ffff; ' ^2 ?) c, S |- Y* y
$ A+ \9 }% Y+ ^0 o; H/ x
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; U( `, G/ y# ?; G7 Q$ F H) M0 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! ~: M) v: v) ~
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 I6 L) Z p- g! h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: Z9 C2 @7 G( P% [; Z9 w3 x8 F# A3 ?3 b* Q% P" M( E- o7 S
/* Write a 0, so that no underrun occurs after releasing the state machine */
) u- G/ |! @9 d2 m2 u; l mcasp->regs->XBUF5 = 0;
+ d1 ]3 t' C+ v# l' q- t mcasp->regs->RBUF0 = 0;
2 q! @7 z7 v0 d e! I; r
7 n2 }: \8 A2 G m5 o mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& Q& v9 X* l+ J3 R% m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! h6 P9 V# M4 x2 e8 a8 S
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 F: B5 X" ~5 _# E" L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ a- B! H9 o7 {) c) f. C, t
: t& y" @/ _7 t& D; u mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % V) t C7 {/ @4 c- F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 v) ]+ u c& j9 [0 x* I- h& w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 v, p* _4 V3 c1 E: h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 E, r! G3 w6 U+ ~0 @* V. a+ [
N6 ^- c! d: Z% D9 l, { CSR = 0x0000;; T- c; z; {- j" v; M3 g9 Q
INTC_INTMUX1 = 0x3d;, w3 @6 ~% ?, V- H: f; [& @
ISTP = (unsigned int)vectors;6 P" M3 m1 r; k `& X- u$ T8 G! E& b
ICR = 0xFFF0;
# \7 p# p6 E5 G8 X" I+ B IER |= 0x12;
* i& L+ o1 q- h CSR |= 0x01;
8 M, w/ V% W7 D8 j8 t9 N& m: B+ n2 F. a+ F
0 b5 L. L# w4 Q& F' c- Q( A5 D
6 T+ r+ K: Y8 r% B5 {4 H: G还有就是两个输入输出函数:
) [+ ]% m" m) |. s; pvoid output_sample(Int32 out_data)
/ b, z6 Z+ ?: _" ?) {! o! l+ L{
' b) T0 F$ ~0 E2 c: }& v& S AIC31_data.uint = out_data;
6 P! D1 x1 O' C( N3 X- Y MCASP1_XBUF5_32BIT = AIC31_data.uint;/ J- t4 E( _3 ^ _+ P$ J
}) J- o" g& A0 g1 N# ]
5 I5 O+ \: q }% [3 w E: jInt32 input_sample(void)
: ?. T# F8 n6 V6 b7 D{
# h0 J# u# ^! T2 _3 D AIC31_data.uint = MCASP1_RBUF0_32BIT;
; f$ Z" S1 W3 [( e6 t' Z9 R return (AIC31_data.uint);; r9 H& _3 `1 L
}1 ?+ X$ x# J5 ^7 d
; X" [5 @( v! I! M, M
|
|