|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 i& Q0 |% i& h* E3 S7 }
main文件:& G3 P) Y0 r" J$ m& F+ Y4 b
interrupt void interrupt4(void)
! U& ], e( S1 K' S# B. c. ~{
' D w! `% p$ r+ n8 V% j5 \ Uint32 sample;
, Z$ V8 B* S( k; v6 G6 U3 |, {- w5 e' H5 Q/ K k# C) e
sample = input_sample(); // read L + R samples from ADC7 C' Z' w0 _$ }& I' y+ s4 q
output_sample(sample); // write L + R samples to DAC 1 c' A0 B" d; U. ]( d( c9 p; ^* a, o
return;
; d* t: N5 v+ m: \/ ?}
4 q; r7 n$ m W2 ?0 R* m+ P$ S) g" G; H8 n8 B4 w# H, p
int main( void )
& x5 A8 U- S9 p% Z% Q* m{# c( O2 c x& J
. |; o4 c& D, C$ z! F /* Initialize BSL */3 s+ a8 K) z0 d! ~: R" e9 E8 f: m8 h9 r3 J
EVMC6747_init( );( {( y; b& ?8 l- y6 V
/* Call evmc6747_intr function */& m, B1 j; v1 [& z2 e% _
aic3106_init( );0 j; T, S" R) e! v+ z' Z1 V
while(1);
9 r& V( b8 A0 a6 Q}/ k8 n5 I) i# R7 Z
4 y# [8 r- I7 p0 G
, ]5 }4 I5 q0 j7 Y( ? Z' Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* R2 |; w3 B$ W# }7 N/* Initialize MCASP1 */
]0 E3 [& a; J0 L: X mcasp = &MCASP_MODULE_1;8 ~- P: v8 ?! r4 k* k# y9 }# O
mcasp->regs->GBLCTL = 0; // Reset9 V8 z3 U3 ~7 ?' R6 L! _
mcasp->regs->RGBLCTL = 0; // Reset RX6 V* S) y) k: N5 R% U0 j
mcasp->regs->XGBLCTL = 0; // Reset TX* |: R: r l8 ?
mcasp->regs->PWRDEMU = 1; // Free-running, m/ J, V$ u9 P) \$ g3 w* y: k; L
// configure McASP0 receive registers
( q7 }3 B) o8 I mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used1 E; Y# c, J6 L; ?1 _
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 k7 h5 f7 O& K: o6 _# c2 ^7 j mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 A+ X& S& Q2 {! K. Y. a mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% y. s, d" \$ S" D4 L( y9 r1 W mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 N1 f- t3 M L( ]8 S3 }; r* y mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) y2 r* C% d3 Z8 s- e mcasp->regs->RINTCTL = 0x00000000; // Not used
4 M% s8 y" Z- L" T0 G8 T1 ` mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 C& B7 n4 Q; L) y) Q: V1 [3 R! o
0 x7 P8 Y, P; M: z% X# f
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used( p/ O7 W) b& k3 E5 Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 ~0 z6 r: K- P& W( ]! P. V0 N" o! A mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ E3 C9 n" U. d$ L) a- J
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) Y9 k# @0 T. ^- S$ Q7 `$ ~ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 I3 T( F- ]3 z% @2 |
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" m: N( R4 s6 i/ r, ^ G8 M8 Z mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) M# A1 K1 h2 f5 _
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; ? q& O. @. I' i/ o6 l. I4 Y: @" b/ n* K9 a" h1 N
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 ^ F6 l& K* C# M1 p# V! g' k mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
( h8 R) B1 ~+ {, f8 X8 v( f0 \ mcasp->regs->PFUNC = 0; // All MCASPs7 T+ a- W c! @" H5 D7 ?
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 ? C8 |0 p4 \
, x& F8 I! N+ k# `0 p H3 h% C! ] mcasp->regs->DITCTL = 0x00000000; // Not used
; J6 g/ {2 o# P mcasp->regs->DLBCTL = 0x00000000; // Not used
6 m! ^; y3 `1 R& [/ c mcasp->regs->AMUTE = 0x00000000; // Not used
2 a+ d8 d0 _( B% X( j0 \, y; a2 R& W! {- V
/* Starting sections of the McASP*/
" v% _1 l. E% F0 [/ V" r- ^ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 M( P2 h( D7 X. _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 V2 J, a" U. }4 G mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / i# f; u: n, O# `8 p- J' r7 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ _5 S! N' Q2 `2 S
; G0 G; r1 z4 a+ O mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 v" i, k* Y0 Q1 Q& y9 U& ?9 ] v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 @# @, O3 c! m mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # H P1 M# | ?5 p2 i* [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* t: w, m0 q2 }+ w0 Q* S W% l" \& W: N
1 _2 Y. M6 L r0 G mcasp->regs->XSTAT = 0x0000ffff;
+ @- H0 ?0 W9 D6 P mcasp->regs->RSTAT = 0x0000ffff; $ @* g' X* v' R$ O+ m- j
' s( c5 j% U8 J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. t) R$ p; C3 Z4 |: l8 O8 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# b7 }. v. z' f" d/ P2 v
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 U7 T% Q. E: ^6 \ z+ ? ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
l4 }" N) v+ g, ~8 f2 \* D. ], w4 W' S- ]' \) j
/* Write a 0, so that no underrun occurs after releasing the state machine */
1 }! z1 X0 C$ J7 f mcasp->regs->XBUF5 = 0;
- B) @1 f" _2 U8 P7 c. K mcasp->regs->RBUF0 = 0;6 ]5 s0 d% j' [# F( y) ^
! d7 b, K9 ~* B4 |2 C% ~+ N mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " l' |: u1 a1 j! ~4 f0 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 d3 W. X/ Z2 Q; \6 P
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 d+ U/ C4 Y0 Y& I3 k( O u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- o# o3 w+ b- N8 t7 Y1 N' j6 V8 ~8 u
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 v2 ^, ]5 N( t5 u# F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ q* T6 m& M7 h, W- Z0 Y2 n$ R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . n$ q6 M* S% }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ Z5 P9 Q7 D( n/ \- K+ B3 r4 \
( L: y$ j6 {6 }" M$ v* _" u CSR = 0x0000;
$ c' I' ~6 d0 i" k INTC_INTMUX1 = 0x3d;
. T9 d+ b7 ]9 s- C; i ISTP = (unsigned int)vectors;* F" M. ~$ C* B% s
ICR = 0xFFF0; . X, B- B z- X% _5 h4 n
IER |= 0x12; : L# d1 d- P( @7 u
CSR |= 0x01;
7 P9 O. d) q! E# r$ b
* P' }: K8 ^" S' t- b4 ~* D, x% P: a7 a8 W) Z
( s D1 D, a B5 I- J& g4 ^还有就是两个输入输出函数:1 \3 I3 F8 Z% z6 G" W
void output_sample(Int32 out_data)" d4 j3 l7 t( E, `: k5 L' x
{
, e0 \$ N2 u6 b AIC31_data.uint = out_data; # \; i2 O5 @0 Z/ E; e( A: L9 }
MCASP1_XBUF5_32BIT = AIC31_data.uint;. _) i% J0 ~7 N. ^$ n2 ?
}( m, e: X) p5 \& V" s
/ C S( \/ B& ]4 l5 e2 _" HInt32 input_sample(void)
3 J, }% `' A3 [" `: {2 z{ , G+ T. l5 v& J& F4 u. U) r& m
AIC31_data.uint = MCASP1_RBUF0_32BIT;- e \% p; Z/ x3 a+ P0 T0 r
return (AIC31_data.uint);+ N P: M1 J$ I" i, o
}
4 _/ X9 Q) j$ t6 o! z/ b! L( r, J2 [8 T
|
|