|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% O- k5 l, O3 J, a* Tmain文件:( t5 o2 U. @% ]' y6 [
interrupt void interrupt4(void) % A# a2 y1 C5 M/ _( e
{
. M4 a3 X* p; P2 q& m Uint32 sample;4 m9 Q- m l7 U2 A% j7 a, H9 J
# M# S# C2 S4 Y) F" e" N9 q( m% ] sample = input_sample(); // read L + R samples from ADC
7 m2 ~9 j1 v* q; [: |( R8 f/ u output_sample(sample); // write L + R samples to DAC
6 e5 T ?( k/ _- s3 n8 u return;) e; V \7 s1 Q6 V# ~ `
}5 d0 C- G* m, Q% S
+ A: [2 L, y: H l4 U& t
int main( void )
8 K. w3 l g4 Q$ b' q8 i- `{
' ?% h& P$ N9 Y) l8 o; F& o4 T# m# ~0 W
/* Initialize BSL */3 ~; j: t/ F" G6 Z ^$ l- ]
EVMC6747_init( );
2 ^3 K( p/ _$ h3 y: F /* Call evmc6747_intr function */3 }( _3 p. `' R" b2 m* h
aic3106_init( );; E8 x7 ?! J$ t! \* G& e( b# V. a5 s7 s2 ^
while(1);
* m$ ?( M: L, n; _* S' K7 U1 z}* h, f9 b% y* H+ h& c7 R& @
: ^8 O6 M4 k, X& ?! z4 [6 ^* L' l! I. T4 T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ S2 p4 V4 W) Y! Z3 N* s
/* Initialize MCASP1 */; `/ q7 K, q: p! {
mcasp = &MCASP_MODULE_1;1 N' |2 r9 C& ?) U
mcasp->regs->GBLCTL = 0; // Reset
# H a" S; Y C; l mcasp->regs->RGBLCTL = 0; // Reset RX* M$ T$ D }' ~( D2 {$ m' ~. s+ p; m
mcasp->regs->XGBLCTL = 0; // Reset TX; Z/ j& m5 ^( ]: `
mcasp->regs->PWRDEMU = 1; // Free-running, p; f& n* L' |! v e
// configure McASP0 receive registers
; a' M$ R8 l" f9 n; R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used0 `. s# C9 Y4 K) }$ _
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ k% f5 N+ X/ O$ A1 U
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! N3 N1 ^ A$ U) h5 z h/ t
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 f5 Q/ K) G$ h+ W
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 \% k1 q+ E; k! {- P
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
% G# c* s6 T1 n) E \, L& Y2 k mcasp->regs->RINTCTL = 0x00000000; // Not used* |, O- u. b8 R) x2 R
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 Z. u( x& L, b8 Z
5 S& n, v4 l! L% }% O
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
$ Q& d+ h, J1 t8 s( V2 [& ]0 N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# }2 N, ], V. P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% H; c1 m" d+ m+ F0 h# S2 B/ r! Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) C' ^8 r8 b* I# f- P6 A, k
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; a7 S- n5 K+ _0 J mcasp->regs->XTDM = 0x00000003; // Slots 0,11 {# y% A( y; m8 J7 }
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% _4 G( U: ]) }3 O5 t mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 C3 E! `8 l+ D4 ^& ~9 k5 E
0 I0 x0 f6 G6 O) m7 H mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN! o. V6 {- F0 F8 r0 [
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
) N# w+ u- G, c0 `6 ?. f F+ X1 b7 S# l mcasp->regs->PFUNC = 0; // All MCASPs
! }6 R( p' y* F: H7 k0 F7 h+ w) l, m1 | mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. ?1 d7 }# y% a3 n; v' A
# C5 F- w7 J# u* X7 O mcasp->regs->DITCTL = 0x00000000; // Not used
# K% u Z3 I, L d mcasp->regs->DLBCTL = 0x00000000; // Not used* d) W3 X; I3 a* ?& G
mcasp->regs->AMUTE = 0x00000000; // Not used9 {- H3 z) z! e2 F: a! t
4 o8 I7 a0 W( w' }3 v8 X
/* Starting sections of the McASP*/
0 Q2 @' J5 Y. { mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; L* ?9 V% L6 G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
: R; R+ E8 ~- m q( O! V mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; n* _4 ~/ d* u- Y/ W3 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- M& | R R9 K! e! j7 F6 K* n+ M4 B" \' b1 E
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
h( V8 U/ V% D2 ~" J. t5 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 p2 O5 c% E, G8 ? mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, _( p1 n+ }! Y8 P. [. k. ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ c' H3 B) Q$ B
# t J& i' @# J7 w" W, |4 E
mcasp->regs->XSTAT = 0x0000ffff;
4 k, V$ n9 B. T# e" N* m8 z/ D mcasp->regs->RSTAT = 0x0000ffff;
: Q, `; m& i- s' i1 e
7 G0 a' `9 _7 D# e- k3 p' }! n mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- ~( i6 P# C- j% B% | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. j ]- o! K% \% _; ]) g mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 E2 ]' P2 g# T8 o) t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) `% B' p. ~( p+ N: x" y. j8 `
2 O8 J1 r* s! ^1 W0 N4 L$ S /* Write a 0, so that no underrun occurs after releasing the state machine *// d6 m6 C5 T2 ]! _( y7 ]3 B
mcasp->regs->XBUF5 = 0;
; t& o$ L Y1 P% R0 m9 Q8 r. ? mcasp->regs->RBUF0 = 0;: D4 _& _3 q" f9 ]8 R Q* d$ ]: F
2 @# }% A9 ~8 }: M: n
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # b4 u% v% G# ?' j$ |6 Q4 ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 T" ~) G N& E3 j mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: ~1 H1 O0 c: b9 j/ O0 B* U% i# M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: r2 l+ S: q4 ~6 z1 i1 _6 l1 M
6 y9 T& s; h* d" |1 G7 J( R mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' A O' D& J; V. z, f/ D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 K. Q$ A# a9 E& i! |, I mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) c: }: K- I% Z6 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ S- A6 M# k! [
$ {2 O: | d! P3 @ CSR = 0x0000;, `, g% G& p g ?4 \! N$ e7 d
INTC_INTMUX1 = 0x3d;7 L I) I% a9 @. I
ISTP = (unsigned int)vectors;
5 _' v- s# T, Y ICR = 0xFFF0;
$ D: b B) h. o- N) j IER |= 0x12;
2 O( T+ @2 P( r! y: t* V9 l CSR |= 0x01;
2 N0 `( u. o! [, A4 y
2 R+ m3 s' T3 O" ~8 I1 `8 {/ ^6 U
% h8 ]3 D% e/ f2 Y/ P
还有就是两个输入输出函数:2 P! q+ w$ ~! }- ^& l
void output_sample(Int32 out_data)! C; V% f5 v* N0 v u
{
* t. z/ r2 z, c0 p# ~# M AIC31_data.uint = out_data; : J, d. @2 H; ~& ?7 Y* U u( b, j
MCASP1_XBUF5_32BIT = AIC31_data.uint;3 p) t0 W. I& k4 ~0 u
}. E+ K# s$ R k. T2 o+ O; ~
5 x, m/ s# a7 f4 x+ g2 ^Int32 input_sample(void)" w) v9 o; Y: @/ u5 a
{
- R9 j- c1 v; ~+ q/ z AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 V2 g* N" ?$ g1 F& X+ F N" J" ? return (AIC31_data.uint);
3 `& R4 [" Z& Q4 S* D' X0 E}1 {' f. @6 q- ^0 {6 [: K* u
' f5 Y( p" S# p5 t" f |
|