|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ v" u* ~, J+ M# t5 c7 I* c; M( Lmain文件:( E1 E* m9 e$ R; Z' r
interrupt void interrupt4(void)
$ x. |# Q( {' c) x{# J# w& m" P0 K
Uint32 sample;
6 U' m" e" A1 b* S
% o4 D: W" Q6 n5 j sample = input_sample(); // read L + R samples from ADC& j& Z; R$ K$ z0 { \! I
output_sample(sample); // write L + R samples to DAC + g, Z/ i6 u+ n" f
return;
( ^2 ?6 R; B( I4 Y4 F}) `+ I P. r# s0 j' q6 _: |
9 @7 f, _' w* ]) Q3 T5 fint main( void )
, |) O6 ^% T# r5 G) U z2 y{
k- [3 @5 L& D" \
. K) c4 l- d- R, x# b8 @ /* Initialize BSL */
6 Q" Q- `3 {1 g EVMC6747_init( );$ |! \5 W% r& i' Z% _2 q3 `& L
/* Call evmc6747_intr function */2 W. }+ A- G( H, H1 z
aic3106_init( );. O& O$ ?$ D2 e/ Y8 e; b0 _9 c: d
while(1);$ q, P0 d0 s5 _( t2 T7 a
} i: K1 e! t9 ?* K# V1 R. `
) H' F6 b" J0 u7 e# f/ N- K4 U8 ?; `+ q& x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' @2 e) Z ^5 p, f) S( r/* Initialize MCASP1 */
0 i0 f* Q2 e& u* u' {; Y1 q mcasp = &MCASP_MODULE_1;8 l, h9 p- t2 h; y& B) }& v" d4 W! a# W
mcasp->regs->GBLCTL = 0; // Reset2 z2 e. C* r7 Q v1 d. r2 Y5 U
mcasp->regs->RGBLCTL = 0; // Reset RX
2 D# c8 E1 Q1 I) V& e5 t9 x( v. n mcasp->regs->XGBLCTL = 0; // Reset TX: K, L% l+ {3 v8 S* k2 y1 L
mcasp->regs->PWRDEMU = 1; // Free-running
7 D2 x7 @+ e& D // configure McASP0 receive registers2 X J/ @$ u5 R" h' K# }6 K# k9 p
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 v0 {& D, Z( l6 A W. K8 }$ V, ~ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: N; s! T& n" y. M+ W" a6 y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ X% h7 g. P2 D2 `7 c6 C- _) P3 r2 j mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 b7 b9 W" v" k% U: q$ c O6 j
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 P$ \2 B* H$ W& e, ?+ M mcasp->regs->RTDM = 0x00000003; // Slots 0,1
9 W g. C( J4 c) { mcasp->regs->RINTCTL = 0x00000000; // Not used/ V" a: s1 I) B1 O/ ?) Q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- f0 u* G3 G" H1 a7 C: f; d: H) M, b
8 o+ B4 y/ k' w mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; v! f- J: A& R$ q1 p( H. R; N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' z4 ]9 ]+ _& o& h3 Z! c' a& b
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
9 N0 d* C5 \3 k6 b1 s1 l( t& z# ` mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 l9 R! J9 {: q; j4 I5 g9 m mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 N- X7 K. i' C, D+ V" V; N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
6 l! B( m& s/ {6 S3 M% v mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ G3 k0 {/ Q! w9 O
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ W% C! s: |+ @1 u3 ^
' E" _/ N3 A! Z/ i5 f, ~' r1 N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 ^% i- y( }( W. S) T1 ? w
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- v/ d. @0 o' G
mcasp->regs->PFUNC = 0; // All MCASPs2 X ~8 |' o8 q2 R- M9 Z# _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 Z" p5 F1 v* I! E g: l
4 b, X' K: V- t3 `. Q& u
mcasp->regs->DITCTL = 0x00000000; // Not used
/ u T9 ]) t& C mcasp->regs->DLBCTL = 0x00000000; // Not used
+ F1 L, i/ I- X9 I7 f mcasp->regs->AMUTE = 0x00000000; // Not used
" f' L3 D0 r7 a. p/ w6 b
; B/ ]* q) y* H5 d" K: o/* Starting sections of the McASP*/6 U( X& Y0 a/ t5 M
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 i; n1 C: ^6 U3 L8 C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 H! G( W M/ R% Q U% f3 w mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ v9 K7 U5 W: G9 Q u$ X. M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ T: N: l) V" H' h: }6 U4 @& y8 _7 P8 K* h3 b' f x
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% p1 P4 j/ J+ W* b( k9 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! K1 p# P9 L! @( N2 w( O0 m mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % K% l" C% m4 ]) }+ q8 y$ D s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# G1 D9 m# r0 y+ g2 Y( H" e
, a0 T0 K$ a! x' K% }& X1 Z7 r mcasp->regs->XSTAT = 0x0000ffff;
. Q* V- N' Z7 u6 j* ]8 J mcasp->regs->RSTAT = 0x0000ffff;
8 ~; X$ H) T0 |0 A9 c9 f- w4 w; |% e/ x% p0 w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ U( X' {7 b: Z: G* G k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 C1 ?9 q) R+ h' j, e
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& e9 d% c( |3 Q0 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- \& W6 y2 Q5 w! l( X# E
2 x6 t" t/ C, j" l
/* Write a 0, so that no underrun occurs after releasing the state machine */; `" @! U, ?3 W5 j) _
mcasp->regs->XBUF5 = 0;
4 R; s% l7 f0 V2 [0 [ mcasp->regs->RBUF0 = 0;
3 W- k( j/ |" j( z* o1 r' m6 y1 S; G- [' N; d7 E$ D5 Z; ?
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! `) M) o+ r7 K* s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' ]) ~% m/ i! j+ h1 o8 h; J mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, e. _6 g4 w, ^8 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ E- N& f/ k. Y, C0 I, K U8 u. z6 D8 o: S& H- u* {
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; Q- i5 ?, [0 L5 }( D4 D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# t3 U0 P. e5 K7 c1 ] mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % G2 Q7 K! S9 m) ]+ b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
Z8 j$ t4 M/ U$ A4 H* k1 E( k( p8 C9 S: U7 m
CSR = 0x0000;
) T C k4 O3 y' e4 i INTC_INTMUX1 = 0x3d;& l% D4 U9 w; \. E- d; d, m. `2 t
ISTP = (unsigned int)vectors;$ G' l# M+ L9 D/ G! T
ICR = 0xFFF0; ]8 E% M3 z; f
IER |= 0x12; 5 j) S* e6 }$ E1 K3 c7 s+ M
CSR |= 0x01; ' R% f& o6 E: f4 ?6 M+ W
- O) f$ H- N3 j, H' ?# H
: L4 f( d T* z2 |2 X- ]5 O* `- y4 v0 t: a
还有就是两个输入输出函数:( m' e/ e) t$ B! x6 |& ~
void output_sample(Int32 out_data)! @, Q) n/ W6 j, d; Y, c1 q
{
7 j M/ L8 W& n- ]( r+ m4 O AIC31_data.uint = out_data; 8 p; G" E9 i' w4 A# ^+ N
MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ K( J) I' _, E4 B}( |! h( v2 W9 u! T8 ?
$ }2 m( p9 l% r4 fInt32 input_sample(void)
" w7 b0 f* C. _% w{
1 z6 I1 v) X" N d AIC31_data.uint = MCASP1_RBUF0_32BIT;
% n$ n# w( }( L return (AIC31_data.uint);
0 i0 b% a4 P J& \" |}( J" T5 i- y _ g5 j
* _0 @# ^9 K% J/ k$ ^: ]2 [ |
|