|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 R, K5 `' V, {2 @# M( Cmain文件:5 f' f8 b0 ~6 o. J0 N: k
interrupt void interrupt4(void)
; x7 U8 h6 ]# U& \1 k{* o5 T1 P& }/ K# Y
Uint32 sample;
, {( b$ Q7 t6 {+ O. a1 I
4 f1 q2 Q, ~' r$ @ sample = input_sample(); // read L + R samples from ADC3 H: }6 c# d- U& V8 V+ W5 B' p
output_sample(sample); // write L + R samples to DAC . s( |) X, R0 S- @) w; E4 h5 W
return;8 A' c& M2 o8 r1 x
}
6 |1 U3 V+ R5 k e
2 K1 P8 f7 _) cint main( void )
# d' o; Z) b4 q! V M0 r. z; ^{
0 e- u4 i1 t% n! X3 k6 k" }; \4 S2 H1 ?6 k7 X! Y: U
/* Initialize BSL */
3 L& G" P4 x# A- h( _( E EVMC6747_init( );; P8 V F1 P* Q' z, B! m8 M3 Q" d4 @
/* Call evmc6747_intr function */
: o% X) _6 A! P8 d# o aic3106_init( );
% `4 Q+ c, b& k while(1);
1 n4 m* x$ ^0 ]- q* K2 g}6 k. U/ P3 l, Z
/ U' s2 X! n1 B" ]
! L! d, m5 p# c- maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ Q- ]- g7 B* g; `2 O) O/* Initialize MCASP1 */! v$ Q9 ^- J. B
mcasp = &MCASP_MODULE_1;, ?3 g1 h3 b8 @5 |5 w
mcasp->regs->GBLCTL = 0; // Reset. Q! U2 ^; o( r2 o8 K
mcasp->regs->RGBLCTL = 0; // Reset RX
" w6 ?+ t' A" \ mcasp->regs->XGBLCTL = 0; // Reset TX
7 V7 o/ }% y: y0 Q mcasp->regs->PWRDEMU = 1; // Free-running. A# r, O+ x: x+ V' F+ l
// configure McASP0 receive registers
; `* L( r; j F& ?' j7 }5 {" e- F mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
2 O$ \3 {. @# X) E# Z# F0 t# A mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% H7 o% ?6 ^, P* M* P c) [ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 d' ]. Z. o3 o4 m mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 G, t6 l/ I, v/ a5 ` mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
. ?2 ~+ @" Z9 J3 I$ A mcasp->regs->RTDM = 0x00000003; // Slots 0,1" A- ]. N" h* Q" L. U
mcasp->regs->RINTCTL = 0x00000000; // Not used0 b6 Y, p6 Y* Y! R1 Y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 d2 y) K- U1 h) x$ Q
. }6 M2 s. b4 G# U5 p
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
}2 w) C% s% K1 ?, n* ^! A& Q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( N" ?- G) y( {' n- U/ Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# r2 I+ z+ ~4 |5 D% { mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* k @! I, T1 f, |3 A, A* _ H3 M
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: d8 K& L6 M$ o) Y% b mcasp->regs->XTDM = 0x00000003; // Slots 0,17 ]: P8 W& S. B4 j9 H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; i2 i/ G; _9 W( X6 g* K7 t
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ \; @* T6 K; ~! ^$ h5 @1 ?8 E+ }7 d9 t
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 R* A7 o" q9 n, t& g1 |) W2 x5 c2 c mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
- I) `1 [3 }' }2 P4 \0 u z! v mcasp->regs->PFUNC = 0; // All MCASPs
# v( s# ]3 p! A( v+ P mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' T, N; p( @- S+ C# H& B! k8 Q! A" N2 o$ I$ e) W% M: C
mcasp->regs->DITCTL = 0x00000000; // Not used# z- q5 ?& K7 k0 j L
mcasp->regs->DLBCTL = 0x00000000; // Not used
9 @$ t( T& ^9 N" m! v, S u' l mcasp->regs->AMUTE = 0x00000000; // Not used
. N: n" n* j: [9 X7 [
" [; o6 p) B+ a( K2 g/* Starting sections of the McASP*/
( O+ n3 C. c: }4 G5 C mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 g9 g4 C- S- t6 a: p& B2 e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
A6 U) r% p& C+ E3 \2 W4 I mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 W1 j% ~$ ~; ^2 Z0 {. j2 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- S$ K2 z% n& e. m
2 Q0 U, i" p& r X0 w0 a& l mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 }! n0 F! }$ p8 a5 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# Q/ b( g8 K2 g1 c8 S# H Q# g
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 ?) f/ @, R$ _0 W6 S+ n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& x& J/ @& N' u, R! y
8 P$ K' y! |9 r D1 P mcasp->regs->XSTAT = 0x0000ffff;
3 |5 @1 C8 `. k+ J4 J9 n mcasp->regs->RSTAT = 0x0000ffff; 2 n9 `1 C8 B' u' A. f% g; y$ v
( q8 e, u/ S7 f/ D* y8 b mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) g5 S' D; g& R. v( O* q' m9 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 u: h# q; G8 U; p/ A- Q- G/ x% I
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % f+ [! U- E4 s) E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: H7 O/ ~$ T+ @, ~. d
6 A- H' k# j: O; u7 Z$ x$ l /* Write a 0, so that no underrun occurs after releasing the state machine */, Z% S: h/ S+ a% @
mcasp->regs->XBUF5 = 0;
- z G# H3 `0 F8 x mcasp->regs->RBUF0 = 0;
" t8 a& G) l6 Z7 M0 j& e' ]' H9 n% B* }5 R
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 [3 I! s$ B8 }& _7 Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); p; p9 J# ~: m' {' `3 z/ o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " c1 U: V/ r) d" ~, z/ c. C$ f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ g# a; w1 C0 a
8 {/ D! I, l3 D- G. h mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) y" R0 Z+ m5 O N5 r$ h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. J; `* n1 a' n8 L ^/ D
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' T, m' a4 }* A" L" G c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 @# Z( {# ?0 J/ ^* K% W# N& r
- B+ N; }0 ~# X% B9 H
CSR = 0x0000;
3 M: X. w! D9 |5 a) J( y5 C INTC_INTMUX1 = 0x3d;
$ l1 {' K4 Y. O _ ISTP = (unsigned int)vectors;- b& q8 h( [/ t. \/ F
ICR = 0xFFF0; , K* Z) V: m) D0 T2 E: G) ?& G9 P' g2 Z
IER |= 0x12; ( c+ P6 C, H0 T) F/ D" G; q
CSR |= 0x01;
% `. ~0 Q) e6 M# c) L. |# H$ B. ?& k7 b! C8 k" D6 Y, Q
7 P2 k# W6 ^7 j0 M S
* s% n. o5 Q8 K" u; a8 n3 F还有就是两个输入输出函数:1 N- Z7 e& e4 P
void output_sample(Int32 out_data)8 C. f a, i; i( V7 f- c
{% _) B$ J* w# x+ R# v- D* d. i* a6 O
AIC31_data.uint = out_data;
9 f, s$ o k; x MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 B( p2 J5 J- R0 O: z+ R% p}
% D" c1 Y. ~! v! f, Y% X. ~2 a& F1 I/ T$ y- k/ o; p7 O, y
Int32 input_sample(void)
4 t' d9 U* P0 L5 f% h{ $ E. u m7 \4 m7 E& o2 b# ^
AIC31_data.uint = MCASP1_RBUF0_32BIT;( ?7 w2 q) t5 g \1 D+ U v( U7 A
return (AIC31_data.uint);1 }6 H& c0 ^8 [. j$ l) R4 i0 l
}
. ^7 v. B+ Q( H# d* s) Z
- m% S4 {; S! x J6 p |
|