|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! p p3 a v! b6 R
main文件:6 @1 ^ Z8 W# D6 k
interrupt void interrupt4(void) 4 N( @' ^; p% n3 z+ B7 N' |6 B0 r
{- s; Q9 j, {' i( A/ f2 Q" M6 h
Uint32 sample;
/ W$ z2 X9 `( s& ?9 j0 D7 e/ a5 D, g
e( S# u+ M y& h, @! r& I sample = input_sample(); // read L + R samples from ADC
+ ]: Z7 g% G5 ~( } output_sample(sample); // write L + R samples to DAC 7 k" T0 Z Q* \6 M7 {& p" c$ \
return;3 ^' J _! \' x
}
% F b C3 A* e
6 j0 c p$ k. {* Q0 j6 Q" H! dint main( void )# @' [- l% z+ G% Y
{
. k' _; }; X2 E& c
& ?% ?3 @1 b i @ /* Initialize BSL */
( S: {! V! X9 ` z! M! @+ V EVMC6747_init( );
4 Y6 I4 z- |3 H* S) l, { /* Call evmc6747_intr function */6 y: W2 V* \9 I6 B# l% C3 I, ~4 Z
aic3106_init( );: P2 x* H* O7 l- u) X
while(1); v/ c* N& [, a' s
}% U+ ?. S- Q6 X) O- Y, } c
6 s3 F5 X c+ w2 y: }6 D" n. B2 s( d2 p, d' i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ r5 x# E% x3 I/* Initialize MCASP1 */
# v, I% c8 y ]9 Z mcasp = &MCASP_MODULE_1;$ |% g. p5 f) {* M! v: T
mcasp->regs->GBLCTL = 0; // Reset1 _/ ? z& D1 W0 _
mcasp->regs->RGBLCTL = 0; // Reset RX
8 h/ L: O5 y+ h, R2 J0 ~ mcasp->regs->XGBLCTL = 0; // Reset TX
+ P1 \0 X8 |/ y' o mcasp->regs->PWRDEMU = 1; // Free-running
& G1 i, W8 t3 z8 W3 T7 w- e- f- w: } // configure McASP0 receive registers/ M5 o& b9 A- c: A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! w3 ~$ Y; Q3 i
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 F* h) H8 o! E: {
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 p* _$ I3 }6 R
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: H# h, O. A3 D# C e. N mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 I6 J' F' i1 G2 \: X3 T8 A mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ ~1 Z+ X# f8 a5 g: F mcasp->regs->RINTCTL = 0x00000000; // Not used, n! K7 I% \. c6 `1 r
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; r" Y) M4 q) H) H, O
( N J6 `9 @: Q; B* q4 r0 @+ Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used r4 G! t9 P# {# H! n# z) {! v0 \
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. }5 o; p; K& T. I8 J: n
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# p8 T1 @# l5 v# _' }+ ^8 D
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 o3 x$ e3 D m2 q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' _5 V8 R' u" E: {. Q mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 v: p7 `8 s$ z mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 e: ^1 U0 E" }2 ~+ T1 B- J5 o' L3 b. R
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' O1 j0 l* Z; `, z* U2 C
2 `4 F: Z/ X: `! x mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 }1 b" J: y4 z0 U% f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
$ U0 `8 _7 a7 Y* A+ X( S mcasp->regs->PFUNC = 0; // All MCASPs9 U1 g' D+ e5 @& p* C& r
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' B4 Z8 O# z3 |+ j0 ^3 _; U- X& |9 G4 T; ]
mcasp->regs->DITCTL = 0x00000000; // Not used& a/ u* G: x p/ F2 @0 e3 ~
mcasp->regs->DLBCTL = 0x00000000; // Not used
. _& w% t; L& y* W p; o9 u mcasp->regs->AMUTE = 0x00000000; // Not used
1 h1 Q. ~9 A& M, F4 W3 [
2 h1 h3 W3 { V: ~9 P. N1 M/* Starting sections of the McASP*/
# d. p( I( f1 k9 b6 s6 k( K mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & [. k0 G, }7 @1 A) g" N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # n& A. V: w4 \0 |$ T; I
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & ~! D: y, _' x) b" |- z4 p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 v( H: Y9 n! C& _7 A8 p/ ?" B) ^
5 O0 M% n2 T" c0 x% }4 R* z mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " B9 w5 Q: g0 W2 I- l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ c' }1 A% E1 ?" \+ k2 ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 Z* Z$ _7 l) Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 f- o8 ~, s( J) S0 u6 y5 O6 K5 B1 N8 d4 U; G9 ^ g' l
mcasp->regs->XSTAT = 0x0000ffff; 8 G' L# {9 a- G5 o
mcasp->regs->RSTAT = 0x0000ffff; % t# C' f/ }: ~
5 a H) k' y; I+ e& V \6 T( l1 ^ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* M3 y8 B5 n; M, _- t: b) r4 A3 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* |; s/ [. I$ T: S& j L7 Q( z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 B" z+ M6 P a& N& |, R9 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; \9 i! ^# q3 [
( x& ?# B6 q* ]. D1 R0 u /* Write a 0, so that no underrun occurs after releasing the state machine */- P% S8 L7 T: [. ^
mcasp->regs->XBUF5 = 0;
4 g; w" ]; Q& A7 d; m, W$ i mcasp->regs->RBUF0 = 0;. H/ U4 I( n0 H# h8 }
' @- G. {$ N8 N1 ]( C mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 j$ [( r6 r. J' ^ j5 F+ P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) g! c! @! s( [ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % l5 b2 P n9 @1 I" F8 ~0 t% d% n \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ u+ y; b7 y$ B- G+ E8 T9 |( x; e4 V5 @5 {2 u5 N$ ^' H8 D
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 @9 c$ u; h" r" C& O+ T& v! ?) _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! u7 [; V+ S0 {5 m mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 }8 ~4 H( q/ J& r) h5 U$ n4 w- _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 a0 Q+ S4 @ v+ R8 }6 ~
1 \$ h( ~& }& l$ I
CSR = 0x0000;
0 a" Z: i+ V7 d' s2 Z; x INTC_INTMUX1 = 0x3d;, s; F/ B* \3 q& q; l9 U
ISTP = (unsigned int)vectors;3 x; U) d0 T3 `: K
ICR = 0xFFF0; ' a8 V# y2 d4 W7 @
IER |= 0x12;
* i7 }$ a6 A5 r# z( I: [ ? CSR |= 0x01; , K u v- Z: h7 |
" ^5 F7 @7 s$ n# f: A6 b3 f2 ?2 E$ v9 ^: S
7 f9 v. u$ N4 J! o( D- `( ~
还有就是两个输入输出函数:
9 t' [$ K9 J' Z* [! m* R" n/ jvoid output_sample(Int32 out_data)
8 i, E) D4 J, Y1 {' Y5 L4 ?$ e{, [9 x# P4 \# I4 W! p R
AIC31_data.uint = out_data; 5 V0 v! X3 V9 f0 S2 Z: v; B
MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ N# l& H! d4 P$ x}& P, `- h5 B( y0 L
2 @ H! |7 U+ X" [1 xInt32 input_sample(void)
( p5 U2 T: v: H- _: g{
2 H/ ^ n @) e; @/ N: K u AIC31_data.uint = MCASP1_RBUF0_32BIT;
; A0 O, H* X! T4 J3 h& T return (AIC31_data.uint);
- U2 S2 ?& U' b1 H8 L$ B' k6 N}
. p" d9 K; M3 f' a( X1 o) r
" j* o) s6 v0 c c: { |
|