|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: E c2 ?1 f/ j5 e; v+ }; S
main文件:
0 i' Z4 ]5 t Ninterrupt void interrupt4(void)
7 L/ B2 J w: {/ \{, m4 W8 ^: m" K' S
Uint32 sample;
1 V/ o$ {0 J& Z0 M/ G' P
' p g" e% F+ Q. \1 p; c' R1 k sample = input_sample(); // read L + R samples from ADC
0 n; h' V& Y- W output_sample(sample); // write L + R samples to DAC ; r: D) `) o0 K' R [) ~! _
return;
+ E1 G% c5 D; ?' j, r}! F U+ O5 P. ?( u2 U8 u
0 ?5 E2 v9 u5 iint main( void )
$ ]; \+ N2 x5 {: B{) |* v' b/ t; A& y
) [4 x ]5 S+ f- w2 | /* Initialize BSL */. x" [7 g, r$ Q$ K! |
EVMC6747_init( );, F3 C4 o4 x; K7 I5 m; Q7 J
/* Call evmc6747_intr function */5 E8 {1 H) e* D) B* M7 r( n8 Y
aic3106_init( );
/ v& s2 v+ a+ ~1 c: W6 F while(1);, u+ I- K% v" _5 v; }
}* d: _) ^1 F9 u* s
' l7 N# Y7 |& W* Z& r' J. M
( M T3 h0 y( h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! V9 E9 t. h1 F3 k% T' ^/* Initialize MCASP1 */# I# F" l; } J( _# E( S
mcasp = &MCASP_MODULE_1;
% \+ O) n i9 p mcasp->regs->GBLCTL = 0; // Reset
! R" P$ r- q9 b2 E5 t( Q4 Z mcasp->regs->RGBLCTL = 0; // Reset RX8 c2 [6 B" s9 `+ ~1 ]
mcasp->regs->XGBLCTL = 0; // Reset TX
/ I. [+ [0 H( B* z3 q! g mcasp->regs->PWRDEMU = 1; // Free-running C: K: ?' \- ~0 a$ l" X+ A0 ]
// configure McASP0 receive registers6 c! k7 w4 \* s* P: S9 Q# M: R
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: z, E' K( O) p" D6 |
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, e1 M$ f4 I4 ~8 J j/ t3 @
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 P$ A9 X7 c- C+ ^
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 J" d4 v/ u- b" \2 e6 I, D3 S: @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& k3 c3 q! ], ^' f
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
[# o( }; Y8 Y! D8 Y$ a% y mcasp->regs->RINTCTL = 0x00000000; // Not used1 L6 C* F2 u8 ?0 Z$ \4 l
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 {* _6 l. V# v2 {2 Z% n2 x. x) v+ e
+ x# d# n1 H% e% r: f q$ L mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used ?6 V/ }7 m+ y- ]: q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ f* Y+ L# X$ y* N5 f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 F* U$ @ H5 W/ l. [3 d
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) y4 s: k4 W8 T! M: |6 @9 m: M
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ N1 s5 z( m h+ n" Z$ _ mcasp->regs->XTDM = 0x00000003; // Slots 0,10 {2 B. ^8 X3 \+ G+ p5 U8 H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" f& V1 a9 Y5 E7 Z6 l0 J; P# e
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! P* F! |( c2 \, i9 h# A* i3 X
* l Q6 o3 _# E0 Y# K! Z mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* l7 c+ i h% W, ^6 L
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
& g$ F$ N2 L, t! o0 I p mcasp->regs->PFUNC = 0; // All MCASPs8 z+ Y$ V9 ?& ^
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! O4 R% J4 {+ c- g) x2 R/ D0 A! \
6 ], D) k, [( L$ o mcasp->regs->DITCTL = 0x00000000; // Not used5 t. M3 s7 C9 y B' p; o, h3 Y
mcasp->regs->DLBCTL = 0x00000000; // Not used2 E* H! Q; i h' T
mcasp->regs->AMUTE = 0x00000000; // Not used
# J7 u; L5 @! J2 M
, G6 D6 m# E8 _/* Starting sections of the McASP*/0 R% }( ]" @9 c
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 Q4 N0 U8 {. e5 M- ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . T8 ]: v D/ h3 u9 ]" l' |2 ^; b, F
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; e7 ]4 z F6 a8 b) E: X4 d3 @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 f) c4 t2 T G1 X# g: `
* x6 O" h& }! d/ T. c mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 J& [0 o+ q) E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 F/ U3 Z7 w- u
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' N3 Q, V6 D1 {7 V9 N$ O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 ?, v/ m9 B: e; H% S# ~
7 _, P0 u1 d2 `( z
mcasp->regs->XSTAT = 0x0000ffff;
, Q% Q5 r- Q8 w3 H0 A mcasp->regs->RSTAT = 0x0000ffff; " l4 A. }8 \2 ?* A
4 r9 V1 C2 ^ C( I1 q7 d
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 I4 J9 p" q9 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 j) [% Z- d/ q1 H3 |1 u/ Y- m2 \5 k
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 E3 d$ _2 Z5 s# s! P* ?7 U+ F& W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; g+ {( d) \; Q9 s3 z
& P8 d( J( z* h0 h! A! a3 E /* Write a 0, so that no underrun occurs after releasing the state machine */
1 H( Y# F. m! z% k. f/ \# _4 u mcasp->regs->XBUF5 = 0;; ?% _% `9 y5 V1 y2 S2 u; Q- W. k7 H
mcasp->regs->RBUF0 = 0;
0 G. D0 t: n) s4 J# y" M" n, q/ D' t0 L: A
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 `( q$ S [2 U+ k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 C* p; y: e5 ]4 x" h; A0 B mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' s) F3 b) h% i5 A1 ]9 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' k! S4 Y& [8 ~/ L* a
. \4 F1 y4 C! H/ M2 V mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % v; s& X$ U3 {/ l! y& G& ^- ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. f9 @* j$ D" ]! |& H" p1 g
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
n' _2 p) f, T* B) q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 ^# T, [+ R. w1 d8 k9 K
# O; e! J- w& e; ~6 a3 _ CSR = 0x0000;. y1 y! y. ?- q% z
INTC_INTMUX1 = 0x3d; o) \5 Z4 u. S! M1 i) \
ISTP = (unsigned int)vectors;! r4 k6 P' E% v0 Z! {
ICR = 0xFFF0; # _3 ?% W7 j. F
IER |= 0x12; & v2 D5 @- x* v# b0 z3 B- `, `
CSR |= 0x01;
6 u' L! g+ l6 V" W0 m/ x; }8 t& P7 y) e9 N, S/ w! B& L* C% h2 ~
' l+ b' E9 _9 J( ?+ J; f
( m! [8 ~ _1 u9 Y7 ]还有就是两个输入输出函数:
) x3 R! j. @0 l. ~; J$ R# evoid output_sample(Int32 out_data)
t. a5 Y6 W- `. T! K2 N{& R( y# f5 U; p% Z# W
AIC31_data.uint = out_data; 2 s) c+ c6 R/ i1 O
MCASP1_XBUF5_32BIT = AIC31_data.uint;
: q& i! P3 j4 A% Z# y}
2 y" p: X& J- F9 I/ }
0 p9 B9 k3 |$ \( RInt32 input_sample(void)
2 {: ~- x5 Z" Y* W! ?7 b- T{
, {! u) ^# C" H AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ T S) ^: Y8 ^ |+ S8 b return (AIC31_data.uint);
0 G. w J' L# O2 [: Z}
" a8 D& y- A x4 a: e) I2 X8 K; J5 u( | @! x6 o( g) `: j+ f
|
|