|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 w% f3 e' E/ d
main文件:; j; c1 X6 c& C: U- y" m
interrupt void interrupt4(void) ! d! J" G/ y; L. Z5 m/ l
{
, D5 Z4 U2 T& H Uint32 sample;/ ?7 H0 b: y: E8 Q: E
/ z0 v( C9 ~* d' z
sample = input_sample(); // read L + R samples from ADC- b1 Q: ~0 m2 V4 ], N3 f$ v
output_sample(sample); // write L + R samples to DAC
" t9 A! j, ~* s' e, \ return;
/ Z+ f1 W& c5 @" h}
9 q7 i3 i$ l" L( D& p5 J9 z! u1 u M/ U4 f3 c* | @% `' `9 \
int main( void ); ~2 M$ U9 B$ k& H8 d9 G( u
{- Z1 V5 h' k* g$ o/ F
2 Z- l% }* h3 V. O$ j/ D; j3 M/ \* s
/* Initialize BSL */
. n0 m$ M: J* o! B3 X: T' \ EVMC6747_init( );2 G% x$ ] K. c( u3 B
/* Call evmc6747_intr function */
( Q/ P9 ]( F; w, I s aic3106_init( );
; c; |$ o) X7 p; Z- G) i while(1);
- }7 d- j$ g0 R# e}
P& N- L2 Z. t$ _( {
0 R5 @& d! m) L9 f7 c6 u# Y
8 | w# ~7 W; I, C* H' faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" _* w4 \; N, d2 G
/* Initialize MCASP1 */
6 k0 l+ S) j1 w2 e; o4 ^0 t: I- E5 T5 B' g mcasp = &MCASP_MODULE_1;
" @* j5 n( L9 Q' t3 U9 f mcasp->regs->GBLCTL = 0; // Reset" G5 M# S/ L" N/ |6 g1 M
mcasp->regs->RGBLCTL = 0; // Reset RX
% b9 @6 W. [ L mcasp->regs->XGBLCTL = 0; // Reset TX
! E8 I3 m5 { X: u) X/ Q; N mcasp->regs->PWRDEMU = 1; // Free-running( B P2 D) a+ h" h. ]9 g3 S
// configure McASP0 receive registers. t( q! a1 r& }; }' Z* {8 M+ Q, L% {
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" h* Y* A5 p) G; f6 h* w! c mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* S# r( C" y H0 L' }
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' G: X7 w2 f% j" F4 Q mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' k \/ Z# E4 L% b mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 ~8 I h9 _- ~7 v( h% t mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, T1 o0 Q5 r" F4 r% |8 E mcasp->regs->RINTCTL = 0x00000000; // Not used
* m- |( e0 |$ M& A0 e mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! ?' o) w/ f/ N9 @0 m+ h' [7 R: K7 A( s2 L
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
" a7 f# h7 I- J {; [( Z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% G% a0 Q, n5 ]' W
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! {2 @5 ?. W/ f8 s mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 z+ g) o( p$ [! Q5 u) t$ l
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( L- ^2 n/ Q9 \- |' D9 ~! S7 p# [ mcasp->regs->XTDM = 0x00000003; // Slots 0,1! I: H0 ]; L$ o4 F6 E( Q6 L
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 |0 n+ T" X, `
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 | z* W/ t5 k9 e \' f# k" \
/ E: i* o+ F0 K7 i! X mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- w$ d$ `+ I/ S; f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
# W& f6 j! `5 ]" o) Q( d mcasp->regs->PFUNC = 0; // All MCASPs# w) t! V) M% o, v. D; R( G
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" T+ H! n' C0 x8 t9 ?; y
2 e% g+ T: l( e, k: s mcasp->regs->DITCTL = 0x00000000; // Not used. v* v) T9 D" n
mcasp->regs->DLBCTL = 0x00000000; // Not used
; M* ?* q1 w# d" ~! S k mcasp->regs->AMUTE = 0x00000000; // Not used u9 n+ O, f1 {4 i2 K
2 p+ c1 {1 i x/ G1 `/ M/* Starting sections of the McASP*/, p& G2 }( }, H6 J+ q% k' I
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 @+ \3 ~6 Y- U& g- [; B9 u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; d W( N6 b* D4 G, d
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . ]" Y( Z. K3 X2 Z1 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 O6 h. ?4 y/ C
4 i2 g% l: E K+ C
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 v1 g" a1 y- D. @5 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); K! t6 e+ z; W- R. x( b
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( `2 h% }; @/ X* J1 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 i6 W$ ?3 l: P4 y _8 i1 O, @! t8 M
: [& L5 i6 Z g8 e" ]9 v3 V! d( J mcasp->regs->XSTAT = 0x0000ffff;
" z5 s0 a; N& D/ \4 o" { mcasp->regs->RSTAT = 0x0000ffff; 2 r* ~. R- j: q- c- O) S8 z
! i: {3 t1 @& B d2 D+ q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% P( n7 m' K8 y, u8 P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* h2 e* ]* e6 {! w3 |; x z" ~ N* o mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ?* P0 X- i7 G( N9 v; M0 P2 M3 ~7 m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 `0 K/ \. E9 V9 ^
$ ^9 T1 t" a) i! j* X4 J0 A /* Write a 0, so that no underrun occurs after releasing the state machine */$ X: B% N X$ g. \% j
mcasp->regs->XBUF5 = 0;! {* Q0 m1 r& x' ~
mcasp->regs->RBUF0 = 0;
$ }# t! A4 Z9 I0 Z" D6 J2 I8 W% i
n" n; Y m8 p; {1 a! n3 I mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) @& P: r' I8 C7 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; R2 P& t6 p- P
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " o% r: d& s+ J0 p* X; v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. x$ p+ d+ R* g8 Z/ X) O3 Z$ o* U) c5 I7 c/ K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' ~2 r7 ~, K5 s, X' g1 Z3 ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% f7 k, }2 v. z2 ~4 B( R9 v mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 K( L% n6 z7 O7 d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, }) }) i, o2 H; K* o
2 D9 e |+ l% `2 m0 T CSR = 0x0000;
6 q$ y# j3 Q5 a, s) y6 g% b INTC_INTMUX1 = 0x3d;6 \/ `3 w& r6 {
ISTP = (unsigned int)vectors;7 K& ^% f# i" M4 M+ _6 i7 |
ICR = 0xFFF0;
; w4 P, w& p5 A IER |= 0x12;
1 y) y) Y' D7 l, j2 q9 z$ Y& G CSR |= 0x01; + O$ a* }) w, I* D: b
9 L2 x3 }) b9 C3 K7 N' u, H3 a3 z9 I- p. t1 V
2 |3 Y" Y. R6 S6 H# b3 U还有就是两个输入输出函数:6 U: F5 |" U" Q, u4 H* i7 p
void output_sample(Int32 out_data), ?- n4 L3 S/ K* i: l: _ r; ?' w
{
- z/ `8 Q; H8 r/ a+ r+ R2 y T AIC31_data.uint = out_data;
3 ]7 U' t9 X" l MCASP1_XBUF5_32BIT = AIC31_data.uint;
( o$ K5 |: ^7 q# z9 G}
: {' A( s5 w4 R+ {3 {% l) y0 S `3 n+ U/ j. \0 [0 P7 v( r
Int32 input_sample(void)
3 E) n Q( V7 `- ~{ " \, n& `& ^' \: D* \7 B. m, n% K' o
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 S, k1 ^5 R! e, i5 f) r; h return (AIC31_data.uint);- \/ x) J% S2 j# W; D$ B5 G
}
% {1 s- i2 w: X6 z* d8 |/ n# f0 h& E$ [; k' L3 T$ V, _% i
|
|