|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 N- ?% e8 P' Q8 a9 g% |main文件:0 y7 C* l- Q) x! h) f4 Z" I, @% ~8 q
interrupt void interrupt4(void) 9 \5 P! V# v3 M& ]0 y/ V! ]. |
{
) O6 ~2 y+ Y( l: i; @: K Uint32 sample;
$ M! o' [( E" E) v2 k! u5 m
3 U6 P! E/ l7 S, F3 v* i# Z, z9 S1 \ sample = input_sample(); // read L + R samples from ADC# G/ j+ I5 t& C( k0 O) S" T) t
output_sample(sample); // write L + R samples to DAC + e4 u8 ~0 x# E3 S
return;( a1 Q1 i ?) `- }2 ^7 t' S0 N
}- `* f" O: i% }6 T
# J5 V) }1 v5 ?1 ~; v9 }7 G1 _int main( void )
/ \; W8 `6 {& e/ \{1 Y5 F1 B1 E, r; J z
' e! S6 h& Q6 I6 d i$ U) ^1 k
/* Initialize BSL */
% W/ @# t' X$ O& n# y4 n EVMC6747_init( );5 E( h4 |" O( f# J
/* Call evmc6747_intr function */9 k: p& W9 L/ K+ t& X
aic3106_init( );
* h) j3 u$ E! k' e while(1);7 E# G7 P5 Y# w) }: a
}: G* P2 b! C% r. |
+ E3 C9 O' T$ n; y1 V! t: d7 F
: e5 G' R9 {6 _6 }' z# F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 M. H. I* V( A" r: ?9 C5 d
/* Initialize MCASP1 */1 o, Q! f) u, W
mcasp = &MCASP_MODULE_1;2 c8 D. b8 o) r1 p8 v3 }- n
mcasp->regs->GBLCTL = 0; // Reset4 Y, K" }+ Y- K) w1 b( w! P
mcasp->regs->RGBLCTL = 0; // Reset RX
: _1 J# J0 V0 Q0 { mcasp->regs->XGBLCTL = 0; // Reset TX3 p7 w" W6 H" \; r5 ~5 E8 X7 h
mcasp->regs->PWRDEMU = 1; // Free-running
" {/ x- J& {8 C // configure McASP0 receive registers
+ t- Y6 L' C8 i) d* c8 r mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 m% k& \6 [+ ?3 S' k mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ }2 Y6 ]" U$ y" A+ g: y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% S: p2 E: I$ i1 t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* E! o9 f( w) f, U. e* L B" U1 P mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)2 v8 M8 I6 f5 \6 ? s5 w, V
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
! N/ f8 @/ i" Q) z# h4 |6 o mcasp->regs->RINTCTL = 0x00000000; // Not used
( t" q. `2 z% G" ~% `4 d mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! A7 D* F1 F) N+ P# k1 K! S
% O0 ] i2 A) X mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 ]/ p" Q6 f9 p: F6 x" X O
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- I1 ?- K% @1 Z; U! C4 ^
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* L# A4 k; i! A7 j
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# g0 H" S/ l5 q9 z* t1 Y
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( Y. U8 T% P" ~8 w4 }+ D mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' W, u" G# R s/ Q* ~7 n2 Z8 ~3 n mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; I6 Y' e6 _1 T/ ~, L$ L `
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: P; n& ]7 n+ b: g j' G' r* z2 j: a( D" E; J% x) |: N
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" F1 f" B1 T" C7 B5 v3 ^7 w mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ O' J. j; q% r- u7 }# h4 p
mcasp->regs->PFUNC = 0; // All MCASPs- J2 _# o% ?0 Q0 f$ D: Q2 E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& H% @' x% D. t, G. p
e B3 e8 u+ S! J mcasp->regs->DITCTL = 0x00000000; // Not used
& `9 e) a" B+ ]) ] i# o' | mcasp->regs->DLBCTL = 0x00000000; // Not used' {" B2 ?1 \. J5 ^& P2 g$ r
mcasp->regs->AMUTE = 0x00000000; // Not used: J, Y/ u+ Y* `
' Y! e( j/ O n* e4 X% m- x# ~
/* Starting sections of the McASP*/
. s, F- [0 B* l4 m( c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- U( r2 y: a g4 f' x2 I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 M0 l! \3 D+ t7 f3 ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 t! u5 O8 u( O1 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 k- G7 u. M# ~6 A! c
$ s3 {! U! a' a2 R, D" P mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# S8 V( G0 i; p& s) m7 w; l/ t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ |; n3 h6 u$ O! o6 R( | mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; @2 Z2 B' \: \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 L5 K; Y; h: x2 c
5 ]/ }( M( r) j mcasp->regs->XSTAT = 0x0000ffff;
, k0 M! ?9 o3 d, Q; ^" s5 `- ]4 h mcasp->regs->RSTAT = 0x0000ffff;
0 X/ E$ z, H' t, m6 t4 u4 I4 r0 }" M1 p& k
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, }+ n( @. m @1 C$ v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 G7 O" W0 J& }2 q- J l mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # ^$ ~% T+ w+ E% a& F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% \$ s( s& C; W( m9 `
9 q; H- E$ p4 ^% f1 P
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 a; Z! A5 _. o mcasp->regs->XBUF5 = 0;
, i7 g [3 {- ]% j- ]1 ]& t3 O; v mcasp->regs->RBUF0 = 0;
& d4 V6 N7 m* u' c- j
1 p- J' O% T0 \/ J mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 m5 A: Y% x3 c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( Q2 N" f ?2 m
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / }; t+ ^( i& Q- k* T6 P3 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! @* Z# h0 }" L( M% p( w7 T7 c" h7 J, I9 e
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 p p3 h5 U) K9 D2 X; O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' c$ N; N x( E0 o mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: p1 A6 U* ?& X2 e$ X0 { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% U* j) n P2 c: J7 r4 C
& x/ L) s& N1 u0 U/ g
CSR = 0x0000;/ N9 |1 O$ K7 N! o) ?
INTC_INTMUX1 = 0x3d;- [7 O: a. w g
ISTP = (unsigned int)vectors;
0 w3 v w# o' o2 v. Q _( n% @ ICR = 0xFFF0; ( G( g, {1 @$ S7 f( V. [
IER |= 0x12; ; J- J6 {7 ]+ P, p& @
CSR |= 0x01; % E( p. A: j; C5 U; a6 K% |
( w$ i) \, | B2 a, Y- D8 V9 D! A
& W- x7 A! ]4 G( a2 U/ d9 u
) ]) C- ~' ^) T# U: t' j5 T' p2 P还有就是两个输入输出函数:; A8 d9 Q1 q& G! O
void output_sample(Int32 out_data)+ e! v. \: E9 K! [, ^
{
6 k+ {6 A; t% @* L7 l g AIC31_data.uint = out_data;
8 \! A2 [0 O( _9 [7 B4 v( v9 L MCASP1_XBUF5_32BIT = AIC31_data.uint;! T; i' o6 T5 E, r! w( v
}2 W- J6 ~$ z$ a
2 h7 K' S$ X: @0 ~3 A/ L; RInt32 input_sample(void)4 a& ]+ H5 q4 ^8 A% x- V5 h
{ + R1 M; a6 x; l' G; {1 O
AIC31_data.uint = MCASP1_RBUF0_32BIT;& T$ y0 S$ N' t7 a$ x
return (AIC31_data.uint);: w: M/ ]; y, Q7 m
}
! T5 b- b$ q) _; C
+ @/ O/ o% [8 V |
|