|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* I- `0 G$ H7 ]+ `
main文件:
; b5 w( [+ B E) Jinterrupt void interrupt4(void)
8 a0 o! S8 H, F2 E7 h# J( |{
+ z5 Y9 J) _, N/ ^( H Uint32 sample;
0 m* D- w# y3 y7 B& ]" a/ q$ i l" ?+ }; z9 }. `- N
sample = input_sample(); // read L + R samples from ADC+ ]' x- t- T) s4 x
output_sample(sample); // write L + R samples to DAC 9 n" V3 e2 c+ P6 s/ ]& j$ w
return;
- G ~& y% U$ Q6 @2 g}
2 W7 D& J7 z& D; @/ C8 a
]5 w- }7 N; ?* X0 @0 v, u% |# Kint main( void )
& @, O5 Q; Y4 \{8 R3 O6 j9 J9 J# i8 o6 K
$ t" f9 V A1 w& t; N7 k5 @9 m, O
/* Initialize BSL */! z: g; `" M! w5 ^
EVMC6747_init( );
1 o' Z1 l* y. e- z& j* O /* Call evmc6747_intr function */: p/ h. z! _! G2 e" f
aic3106_init( );& _' b: R$ H/ Y. @+ ~+ D
while(1);
7 V/ A5 e/ ^; v- L% L; Z}
6 c7 e( j: s' U; ~0 u+ q& }" |
# L& k' W; S1 ^2 E/ A, N# M4 t! V- T3 g9 F# P/ D' A! o3 m6 s M: s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 W* w/ s6 I8 Y3 O8 C8 n
/* Initialize MCASP1 */( }! o/ k4 K7 [; q! d' v
mcasp = &MCASP_MODULE_1;4 n. t% b# Y5 d- X
mcasp->regs->GBLCTL = 0; // Reset
+ O9 G. F3 Z* W! T4 j( I# k7 O mcasp->regs->RGBLCTL = 0; // Reset RX3 z2 I! C. v7 N! f
mcasp->regs->XGBLCTL = 0; // Reset TX9 X4 d0 P6 q) P. q5 K2 d
mcasp->regs->PWRDEMU = 1; // Free-running
) J# O. B4 Z4 i/ L // configure McASP0 receive registers7 Q% a4 [& W' z7 ~# d
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 I5 y, K5 K7 k2 B
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* c/ H5 f- H. z, x; K mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) v e2 O# s# ?
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& s$ \: m7 z0 M$ `
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 [$ h: H* W3 f
mcasp->regs->RTDM = 0x00000003; // Slots 0,1) A, V4 E9 O, f d! Q+ I" O; h
mcasp->regs->RINTCTL = 0x00000000; // Not used
/ H4 H6 A* n' J. Q mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 e3 m# a1 O; H. T3 p+ m% e
6 E) w* l# M" ], d mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ q% G* Q7 A/ ~7 d, [ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% A( O$ r7 g0 i6 q mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 d9 {0 }$ ^1 ` X% ]' E6 O2 N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 Y6 l+ U/ _8 S$ D, T" Q7 S
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK3 Y1 q w9 v2 [( G0 r, @ N7 y# C
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
4 A* M' c3 v } mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 B+ {3 X0 ]& ~3 i: }- D5 W3 }2 G
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, G9 N" e/ |4 Z/ X. c4 R6 ?" |: P8 L1 I- k+ h
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; C4 D# g# Q( r8 S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' _7 |+ B) Q* r; P. [4 N* S mcasp->regs->PFUNC = 0; // All MCASPs$ D$ ^; l. _/ G5 p
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; z" X" B% M6 o
! b9 `! g: |3 s( ?2 D, N+ ^# e
mcasp->regs->DITCTL = 0x00000000; // Not used& u& X0 K3 T2 q6 |& q2 i
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 w1 i# v# e) E3 M+ e2 Y mcasp->regs->AMUTE = 0x00000000; // Not used
) }% x0 D9 @$ I' W! Y5 H
" o5 W8 G: w, Z& N/ m) g$ @/* Starting sections of the McASP*/8 m3 k0 t0 ]9 @% ?) D0 \9 `$ D1 K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 z; \. P) \, L1 a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, P+ u2 ]% J3 r' q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
/ J4 T4 {* y; q- L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! J/ z( G, Y$ g3 Y9 o( u. }, G, B* i7 r' r; E4 a
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - I6 J4 Y0 B0 C; a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 a' d- K- Q& S; J% O6 q mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; _& V: b1 G0 o7 O1 N7 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); J; L7 p7 D6 p9 x" B! |1 D
1 {0 V+ k. k+ X/ a mcasp->regs->XSTAT = 0x0000ffff; * m% @0 l# j. o1 W. c1 [8 e
mcasp->regs->RSTAT = 0x0000ffff;
' u x# A& H% D+ Z! ^, h3 V4 x" k
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, e; L, L6 W$ G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" H% \ f8 @) M- h ?" V1 h. R: F mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % u+ c( A+ w5 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. t2 a+ y) S3 J* R
) v5 p# Q0 U4 ?: x. t
/* Write a 0, so that no underrun occurs after releasing the state machine */
% M0 c2 Y' t4 y* n3 l2 W! y, Y mcasp->regs->XBUF5 = 0;) p8 ^+ ?" R- C1 ?) G: m0 \# N! \; N
mcasp->regs->RBUF0 = 0;7 g3 f4 m' i4 y. _' Y
) w& C5 T* T* A% D- @% S1 W
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 x" r; b% b% T5 G! \' t8 @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. z' d1 k& B" z+ R" D# @$ ~
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 A; S. P% x H6 q5 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 \# R+ [3 T6 K$ Z; T1 M5 I) R6 e) y% d# z3 [5 Z$ `- Y( B
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 P8 z) R2 L2 ^( {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 y1 p% Y0 J) N6 e: A/ j1 u mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; u( Q; k& i6 R( y: L! t2 q% r, \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# p6 M L I7 i/ S7 D! C2 y6 x& i: V) {- q' x; u: c3 w
CSR = 0x0000;
2 @( R0 }6 [" ~- M: W% H0 C% e INTC_INTMUX1 = 0x3d;+ ?; S' ]! I, i) T( |2 [6 Q
ISTP = (unsigned int)vectors;
& `( Z0 V, J, X# @ ICR = 0xFFF0;
( p3 h0 G: v" q D5 {2 D IER |= 0x12;
: n5 K0 d: U) A% X' D# d O CSR |= 0x01;
5 _8 ?! b% F" H) I0 }6 D5 _# F1 r4 n
( H% \% t+ h. G$ g. J+ A
6 p7 Z5 s. }% T; y* X8 `; k还有就是两个输入输出函数:' l6 w( o# E+ q% a/ _$ [' M
void output_sample(Int32 out_data)* Z$ h' a; [4 X+ @+ e! c# v/ o2 s
{
+ E ]# {0 R, ^2 S. Y& h$ C AIC31_data.uint = out_data; ; ?; }; b! X9 c5 j9 k
MCASP1_XBUF5_32BIT = AIC31_data.uint;, W) M7 N# n1 q8 ~/ d. T+ s
} |# I2 b4 [6 c* E+ r
7 e+ a) S* g/ X6 ^) Y
Int32 input_sample(void)
' I9 U+ A& S1 U3 D4 f{
( _8 \& l' I$ x AIC31_data.uint = MCASP1_RBUF0_32BIT;
; T$ j) Z5 p- }7 d' t" x return (AIC31_data.uint);' m% X" _ J6 P- W6 \9 m
}4 {: Z/ I) a! k: i
. [9 ]& f- u9 x, z [
|
|