|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! M( q% o. {8 l* }- U
main文件:, O0 _% t$ \# O* V X
interrupt void interrupt4(void)
- S+ M- B/ r+ r{2 B- w; o; h4 q- Y
Uint32 sample;1 o L5 Q2 R: \7 z0 t4 z
% b! E# d2 b( t sample = input_sample(); // read L + R samples from ADC
; b4 n3 \" z. E6 ]: V1 v: W. X4 b( M: m output_sample(sample); // write L + R samples to DAC
' f1 L E5 W$ K5 c) E return;$ k s1 Y! G. R
}
5 d; k5 x e' R7 x/ h9 S- ], I" e# x6 U$ w
int main( void )
) r8 M9 r& ]* n1 S5 p{
% U# k( [2 S) A& U
/ c+ U4 [/ X' f- T /* Initialize BSL */
& [+ H) W- [2 W$ ^* r EVMC6747_init( );* M5 t+ Q4 H4 ~" N' V- X3 ^& R8 ?3 V+ W
/* Call evmc6747_intr function */0 A8 e4 K9 X+ ]1 ?8 ~* ?
aic3106_init( ); ^. b' K+ }0 }
while(1);
% { p: t- f; b, T}
/ ?7 V s2 `' Y9 N/ q F7 U" p' Z# h0 V$ ?# x
7 d+ ^. Y) |( |! Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
A9 E2 z6 e1 G0 v: x2 t/* Initialize MCASP1 */
6 p% a) V H1 `- V# |- [ mcasp = &MCASP_MODULE_1;
3 ~2 G: i. I$ J9 j# M mcasp->regs->GBLCTL = 0; // Reset
$ I, r& l- j8 c- B+ s( L0 l mcasp->regs->RGBLCTL = 0; // Reset RX% s* ~, j; T3 z% j1 v: b
mcasp->regs->XGBLCTL = 0; // Reset TX
2 o8 u' R# H- q7 y& K4 j- \9 u mcasp->regs->PWRDEMU = 1; // Free-running
7 x' H( F8 j& d7 c8 s // configure McASP0 receive registers
- T; @' [5 c; o* e( |" m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 B3 e3 D# w2 C mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* d8 [: Z, W( O1 |# p% n mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 E6 U5 v, O/ C4 q- T
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 p$ n" Z7 M; s3 x3 h! m' i
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# r- C8 k4 `! x4 l' ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,1: B) V5 m$ o6 T [ b+ l# a9 F$ ~
mcasp->regs->RINTCTL = 0x00000000; // Not used
% O" l( M: S$ D2 S mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ h: |5 c; s& ?" i
5 A V% L2 H5 R! o1 ` mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) @% H% R( Y% {$ S) e7 s8 v mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 N) M9 m' s, J/ u
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) `" ? o9 o9 v- Y6 i3 @7 c
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' t' z. l- V* x j; p1 P! P
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" H" Z. T( _1 B b- n
mcasp->regs->XTDM = 0x00000003; // Slots 0,1, ~: \- }6 N; ~% m9 ?9 P- G4 H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" b; o n( ^+ r mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! q$ }! w- |! a( x$ o/ w9 {$ Y5 U9 x% {. e( g M9 ]( G/ ~$ q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN1 {4 c1 J4 D" d; m. y" x& k
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT! m: G* m* m) n+ j
mcasp->regs->PFUNC = 0; // All MCASPs3 d- O' D! Q7 x, t1 |
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 h7 x3 U2 H' }% l. k: t) O
) x, l& W& p7 g z% m& [8 {" \7 o
mcasp->regs->DITCTL = 0x00000000; // Not used* x4 W3 F% U. K
mcasp->regs->DLBCTL = 0x00000000; // Not used8 q" ?2 D. T7 J3 B3 W
mcasp->regs->AMUTE = 0x00000000; // Not used& ?5 ]( S" T8 x# C# {7 S6 C
z, i" t5 H% U+ @8 T" {/* Starting sections of the McASP*/
8 `5 _! i- C( u- \. h3 N mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 H* m( }" T7 A4 B. I# l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 V9 n$ I$ q7 ?1 s9 Z) {. d* B mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' ?/ L" b' [. ~# } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" W o& B# A, m. d
$ H+ K g" [, X$ { mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 u' G& F4 H& { w1 K! J, O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. {: l0 T2 ]0 t, X+ p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 g# ?7 m+ e7 M9 s5 i# C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- W, ^) j( W2 h/ g) x: Y
! {; {7 e M+ ?' q! ?/ W mcasp->regs->XSTAT = 0x0000ffff; ; r' r' n: p. Q7 {& K% w' V* E8 F
mcasp->regs->RSTAT = 0x0000ffff;
" R+ ^" l. T+ V2 Q8 n0 l2 S4 u0 Q: N# t
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 l& ?5 }, O3 \5 L: E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' Q: {! W R0 M
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 ~# K3 S; T4 A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, k. Q% h3 J0 Z7 b4 X" h/ @
9 k+ m! C p2 @0 b! ~% o) e, M
/* Write a 0, so that no underrun occurs after releasing the state machine */
8 u4 l; [4 o; y0 i$ I% H mcasp->regs->XBUF5 = 0;
1 k' }" u* p6 h; E M1 H6 B/ ^ mcasp->regs->RBUF0 = 0;' c2 ?, o3 T6 v$ A
. `" q$ f; |$ S" g# J L mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; n; O7 ?; e b! C4 g' h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' J! ?5 O9 r* J
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. {9 j: X, T, ?5 v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* v$ }, i7 R1 u; t1 i$ u. N2 I% `$ V R# {
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! a- S. A$ o& k8 r" o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 c; f9 e8 ?' f# d2 H1 o mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - M7 ?7 I% j9 {0 Z& R* {( d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 x( k0 @ Y0 q/ q6 D9 w2 ]1 p" a
: a0 x8 T6 X7 ~; [: q CSR = 0x0000;0 M2 r# _0 ?9 V8 m( i. c) r
INTC_INTMUX1 = 0x3d;% d2 I) F. q( W. {; i& t+ k
ISTP = (unsigned int)vectors;
8 i# G* B+ X6 B% ` ICR = 0xFFF0; 8 p) Y$ s- j- j5 v( a4 ^
IER |= 0x12;
1 ^* i5 G2 X0 J+ T( h0 l. ?. c( j CSR |= 0x01; 1 k* s. \0 L# T
4 n8 \2 Q3 {- j: D5 S: S' Y
9 w* Z+ o6 ]' m1 u# t: q
( Z! d( b+ t$ S$ x) a0 [8 c% I/ {8 G还有就是两个输入输出函数:8 ?4 b1 l+ n0 F' h) F" ?5 L; l7 v+ X1 H
void output_sample(Int32 out_data)
# d1 D8 U. n2 M5 v" H{' I, Q% l) }2 g$ O4 P9 B
AIC31_data.uint = out_data;
4 h1 {; p3 I) Y* `# P MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 r* F: J& }! \* E) R+ d, L: G}
8 ~, [ _3 W$ J. E1 R
2 X( [6 h( I4 P3 q) pInt32 input_sample(void)7 E' S/ c9 \1 g
{
. M- I& ^7 O. g- X' j AIC31_data.uint = MCASP1_RBUF0_32BIT;8 F2 R0 M! K9 \$ V' q+ P3 c
return (AIC31_data.uint);
( m6 i* E2 x9 V; S& S. \1 p& f}
; _# J) X9 j* P( y0 R4 Q
F. H. f s( @( a+ f: D& _ |
|