|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 p# g& s4 E3 s& a& M- _, Gmain文件:+ ?3 T1 E/ c* w+ D+ \; j/ g, _
interrupt void interrupt4(void)
O) w8 \/ G/ y2 t5 O{* \7 I- H0 s1 ` A" e l
Uint32 sample;
% j- z; R# b/ K3 s
( _' X( x) a) I* U% Q3 x sample = input_sample(); // read L + R samples from ADC
7 F1 y F: f, g, C( K3 { output_sample(sample); // write L + R samples to DAC / g8 y: `0 E2 Z( b
return;: G/ _% Y. l% Q" O; r- S
}1 x& ]. @, T; G3 X0 _2 L
: D; ~5 J7 E- G2 n) P1 f& D6 y
int main( void )
( S' s5 \' ^ F" v5 F{! | {: z" K+ R
' k$ f: X' L- }+ ?" s% V
/* Initialize BSL */% K. t0 {8 a9 ?' f4 a
EVMC6747_init( );6 J& \$ S+ C2 ^# b; Z, O, B( Q) }
/* Call evmc6747_intr function */9 d' K P% k- ~* N( t8 b
aic3106_init( );
! Z. O. R/ t& C I while(1);+ x7 o# {. b8 o- ~1 O n0 g0 f
}& D; e" n; c ^ H
! K/ E) F" X( Z( `) T
1 [, p) M' o$ {7 o6 d. Caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 f! W4 \+ X0 t, }) g5 u+ a$ O; N* G4 P. ~
/* Initialize MCASP1 */% F9 Z# ]- t1 X7 ^6 _3 O
mcasp = &MCASP_MODULE_1;/ R! D* f: |% y( R
mcasp->regs->GBLCTL = 0; // Reset( f+ N2 B o5 H: B( ~7 S+ l
mcasp->regs->RGBLCTL = 0; // Reset RX# K. H* S: W' E. ?7 w. q
mcasp->regs->XGBLCTL = 0; // Reset TX' j2 E8 ^' O/ N& L/ c7 p& |
mcasp->regs->PWRDEMU = 1; // Free-running
: ?2 }9 V& o+ l! t0 i // configure McASP0 receive registers5 z6 n9 r. \& ^% Q3 e
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
- }5 F+ ^: ?. _' B' W mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus J- g' _# G* H0 u5 t
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& `( @( }4 r8 p' C mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 Q) n& K, I) m: ~( @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, |5 K9 x" r4 B5 h5 g/ \: L! k mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ g2 o8 v1 d( S: w6 P/ ? mcasp->regs->RINTCTL = 0x00000000; // Not used
6 W, g- m" L% d mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# h5 F4 D7 T) m5 W2 ~$ {
8 M& A2 r3 q3 r" F
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& I/ r+ |1 q* ~7 J mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 Y' X5 c( t1 e7 ~- N mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 p0 `. E. J! }) _. z
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 T; @0 R& N0 O( p! X/ I
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( d# P, }- p6 O
mcasp->regs->XTDM = 0x00000003; // Slots 0,1! z3 a% x- ^) o5 C
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
$ l; Z9 k: d F6 g) T1 k+ y4 | mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' h# j0 p2 C) o( {7 x7 z2 M; U
$ z0 M0 J) ]: H3 r7 O( K* p+ e
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
) b" j' a1 g$ ~( X8 }/ r" ]/ @ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ F4 f9 p! Q3 t d0 k0 m7 ^7 ?
mcasp->regs->PFUNC = 0; // All MCASPs/ h1 O; U5 X! o, D
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# A' C4 |! S( @
& X6 [" Z7 @; c mcasp->regs->DITCTL = 0x00000000; // Not used
8 `: N; V) p! [; M$ k- z mcasp->regs->DLBCTL = 0x00000000; // Not used
: U0 X' v8 @- k2 U0 O" j& z7 F mcasp->regs->AMUTE = 0x00000000; // Not used
7 S+ e4 k8 ], R( r4 B5 m0 f5 |# Q
O) A [3 h; G0 z/* Starting sections of the McASP*/: [) }# E7 r/ ^8 M# }! K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & _: k1 D7 C8 }/ m- F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
) U" Z! v$ g% I, P4 V) n: Q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * z. g7 W0 k3 O5 Z/ r8 \/ g& O) [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* o+ c, M& N& Y5 r( f1 x2 E% R
6 y) W8 N& I* B7 r, f4 u
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % l* f. X; u$ Y% g2 N$ A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" o F- b+ @ p! P5 q. I! p$ {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 q. g, e- T$ W7 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% z) s. W. V1 a- T# v% p1 p# |
r, U0 ~3 }! f. ^3 S: u4 \ mcasp->regs->XSTAT = 0x0000ffff;
! {2 g" @" m2 U/ N0 b mcasp->regs->RSTAT = 0x0000ffff; " \8 Y0 e2 ]) D: T; g1 e
+ z3 F* r: _1 q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ j! j. I4 Z) d5 v$ F% Z- i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 y/ c* B& g! _4 J mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % T# |: C7 g9 @8 O) U& q4 h8 F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 z" u+ S' S" z% _# ?% c6 W2 ? T# n9 c: ]; o8 Z s1 `
/* Write a 0, so that no underrun occurs after releasing the state machine */
0 v7 d$ a& N* w0 P$ v5 D/ c mcasp->regs->XBUF5 = 0;
0 X! ]3 d1 P' _* q% t' } mcasp->regs->RBUF0 = 0;
0 J. V8 ?3 b1 p9 R0 F: [
$ f5 }" |( f: V mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : u! {* h* b/ E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
]6 y8 Y5 q# M6 O5 y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 Y* q& ?/ O5 r$ m4 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 g4 Q) r; ~$ f: l6 t3 s
1 \3 m) N5 k6 C* j8 D+ d2 Q" _ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ ~. a( L. F0 Z: e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 N1 w4 S# E5 R D; K1 @# y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 E& t9 o' j$ ~& X4 M3 p/ C$ v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" f A- {: j6 t3 {$ g* }5 e) J3 w# g9 ?, X& j3 v6 N! U0 E
CSR = 0x0000;: I. |+ A) e$ q$ ]; I% `3 P
INTC_INTMUX1 = 0x3d;5 T; d9 O: x; O5 a$ b2 R
ISTP = (unsigned int)vectors;1 G+ ^, Q9 x. t. m/ `: U3 b4 p
ICR = 0xFFF0;
: Q) o- \: ?1 M2 d1 W0 s IER |= 0x12; , ?) g$ Z- V v" k- g. X/ J9 J0 u5 U
CSR |= 0x01; 7 x% L/ S: d* S' g* }+ M, y
+ n1 U K" _; B
; W! e1 _) N7 ]
" F' A2 ?5 v$ v/ u/ h( K还有就是两个输入输出函数:5 A' b2 O9 M: W
void output_sample(Int32 out_data)
. U/ S" a' P$ C9 [# y. s{6 Q& ]9 Z# X: |
AIC31_data.uint = out_data;
^8 U" E0 q' N" @9 D! S: I; E+ k$ f MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ F" R/ N* M2 `4 ^9 x}
2 u1 Q+ k& m |. E( }2 z; R# P I' W7 e" E+ ]7 w6 b
Int32 input_sample(void)9 q: M$ B" B3 j0 G
{
5 T! ~* i6 a' N- k( H AIC31_data.uint = MCASP1_RBUF0_32BIT;2 s0 R0 }0 @! B
return (AIC31_data.uint);
; }( d; o; K- q( j, }9 u}
K M% y4 P* k7 a/ U7 [
( I( h" U8 B0 h: M |
|