|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* S5 L& [/ d/ k0 A( h/ q4 emain文件:4 @; `6 H7 ?, Z
interrupt void interrupt4(void)
$ Q F0 L9 M, |7 b{
' L1 w5 O( c, y9 l; w: x Uint32 sample;
( x3 T6 `0 B* S+ G2 H) Z2 q* `! |/ T) A$ D% R/ F) [9 v% y
sample = input_sample(); // read L + R samples from ADC# K& R0 R, m/ L3 n v9 D- q7 t
output_sample(sample); // write L + R samples to DAC
! A5 B" u# d6 P9 r! f5 q( a& z return; ^. w4 R* a5 o0 U! `2 ^/ ]
}
; o! c% L4 e# t1 @) A: m( b2 o/ w, E7 c
int main( void )
% I; I5 h+ ^4 r4 |{$ @$ t+ p" z3 S A
7 T+ G9 s1 }2 o% O, A% M& \
/* Initialize BSL */; U4 w0 W ?- A
EVMC6747_init( );
+ R. C& |/ x& y) Y: U0 T/ N7 L /* Call evmc6747_intr function */! Y. \1 ?. v) ?5 \
aic3106_init( );
- `8 d; X& y( v. G. H while(1);
$ Z0 [' l1 A2 o! L/ r1 |8 K6 l}6 X9 P/ ]! d/ o8 p: q4 ?
% M7 x2 t0 R- m: v' B8 W
0 S6 `7 z$ N3 N- p" d" b) vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, J0 T& V* B* |/ n3 w/* Initialize MCASP1 */- m+ ~; _9 P# _$ G/ C4 H
mcasp = &MCASP_MODULE_1;( S% J; i# u5 [0 j! x
mcasp->regs->GBLCTL = 0; // Reset
; d8 s" ^2 _$ L% V mcasp->regs->RGBLCTL = 0; // Reset RX) l/ o& G+ [6 X6 o8 ]! m9 l' g
mcasp->regs->XGBLCTL = 0; // Reset TX
" w3 i' ~1 h# Z% J+ Y mcasp->regs->PWRDEMU = 1; // Free-running
) s4 C1 B5 F' L2 S // configure McASP0 receive registers6 r7 _' V* a$ s& A2 ~! {8 `1 B
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 ]0 k% u" L8 { mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) ?1 B! C: ^- o4 a7 y2 I
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word. @/ ?6 y. q0 [2 P: {
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 e b+ y( \/ L, @! n0 w mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) J7 _: s0 s( Y b( D, \ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. A5 R! z3 s* r3 { _ mcasp->regs->RINTCTL = 0x00000000; // Not used5 Y3 I8 U) R& Z' ^- h* e- {
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" j: N9 X" ?! Y0 G" J5 T9 J E5 `* D, h8 ^
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
h& l9 z4 S( F" ]7 F5 j* D mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 y8 Z4 z; B7 B+ j$ p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, N% y e3 v6 l
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' |& T/ k* r \; R" z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
4 R$ x7 I. z$ |! u mcasp->regs->XTDM = 0x00000003; // Slots 0,1! |$ {2 f, b7 q# S3 ]9 k
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit- A/ Z% h( P) d6 |! E
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 {! f8 Z3 ~" z1 }8 Z7 r- X
# w% d. r0 z6 C2 |' u. K
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! l. P# u* L8 C$ X mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT: ^ ]5 {, G+ U" d9 z0 U, k
mcasp->regs->PFUNC = 0; // All MCASPs; e# v: P8 U+ }/ {
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ m9 k8 ~# m, S3 q2 r$ G+ ?5 d5 q$ p/ l2 K5 u
mcasp->regs->DITCTL = 0x00000000; // Not used
* [# L9 H/ p' |. x mcasp->regs->DLBCTL = 0x00000000; // Not used# V9 O2 h4 a( r3 M& _5 R7 K
mcasp->regs->AMUTE = 0x00000000; // Not used
0 @5 I8 T- Y9 V
* e' B4 j. q! \+ ]( S, U2 w/ C( o/* Starting sections of the McASP*/" E' _) Y3 V% K' D. X# i! A
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & D' h& p* l4 s, _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 R+ M- W& Z% B mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; A* p) X) y8 q2 d: R1 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 v" X. k2 r' X9 }& C6 M* U
+ x( w' E9 n i" Q6 F mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 H5 l& H* U/ [1 I2 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 J% n/ q! W4 Q3 \4 v5 B mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( e5 T$ l& n6 p2 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 x/ R$ s l' M; m9 R. v
m7 J, j& v$ h& D+ C" V% \
mcasp->regs->XSTAT = 0x0000ffff; 7 c/ F4 t. L; y3 m0 L: M9 z! T6 I
mcasp->regs->RSTAT = 0x0000ffff; ! o Q/ }& J3 m# a
0 N% A2 q% `$ D% \
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% A3 |0 W, k3 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: ?7 S4 y) d$ K! s/ d0 j mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! p* r# A& a5 `; l# H) { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 [3 ]) [7 E2 A6 u* |9 A$ G ~. U+ W, Q; p9 A' a9 D
/* Write a 0, so that no underrun occurs after releasing the state machine */, A1 d+ q) n6 R0 M/ ^% @
mcasp->regs->XBUF5 = 0;
3 @$ z1 U0 v$ o" N. L4 B mcasp->regs->RBUF0 = 0;) ^; c, f1 ]5 k1 o5 P
: o& t, t+ U4 r mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % C: a3 X h- g2 J% }( t& X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 |, h3 q) }' \7 C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , X9 H" C6 x2 q0 {7 U& L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* S; q# ^( U" R' h3 V1 ?2 Y
# @$ Z+ Q8 d$ z. c9 z1 w' _ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' X# ~6 f' s; v3 \6 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 D+ I! e+ L& }8 U; z- m7 W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : d& [& y( m ^ ]/ l; E; i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 C& }3 l- x R1 M$ [0 V* e7 d2 M) ]1 Q4 i, _
CSR = 0x0000;
% A& d* D7 r& G3 c, u8 Q0 \ INTC_INTMUX1 = 0x3d;, L) r8 x0 g' A
ISTP = (unsigned int)vectors;
% y+ n, Y1 x% t ICR = 0xFFF0;
4 _9 ]5 {1 U& X, }7 l IER |= 0x12;
! q: p8 m7 q/ a CSR |= 0x01;
& O: @# s2 G1 v' u, w0 V& c
0 ]( B L4 m* N h2 i0 {3 z5 Z/ J
4 A' W+ { k+ C. v6 r* z; k
& g! F5 R5 s/ a2 B! o还有就是两个输入输出函数:8 A( M2 c2 ^. ~' X) J
void output_sample(Int32 out_data)
I4 D3 z( Z- s* C9 k% N{
/ J0 ?8 m3 R/ X2 ?, _ AIC31_data.uint = out_data;
' v% R+ j: A& @' ?3 _8 R+ b5 z7 ` MCASP1_XBUF5_32BIT = AIC31_data.uint;
; s& \- |) x5 U" X/ j6 p}7 @. o7 n; |! | D$ w
; f- f1 E% y; u" F4 VInt32 input_sample(void)
# p6 |+ E0 d5 |{
- n( {! e' s/ w. q AIC31_data.uint = MCASP1_RBUF0_32BIT;' ]8 R. W' u! [/ ]/ A; H2 O( n5 [
return (AIC31_data.uint);* r! V% A( _* ]4 j1 N( f/ ^1 z6 i
}
, i* V6 k+ l6 A5 }( b$ A
& n" \% e; `+ g |
|