|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% L! q! `* P; o* `% I# O) e
main文件:
0 e) N, _1 z5 B; W5 ?* H& jinterrupt void interrupt4(void) 3 q- ?1 l( G L
{4 B& o5 l# Y3 F# Y# ?
Uint32 sample;
" l' f) i2 d% k0 ?/ U, v2 S, k7 v! r6 j! h0 O
sample = input_sample(); // read L + R samples from ADC' w) b G2 M9 n; q* ~
output_sample(sample); // write L + R samples to DAC
, n) `6 c5 e$ H9 i return;
1 z+ ^6 w/ I( R9 M+ e}
' y# [4 y9 u% ?+ w$ u! p3 _8 F. r$ P1 ~* o, l+ n
int main( void )6 d$ K& j) E$ W+ D. d! ~) E
{
" _: M+ j! `. l/ D# r' D0 L6 r5 r% ]- ? H" P) E- z8 H' y% W8 g
/* Initialize BSL */
+ T( b0 G- y0 I* \, Q EVMC6747_init( ); }; _. R' X2 E- x- G$ l7 l" M5 i; f
/* Call evmc6747_intr function */
: G h# C& a1 R& C aic3106_init( );& ]; F3 L4 s( b* M: b1 ^
while(1);, F) X/ e4 G( L8 |
}
/ |: a& h% {1 W2 Z4 m1 |$ D. o t6 _: y! y
. P+ n8 Z9 n) N. V8 ]. K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 J* a5 e8 J) {, P' s5 L* l
/* Initialize MCASP1 */
: z8 i8 d C5 x) |3 q mcasp = &MCASP_MODULE_1;# ^ I% x& H. | S
mcasp->regs->GBLCTL = 0; // Reset
~% p& G) i+ F0 e6 \ mcasp->regs->RGBLCTL = 0; // Reset RX
; C+ j& t5 W4 i0 ^+ r mcasp->regs->XGBLCTL = 0; // Reset TX" a# U/ x0 [/ c( H9 j' m+ ?9 w* |! [
mcasp->regs->PWRDEMU = 1; // Free-running
: X1 \ V5 J# D( n4 _; H // configure McASP0 receive registers
( E! }2 x! o- _' ?0 y& W mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: o, `5 F# ^$ _, U# ~8 y mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 Q4 [5 X M& O
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word( W$ m, C; ~5 [3 c6 E% W q
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 P% q7 ^1 @8 u8 D5 U
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 H6 l- n. e- T1 J6 t* s mcasp->regs->RTDM = 0x00000003; // Slots 0,1' X- k! H& \# p- g0 H
mcasp->regs->RINTCTL = 0x00000000; // Not used! r2 K2 p# }: [1 M& U" k; E
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 {: O2 a9 H5 u* o
/ `! q$ z9 E1 t& |( @; b1 k mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used; ?: {- L3 J' C! s7 d4 r7 Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ _* E! {0 F M9 G' U6 N
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% G! r6 K: Y% ~" |3 S# W6 f- ~7 K mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% \1 E, v o1 F6 O- d
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK Y* Y" m% { M9 U& h, n
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. m' C. M+ K; T( `2 z% d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
& b- E. |: i R/ H4 [) Z2 R* D! N! w mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
r2 B: @ S- j' m) Y- [4 u& W+ H6 B _3 t7 a
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( d; u8 P7 M! y: `3 b mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT: z3 r' L/ i5 a9 O9 t% A
mcasp->regs->PFUNC = 0; // All MCASPs
8 B1 g% E, K. r0 L' e% P mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 N( ~: G y# b' w5 Y# k
7 T, q0 w; X. b' x* E' {9 y4 x* V mcasp->regs->DITCTL = 0x00000000; // Not used( k+ O, ~2 U/ \* L9 M' t1 o( I7 g
mcasp->regs->DLBCTL = 0x00000000; // Not used
6 F6 e) P9 @) `$ T* {/ j mcasp->regs->AMUTE = 0x00000000; // Not used
' z5 ~3 w# i" Y/ R2 {
2 O- {2 t% K: C5 G) w" Z' f/* Starting sections of the McASP*/2 y; S: b$ X& d
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 P! D- b3 j# w G7 d3 h2 A1 a& A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& q! Q1 k0 e$ f6 m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( P4 [+ F* [5 Y. l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 F! Q; B6 x% f" \, v
) S( u1 @: `$ v$ U
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 w+ C* }5 e% L) l3 D, Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( O' j, R2 C( l7 i mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - D$ z. l9 A0 a8 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! m8 N- ^5 O `- z
! ~9 p0 l% c% | mcasp->regs->XSTAT = 0x0000ffff;
: M* W; P% A; S mcasp->regs->RSTAT = 0x0000ffff; " p8 D, C) L5 d! \3 R
* ~+ a* r/ |2 W0 T6 m# ?3 E6 x4 J& A: Y mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 |2 D T2 r/ G# ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 I, b" u) A- ]5 S2 z# a mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 F7 i8 Z+ v! \( `2 |" H; E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 g" _/ b8 C* p2 }! P) U2 m" V$ p& \! g
/* Write a 0, so that no underrun occurs after releasing the state machine */5 C( }* i7 }: D5 c" R$ j" J Q- _6 J
mcasp->regs->XBUF5 = 0;
' {4 _/ t% A1 ~8 ~" m1 B# G mcasp->regs->RBUF0 = 0;/ \- Q* |& z/ P$ Z
9 e; o, e6 v% Q' R w3 e/ d mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( T/ @) ]: x6 v, P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 w9 j3 _- o1 N
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 N, o# m# `0 s/ z7 K" I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 o5 x: r& x9 d ~( ]
- s+ b7 j {$ E( i1 `6 x
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( ^+ x( b/ Y1 }! k# I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' e$ D* L+ x9 K/ r
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 n) p! U1 `, y" S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 g) b7 E; [+ I, M. ~0 Q0 s
8 \: B- A( R# i% [# T6 p3 b+ | CSR = 0x0000;, O( q6 H" ]8 }+ A8 V8 w; a/ G
INTC_INTMUX1 = 0x3d;8 V0 F" e4 k$ w
ISTP = (unsigned int)vectors;
5 {& p. D- z( g( I$ A ICR = 0xFFF0; " l7 s* V$ z, ?: v8 B
IER |= 0x12; # J4 W Y/ n+ A8 X1 \( X
CSR |= 0x01;
: b8 { U1 `5 \4 O0 c0 R8 Z: f+ V
' g$ s+ k8 A' t. k! ]8 H; t; h/ h& X4 e. `/ ]2 h
! P; {! i# p" q/ h还有就是两个输入输出函数:
' p- u9 v2 ?0 U& |; x8 Evoid output_sample(Int32 out_data)0 O' g$ e% A4 n* m( V4 @* g) {
{' w3 e4 [/ |# k! p. a* X
AIC31_data.uint = out_data;
9 w) V5 x; \; T W MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ \1 C2 t, t7 h* p5 | _}8 u' a6 |, J5 n
6 d, x5 W* j( z8 F' Z+ z8 P: UInt32 input_sample(void)
2 y. |1 Y. M8 Y) Y [9 h{ ; u3 o1 P V7 p
AIC31_data.uint = MCASP1_RBUF0_32BIT;' v" ?6 C2 p9 {2 }2 \( t D$ D- |
return (AIC31_data.uint);, Q {; c6 C3 S: s" b7 }. T1 t
}
4 o6 f$ J' R/ ^
: v" z7 m/ z" w3 L4 ], O b |
|