|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: o8 t* @: R% N8 e* F) z; b
main文件:. x+ I1 L; r: }; k& x4 q
interrupt void interrupt4(void) 7 Y5 W* ?" {; y: m/ q) k
{. L% P7 I7 \- l7 N7 b
Uint32 sample;
2 t1 Z6 ]) q. ]; L$ Z
) K2 B0 G1 u. ~) W sample = input_sample(); // read L + R samples from ADC
9 m+ K6 G8 j$ H& M output_sample(sample); // write L + R samples to DAC 9 W4 B- d9 i- U: ~4 a* j. R9 ~
return;
+ F( d$ P" ^! W, D: H& W- k}
9 C0 M% W8 B- _/ e8 p: X6 }. i
9 O* u) A9 e- p# l9 h5 Yint main( void )4 v Y' G$ k) l! s: K3 I
{( d1 [" ^7 d7 N, s
% _8 N! E' I+ Q/ X /* Initialize BSL */$ k O7 X: Y) s( y
EVMC6747_init( );
0 i9 ~1 |; B2 r+ q8 D. ~1 [ /* Call evmc6747_intr function */
( k* a/ H8 K7 @- G7 M* t6 r6 l aic3106_init( );6 @) _" R3 [8 a1 D { l' N7 i% d
while(1);, x3 p5 b$ \7 x" {
}
' a( w- n- p4 @; I6 g; J( `* @' B& }3 a7 j6 K6 P+ ~
' A" c4 f; Y3 T B- N2 o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 B& m; T8 ]4 E/ c" F/* Initialize MCASP1 */
" k& L u) g L+ |2 ^( ^1 p7 N5 R4 o mcasp = &MCASP_MODULE_1;6 B4 u# G3 ~5 J. G* s) s
mcasp->regs->GBLCTL = 0; // Reset
" h3 V6 k( _0 I, X mcasp->regs->RGBLCTL = 0; // Reset RX I; ^ K, H# v4 {9 P* i8 ^; o
mcasp->regs->XGBLCTL = 0; // Reset TX
" s( b( M) ~7 ]" }* i. \( p8 v6 C/ C9 r mcasp->regs->PWRDEMU = 1; // Free-running
! }- o5 v. d1 t4 L // configure McASP0 receive registers M7 \9 E; {) V7 M z
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
m; B ?2 f* o6 b3 |. K mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; T$ W- K, t$ i8 Q/ X0 S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* G4 X0 r; \( U3 ]2 `
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% g4 k: Q1 X5 ~ Y2 A4 P) o) Q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 y5 L9 x! h! q4 m' w5 t
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 B3 s3 x5 M1 ~8 G* R! O9 a mcasp->regs->RINTCTL = 0x00000000; // Not used# T' Y8 Y$ C3 g: j4 s; Q8 E/ A
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# E4 U; g3 V% n3 o2 U& `$ E) n; ]
' o$ q$ O( y% G0 h* Y F mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used' j1 n; \9 h+ D& M
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: N) C3 s0 t5 I% `- Q mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
Q& ~3 n! j3 ^3 V h mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; v% f) [' e2 l$ F7 N) P% H mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK8 u* H& K2 e" t! \$ @7 x" ^* p
mcasp->regs->XTDM = 0x00000003; // Slots 0,1; O: k2 n3 H' X
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ Y" C, U$ ?3 x# M& Y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* R7 E! s* y8 o- W. o# z; S1 o8 U
( f+ V5 Z4 ^9 Y3 Q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 l) b' u( N, \$ u8 p) h5 Z; h mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT, z4 H& I, V/ c$ @$ w' F
mcasp->regs->PFUNC = 0; // All MCASPs
3 L7 x1 Z* r% x! B$ c9 s mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 x; w1 a9 v5 U9 q$ t% n" q( [' j5 D" J6 r/ W
mcasp->regs->DITCTL = 0x00000000; // Not used2 U9 o; _9 D u. I% }
mcasp->regs->DLBCTL = 0x00000000; // Not used
& h# e4 I! U/ _/ q* d mcasp->regs->AMUTE = 0x00000000; // Not used) q, M/ j$ t8 r8 b- `
: i4 z- i! x) B# y V+ K
/* Starting sections of the McASP*/- z( w4 l& W) N4 Y% {
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# @4 `5 x) ?. R6 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
) ^5 r9 ^3 v0 }0 s2 I' H9 S mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 L, Z5 |+ }7 G. U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 E& }# }7 r" U" z
" X! w% j5 H# A6 E& y& Q# l
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) i5 t* S" Y! O( f. a h& g) P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% v* Z# y0 g" H9 B. n5 \ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 ?6 r! x5 j P. e( F$ t* |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* [. P; D' w5 g* E7 R% S
' ]. U- p/ k: ]9 S
mcasp->regs->XSTAT = 0x0000ffff; 0 G- Z/ l! c+ ^0 o
mcasp->regs->RSTAT = 0x0000ffff;
; X$ W+ ?9 g. ^# G8 g5 Y* |; U8 y% ~7 a4 l* l1 \4 r
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 H+ N+ \6 l: l2 ^: Q7 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ o1 |; c2 [2 W' ?- j% t& J0 s
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* Y% S& b/ G+ y5 f% U; w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- v( m0 p ^. w
b# t7 F8 T7 ~- e1 p0 S+ v /* Write a 0, so that no underrun occurs after releasing the state machine */
* `) W- S( a" G1 |3 l mcasp->regs->XBUF5 = 0;
+ A: c- Y2 D! | c+ Y4 K: Q* y mcasp->regs->RBUF0 = 0;& O' E) c( d" E/ a
& z5 o8 x- t4 g8 @+ _5 x* R: A! U* O mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 ^' [) d% [' `7 k0 L( l( v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ w& M8 l. J1 j6 i1 V+ @
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" {& @4 _2 ^; s- G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# [: E$ y& _6 y$ u$ ^
# e1 Y6 D; S* V# I+ W
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 I( t/ e* [' _& T. j6 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 g3 P# {% N* B' _' [- j8 F6 B ? mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 n7 a; A" P5 F3 k: [5 f( I$ N" s5 }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: {2 K1 u& I% O& s1 e4 ]8 B2 o1 l# D& D/ v
CSR = 0x0000;! B4 t+ a/ [4 W9 O0 y
INTC_INTMUX1 = 0x3d;) _+ C9 I: l; w. b- v0 t* T
ISTP = (unsigned int)vectors;! N& M$ {" \* J
ICR = 0xFFF0;
1 H; Q) x6 V! H! b9 t2 \2 ? K; W8 _ IER |= 0x12; ! T8 ~' W7 z" l. W/ a. S
CSR |= 0x01; ' s5 ?/ K& x+ c5 b' o8 k5 E9 E; G7 Y
j! E0 D6 I g' ?) [ l
/ o' }* Q$ N' B0 y/ H; E9 ~: r( e. b1 V; E% A" q
还有就是两个输入输出函数:
' i$ o0 K0 ^( P" Ivoid output_sample(Int32 out_data)9 j M4 I; T4 I, I I) A; o9 z
{
1 ^0 {' f! s. x$ H# W0 R( ] AIC31_data.uint = out_data;
: r6 g. E7 Q# W* a9 Z# |$ m1 [2 E( { MCASP1_XBUF5_32BIT = AIC31_data.uint;3 E4 {) R0 O4 o) w9 r/ n: @! X& L2 M
}, X' g0 B( k A% z# |
6 |8 q: F9 ~6 ?. o% v/ a) ^% @# w
Int32 input_sample(void)
?; Q' V/ e w7 s# S; p{ U7 {% [6 G2 E. M' ]
AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ G; E/ v: o# ^2 m3 U9 {9 W0 j return (AIC31_data.uint);
( Q2 E$ P# [) S) {}/ v% S, Q6 D1 W) N$ j9 y
3 g; J4 e$ J5 V: r" @
|
|