|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ f' {- f' q" A9 _# o
main文件:0 y+ A5 ^! G ~3 T
interrupt void interrupt4(void)
! i- e- K; {2 ?{; Q7 y0 P0 w7 R: K: d# S' N) z
Uint32 sample;
! Z. u9 U0 x( O) {& K2 _3 G
) o8 u: N! h8 Y3 Y sample = input_sample(); // read L + R samples from ADC
. x' K/ t, S) l* E$ a1 E, N( W output_sample(sample); // write L + R samples to DAC
0 w/ G& k5 X- }- g return;/ |, [7 ^& f' j+ w) y% n
}
3 q- `- ]- s) u) R) `6 k
9 r* A/ V6 p) X, @3 e7 iint main( void )7 j% G+ Y% H$ T4 R% L. \
{
# u7 f. x, J" j5 o- R" \6 ?$ ?: }1 a/ W$ ? ^4 c
/* Initialize BSL */
, b6 } w9 r$ }- X EVMC6747_init( );
! Q" F. _% V$ e% S/ {% i /* Call evmc6747_intr function */( a" F3 t6 p" d% i
aic3106_init( );
4 r4 B& P# Y) R5 G! Q while(1);5 \# V5 l# K( i( o. M
}
1 o* H! x) ~0 R2 l- J) d3 E$ [- k. s& o$ `) u; K
+ D+ W+ P! p* f. y: F1 p- o& f7 W7 v
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- F* K H0 H) a/* Initialize MCASP1 */$ E6 h' b. C: _4 c5 _
mcasp = &MCASP_MODULE_1;
8 @0 F1 R2 H: h# c( G+ ^ mcasp->regs->GBLCTL = 0; // Reset/ y1 c! \2 |+ j' [
mcasp->regs->RGBLCTL = 0; // Reset RX
2 G n* W1 B! r mcasp->regs->XGBLCTL = 0; // Reset TX6 v' p; D8 |0 U
mcasp->regs->PWRDEMU = 1; // Free-running; F$ p, M1 T3 a0 ^
// configure McASP0 receive registers9 b: q9 b( L$ X% c% h
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
. j- l! Q6 ^: Q ]8 y2 t mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' s0 w+ j; T) f' k) P/ U mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) o; s; W; Q' S5 y6 c" R; S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 S2 N; S4 M3 e7 F+ b u$ ^7 Y) q! | mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) l1 D" E6 ?/ O
mcasp->regs->RTDM = 0x00000003; // Slots 0,1- e; C8 Q3 J8 ?% _ E3 N6 W$ }
mcasp->regs->RINTCTL = 0x00000000; // Not used
. I7 o5 c( c f8 Y1 i1 f mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: m1 t. H9 r& V8 u, D
8 Z3 G; n/ |, \8 L8 g0 G5 B% |2 E
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 [- A' z: _0 P* `7 F3 g
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% l/ _9 x* R1 a$ I/ O$ y/ e* F mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 l4 Y! h! s/ \9 m [
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 i& @% z4 Z0 Z- Q8 J
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 q( ~) Q" D$ A3 B) r3 g
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' ?7 Z% M7 s8 m- V, g mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 T `( c" W$ t# J# ^ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 t# N+ |9 ^ m, ~9 J" ]: h5 r
! \! y! t) q( z5 _ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. y/ G& C% ^3 e. O" c7 Z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 x. A9 k. n* Z# y4 Q# t mcasp->regs->PFUNC = 0; // All MCASPs+ Q/ U4 `2 p6 L8 W$ I+ \( K: l
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ P5 }! |' k! @- a0 W6 x7 A2 O2 P o) l2 I) z
mcasp->regs->DITCTL = 0x00000000; // Not used# d7 @' D$ E( N
mcasp->regs->DLBCTL = 0x00000000; // Not used
+ J* L! e. R( @, B/ `2 E: a mcasp->regs->AMUTE = 0x00000000; // Not used3 W9 E) A3 ]2 s1 W6 n2 j
8 n( a! r; j" W: Q6 ^( @1 T/* Starting sections of the McASP*/
" V' ^3 R( Q$ T( F2 N, ~% J" \ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 B* i u! ]4 x& U1 s! {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); [: S. |4 T. N; g7 J
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % A6 F6 q5 w1 v% l( @$ l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( N" R7 @, U% I4 u
% h) b |& d7 m; |+ t. ?5 @4 J
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 j& B) z5 v/ E+ O' B4 F0 r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# z5 G! `7 g1 d# d; U1 V$ m1 ^# t
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 }4 H, H$ l' h; r5 i! c5 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% f( V' W6 \* K# p' x! j
% h( e i2 S. B: t, ^" |" B mcasp->regs->XSTAT = 0x0000ffff;
6 s% g0 h! X& I+ U mcasp->regs->RSTAT = 0x0000ffff;
! V, W) \) f# o- G4 m& C; `- g/ y# h1 j- L( ]
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; [8 f( K( a$ n6 V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 J9 H3 E$ V1 x! r- q" C& d+ l7 K# |
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 D: |6 }& a, l7 s: B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" z, ?3 o/ {8 |* z |
* u: a" Z- B" b. |6 `1 X
/* Write a 0, so that no underrun occurs after releasing the state machine */
$ u3 }4 u9 U8 f* Z+ m* H mcasp->regs->XBUF5 = 0;
* G: g2 k7 I! T5 T& o; Y mcasp->regs->RBUF0 = 0;3 A ?: x6 o9 D$ }6 }0 `4 [+ U
7 \/ I0 ^! j. s$ P) t* X
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 w/ w8 P4 {5 h- Z0 L) X8 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& o: L$ l: }( S, V" x mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 J7 {/ h# z- o/ N& H0 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 H7 K2 v" a% k1 h3 U
- U o. l* M; ~( j) w% F6 I
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 h# d8 ~/ q$ U+ x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ ?$ B x" p* y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 t9 b# _0 w7 z. b9 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 d6 D9 T/ E* Y0 u" Z# B# z1 E G. Z5 d2 M$ O
CSR = 0x0000;2 p- y j: _4 r1 z( }+ G: @
INTC_INTMUX1 = 0x3d;
! i$ P# C/ v1 l. d; q) C ISTP = (unsigned int)vectors;( c' C/ q3 e9 [% @6 p
ICR = 0xFFF0;
2 p( Z( t+ n3 t IER |= 0x12; , a m; U) F" ~+ W+ |7 G5 i
CSR |= 0x01;
3 O) U7 e6 S2 G. y6 J
- [9 ?5 t" q# i9 ^" E/ i" \! M2 Y0 @- {; @# h* w- g ^
8 g. E) F# l$ D/ {( K1 X6 j# I" G
还有就是两个输入输出函数:
5 Q9 N* C& e/ W7 Y' k5 ?void output_sample(Int32 out_data)
8 w! E0 Q# X2 u% R{
0 K) N& y) s! l4 w; C$ N; b AIC31_data.uint = out_data; " S/ _# V* A' V- I, Y( x- u
MCASP1_XBUF5_32BIT = AIC31_data.uint;8 l; b$ ]# f6 x8 N
}
2 b& N- d4 D3 j, k) S+ o2 l
' I8 D# x) O( R" }Int32 input_sample(void)
- m& [+ N1 ?( x4 [. `7 T( {3 O$ p# S{ % d$ A7 Z2 W! M* L
AIC31_data.uint = MCASP1_RBUF0_32BIT;
( H* S% ]8 i8 O5 e1 }4 s return (AIC31_data.uint);
* m0 q; C6 f7 n, c; a9 `9 q& f+ {}2 O3 C9 ^+ p- n! P2 K1 s+ L. V
G) q, O, R' f& _7 \
|
|