|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 A& J5 M5 z3 D: L3 Z6 f# l
main文件:6 V V2 ?( h( _, w% `7 t6 R. E
interrupt void interrupt4(void) " v5 W( {; m; d. W% E: _9 Q
{
6 z5 r! ]7 m# x Uint32 sample;
" {# H. c% [ |% q8 @2 F: v
6 ^7 I7 V2 ]$ ]( M" O) d sample = input_sample(); // read L + R samples from ADC9 V1 Y6 S" n; Y5 R* x3 `
output_sample(sample); // write L + R samples to DAC
6 n0 ^* x# ^/ B& S. B) ^. ? return;
( J1 j, J0 x; q( o& n}: G/ D* }8 m$ v: H% R- L$ }& p
- g/ C7 l( K5 O; W: `$ A
int main( void )$ W* p# w5 D& u% n" t/ |
{
' T: r/ K: f' l ^0 n/ U! n; ?) X
1 R9 f( F. z6 [5 _6 B- Z0 I /* Initialize BSL */" x( Y- E6 C4 p3 o& ?6 z# k
EVMC6747_init( );
' i0 p8 }' D" c1 E( T /* Call evmc6747_intr function */* U# D* G% M0 m" N7 f
aic3106_init( );. e; J) Z% q2 i$ o. t
while(1);* X( I; s+ m+ S9 ^- x
}
& Q* f; ]) D) w6 J2 L8 G }8 x( B, [ b7 e! l- X
& E9 t. b9 A/ y4 I' d ^- @7 k: r9 ^9 J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% ~4 ~/ O4 ]8 K
/* Initialize MCASP1 */
1 A( n3 i# T& q; { mcasp = &MCASP_MODULE_1;3 `& _" m/ R* R; u/ d9 M4 M
mcasp->regs->GBLCTL = 0; // Reset
+ i4 f0 t& k Y, p! w4 Y5 I mcasp->regs->RGBLCTL = 0; // Reset RX+ z' p7 i+ d9 I
mcasp->regs->XGBLCTL = 0; // Reset TX
& j2 y4 J! q( B3 a, m' S2 _ mcasp->regs->PWRDEMU = 1; // Free-running
- t& K4 o: o- T/ Q# y$ u& z // configure McASP0 receive registers
+ `0 ?! c8 G9 C; U" l) N" }6 E mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 B) L0 F8 [, e6 |) e
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 v$ F4 Z: h2 I! x5 Z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ M' p! n6 N& C/ y9 @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- d- C j! C8 |" W9 R- Q' r2 O
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* K8 O/ ?* ~- a8 v
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, z5 M7 n7 t/ V' m2 e! K* h mcasp->regs->RINTCTL = 0x00000000; // Not used2 }4 l) [) A; \
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j& e- ]4 e6 b# {, [, q7 x1 X p; H
9 i" V" J2 [' W! l mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 D9 s* L" ~& s" V( y& G; d
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* c4 @2 ]; P4 s5 ?
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' p$ V5 z! Z1 R; d% A2 a. D& d* I
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 g% J9 ~8 v3 D' R) ^4 d% W mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 D$ P4 k9 W. k# W mcasp->regs->XTDM = 0x00000003; // Slots 0,11 P3 V/ s% C9 v8 ]8 P) _
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ P& \+ T8 `( [8 H6 f; H
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* G, r. A; }- R5 H! l% s0 ?9 L9 m C* d0 Y+ R5 i O! ^# M3 p
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ t7 l* j/ \2 e1 ?3 v mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
( e8 ?3 D/ b6 C3 _1 ~ mcasp->regs->PFUNC = 0; // All MCASPs* h Q& _$ I* M
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; q7 F* W# a J: B
( e: J3 S% I$ m" m& B! t h% [8 P/ H mcasp->regs->DITCTL = 0x00000000; // Not used- G# O4 |/ I! u* Z7 {- K
mcasp->regs->DLBCTL = 0x00000000; // Not used
# A5 e& ]! p7 C, D) E mcasp->regs->AMUTE = 0x00000000; // Not used- `3 n% G$ N. b" z; @( o- B
$ S, V# O" [- G9 j/* Starting sections of the McASP*/' c5 P0 Y( t4 B) s
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% k$ E7 t% S6 B2 E- r1 V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, \- |2 A% N: r8 M% b! r' T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 u4 G- l6 {4 a% S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' f7 f4 u: Q! ^
9 A* w* i# K5 v5 ^3 d! O* u7 q) U/ y
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) s$ |- L& F) p0 u5 {5 Z# f2 ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, W7 Z2 I- Q) P5 D; C! Q+ Y mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" D! g4 R. Q5 z& M- Q) \' z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 u2 s7 M3 x7 A. b+ O
* K1 C) }4 f5 y5 a mcasp->regs->XSTAT = 0x0000ffff;
) W4 I2 u! _9 w) g$ w mcasp->regs->RSTAT = 0x0000ffff;
/ [# n2 \+ z7 j& k- \( D+ a4 k5 m1 B$ P6 w5 o1 H
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! c' o: B' Q( Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% j# k. n6 {; I( `2 A mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' F: d% l& ]4 g, h3 p! m+ R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 j( H7 f" m; ?4 ?; Z& `$ Q
+ Z3 Q4 N& j% ?2 t6 A' r3 q$ C z /* Write a 0, so that no underrun occurs after releasing the state machine */. ~/ s- W& K7 Q# g/ A
mcasp->regs->XBUF5 = 0;6 H7 U5 w, E& P
mcasp->regs->RBUF0 = 0;
) |5 i, A8 l- e, |' Q& ~* l* ^/ F+ \- F5 a
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - e* X6 L3 V) R( K1 g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 x2 l0 j& }7 b" Y* u0 P mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 j! ~3 k8 l- a- M. O3 H* I2 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. B/ {, a( J m
) G$ B0 U' L& b mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 _, X+ ^% y& L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" o) I# W) L$ u
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! S+ r9 `% B; A& Z! h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' D4 O! `; F* W9 \& U Y. w
0 h. u4 G( D% q5 \ CSR = 0x0000;
1 E; B% N- _7 X; ^ INTC_INTMUX1 = 0x3d;+ x$ a; Y7 r( S' {) V% H1 I6 m
ISTP = (unsigned int)vectors;
6 I1 |, G; s1 J ICR = 0xFFF0; 9 T5 k; Q8 Q2 J/ F0 F" E9 x
IER |= 0x12;
2 J6 Q! B" {9 L' r6 [3 z CSR |= 0x01; ) E+ e. [& Y& I) {5 G' Z @& Q
- r |+ c: e( U! H+ X2 s/ O
* C9 y' ^8 i" C8 e' Q3 V7 d* I
. ^7 ?+ e8 j1 ?' Q* D6 K8 ~还有就是两个输入输出函数:8 ?# F9 e7 v5 G
void output_sample(Int32 out_data)
; E0 x( V+ c5 n. \2 I; @{
3 s" u7 z+ h8 Z AIC31_data.uint = out_data;
5 ]/ Z7 f& p) X. F$ { MCASP1_XBUF5_32BIT = AIC31_data.uint;4 Y8 T( u" v/ s+ A
}" Z* m W% X" ~5 c0 C# M% B
2 K# E9 D. ^4 I5 g
Int32 input_sample(void)5 y- ?, m9 j' W3 N9 E, [# X
{
- t0 P( D8 {0 e8 f AIC31_data.uint = MCASP1_RBUF0_32BIT;
: `5 ~6 m6 A" B) P% q return (AIC31_data.uint);
2 v7 w0 {" y; R5 x}
1 P" U1 i. n0 T4 v
& F1 x# A/ G( H' i% c$ o |
|