|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 }6 B" ]; y4 Q ^( {) W6 ]/ d% Imain文件:- B( k, G8 n) `7 ` C3 x0 Q
interrupt void interrupt4(void)
0 c& y5 q' ], h3 t- m, b{
% \! r" x0 D% M0 h' a. M* r" | Uint32 sample;/ T- @" i( X' p' ~4 Y1 T1 q; M
% z; f, ^4 _$ c) U sample = input_sample(); // read L + R samples from ADC/ z: h9 a# b( |6 \
output_sample(sample); // write L + R samples to DAC
7 j$ i; y! k. s3 e5 h3 [ return;* X( H# K- ]( p/ y
}
$ ?$ J& B: b" T2 s D7 ^7 \ U2 _) {- D2 H, W4 [
int main( void )
* @" |. }5 F3 }8 Z: E E/ [{0 h' c2 ~7 e3 K& l1 E
. u D; o- g8 I /* Initialize BSL */
/ m4 l t; {6 U2 T( U EVMC6747_init( );6 }2 F' h: s! C/ P$ ?9 g
/* Call evmc6747_intr function */
& d! o7 h7 c4 V aic3106_init( );
- m4 X& |, v- a7 V while(1);0 B. N3 m" z6 s! l1 V/ S
}
0 N7 }3 X+ v# {" A. ]; n7 c# H% c3 y6 G+ X3 `; y- a& `
% ?8 U# i* z" i4 x! [0 k" _; ^7 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 K3 U8 u2 A; J1 z) h/* Initialize MCASP1 */2 x! @; C) z, c2 c1 B7 f* D
mcasp = &MCASP_MODULE_1;: A# B' G* }; m9 {1 ~
mcasp->regs->GBLCTL = 0; // Reset
# q/ i; D# V9 c/ Y6 ? | mcasp->regs->RGBLCTL = 0; // Reset RX
2 y' {% W5 T" V( g mcasp->regs->XGBLCTL = 0; // Reset TX0 E# b/ \# h! {3 D- J2 E. y
mcasp->regs->PWRDEMU = 1; // Free-running, X. N" I. C1 W" Z) N D5 j
// configure McASP0 receive registers% w: }6 q6 P. p2 y+ z5 G. U
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 t ?2 y! G* Z; x mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# _3 @, e* K( E mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ R& h5 j/ ?8 o d! { mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 d( ]+ d5 N0 D# p: U! A
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 v6 j. x- E9 p ^4 ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,1; T* l$ V4 Y5 h# I6 A
mcasp->regs->RINTCTL = 0x00000000; // Not used" |2 ]# [: @) a8 E' U% S
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ S/ b X* [1 d* f
5 N' A% Z( @4 N9 Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used( z* Q0 V8 u- T0 p. m0 R) C6 x
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. W) `3 D0 K9 {3 w# U n# u mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ ?5 q" Z5 g! P2 b: m mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 I" [ x6 I% A6 b* y* b9 n$ E" O mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! b- C) D) `2 T0 V! y$ p4 D" U Y mcasp->regs->XTDM = 0x00000003; // Slots 0,1) d0 E( T1 P5 I- k' y; Y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) R( K2 m: a2 n" C! w) d- _
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) }; ?$ J/ ?5 i! `5 _5 M# j* p, C7 j4 m
# s& z: N0 H2 d, c- z. R( r! @ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
8 ^7 s* [# @; z9 d# R# Z1 z mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' Y+ ?. h F, X- l% n mcasp->regs->PFUNC = 0; // All MCASPs( \; \; d! o1 o% x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 a3 K$ j5 E. Y/ {! A3 l
/ @5 G# c$ U% Y0 W7 X mcasp->regs->DITCTL = 0x00000000; // Not used
1 V3 t& o5 {' W' I mcasp->regs->DLBCTL = 0x00000000; // Not used( X: g4 h( `2 V, K7 h
mcasp->regs->AMUTE = 0x00000000; // Not used; ?, u( Z4 A( P9 e- Q
, c& `' k X& j; \8 k$ }
/* Starting sections of the McASP*/6 T6 I) z6 g7 q0 T* }! o% i' l" K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , E9 [9 {, \6 O% y) \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
* a& w3 O9 F" V9 a" n, W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 y1 p% B) t$ h$ `) I" U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* X, c! z) y; N. j; n/ V3 M' `4 u: m1 ]
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: R8 p( M2 y" m2 `) z5 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 s9 ^" d. S# n2 F+ d
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 w1 X) ^7 k! q2 j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" W. N$ ^) {$ c& O+ c
) [6 X i( d4 |7 Z4 F8 M3 l# F mcasp->regs->XSTAT = 0x0000ffff;
' p$ E/ K. b1 ~5 ?) Q5 k. K mcasp->regs->RSTAT = 0x0000ffff; * s1 ^# `0 M" L) m8 P
9 `: G3 b* b2 F+ N5 x
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) D5 ~/ D! R( ~ ~3 {" k. u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- h/ a: E. Z' Q; W4 }( q- d mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 |% W G- ^9 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 p* I) [( y% t3 A' q+ O, z( b
/* Write a 0, so that no underrun occurs after releasing the state machine */! ?9 X' Z% i9 n1 |
mcasp->regs->XBUF5 = 0;# k- Z( g) L: I$ o+ O8 |) k. S
mcasp->regs->RBUF0 = 0;
& i. J! G9 c1 @ a) O7 s% r0 |. Q$ W6 z
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " r" l, g6 ]6 t( w7 |3 Y& ?& t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% ] A. q ~: [* w mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! {. y! k! q8 Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 `2 d8 q2 b1 r7 `& T5 d' A
+ ~- T+ {- h6 F9 \2 [: s" \" e mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. `" t( n, p; f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ M$ V" r. k5 @; O( R- U6 ^6 N; y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% e: R1 F8 l6 p! N- `1 {" ? } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 v+ e2 V$ ]$ I6 }
( Z2 w7 i, V3 d' V4 ]: w
CSR = 0x0000;
l2 \( [3 h7 h3 {( y a INTC_INTMUX1 = 0x3d;
" K3 L( @& }6 x4 j, v- Z8 \+ B ISTP = (unsigned int)vectors;( s! M% X! T3 `: k0 p$ H6 W: ~0 e
ICR = 0xFFF0; 7 P6 I$ a/ B# T9 K& P
IER |= 0x12; " g2 B9 m1 N$ P; T8 u
CSR |= 0x01;
" C# U. N; Z: R7 |/ E, [6 s6 Z3 Y) V* H+ T) p( |/ y
# O2 R: p6 g! K" q, C0 Z& W
G. Z+ N: i; v! X还有就是两个输入输出函数:
j% |6 t5 s# ~5 svoid output_sample(Int32 out_data)2 Z1 N: L2 f2 y: G0 c" y" b
{& D: l5 R* {9 g1 R: Z6 k/ F
AIC31_data.uint = out_data; % M, @' O% x7 b3 l" U% v* a" r+ n
MCASP1_XBUF5_32BIT = AIC31_data.uint;3 j0 o7 H; D3 \9 O' F
}1 K1 L# Y; z4 C, d' y9 q
4 {' Y) t# |/ A: W% Y2 |; i
Int32 input_sample(void)
" v% ?0 ]/ E6 @+ g, l( g% ?{ 7 C- o8 C) h' L! k- }" k
AIC31_data.uint = MCASP1_RBUF0_32BIT;
- o& h; g: T1 s: l: F return (AIC31_data.uint);
3 z$ t3 S1 ?1 R$ b' @}- J' X2 C1 y4 i! L) o$ z$ f# X# N
* X+ T# {1 s# c
|
|