|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( y" ]: m+ t5 M( L6 emain文件:
" S. B. C" ]* s" iinterrupt void interrupt4(void) . f( U2 h, B) q3 O4 ~3 p
{, }+ u- k7 z. I$ f% ?
Uint32 sample;
# z, s; T | n. ]7 D d
- f4 H- c1 f4 M" u sample = input_sample(); // read L + R samples from ADC
8 f! j( @, k6 [! h7 Z8 C output_sample(sample); // write L + R samples to DAC
7 @9 y9 q) S9 |# O* v return;
/ H; o8 ?9 D& A}2 C% T1 _ R2 T
( d# ~* q- E6 J; e3 c
int main( void )
$ }0 _9 E; ?; \3 q) d' {{" c% Y9 V5 P5 j7 A
, b! s) D8 l, D: X+ l% s
/* Initialize BSL */1 p( t4 p! p/ z0 A) @8 u4 ?
EVMC6747_init( );
+ x. P! a& V8 u& I7 i /* Call evmc6747_intr function */
! O. v9 E9 u9 a6 }. [# O7 [) } aic3106_init( );
! V$ N$ ^; j+ S4 j" J/ O4 L6 Y8 D while(1);, O% @, z9 Q+ Y0 K& t
}
1 x, w' {8 I6 e7 w `
/ x/ B Q q0 _% C6 G& W/ g1 R' E0 s3 J% U! o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ E! b9 C) V# |7 N) D$ u! b/* Initialize MCASP1 *// N2 B5 }2 ~- S% T) b$ c
mcasp = &MCASP_MODULE_1;% T& a. g$ I2 S7 l, C6 v
mcasp->regs->GBLCTL = 0; // Reset3 c( x5 i% ]1 k
mcasp->regs->RGBLCTL = 0; // Reset RX5 @7 Y( Q1 E3 O) E
mcasp->regs->XGBLCTL = 0; // Reset TX
6 W U9 @( I) J mcasp->regs->PWRDEMU = 1; // Free-running) Q* H! ?, Y% y; x, a; w% @1 y
// configure McASP0 receive registers& o7 L* \* L3 K' }/ Y
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 G) N! O6 w% X6 Q0 J
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& s) o/ Q( J' s7 P5 F8 k
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 f. g. v: k/ s- e& D% K. u2 k mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! l9 s- e7 S8 O& l+ r6 o mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* v8 A* U& b3 X
mcasp->regs->RTDM = 0x00000003; // Slots 0,16 l( l- q; b+ P2 q" R
mcasp->regs->RINTCTL = 0x00000000; // Not used
; R+ }# p4 P3 z) X mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) @8 D. p# r0 _ y! }
5 i3 D% @6 m$ x/ D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# G/ T! A% |, _ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! U5 g8 L3 ^+ ~. [0 m! }3 m
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: L+ m/ R" [3 Z. ^7 f
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 E8 Q X' A i8 m( ~ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& S5 b) s6 B/ u& h/ k y5 j: y mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% v! \! J) g9 Q4 l& K. _ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% b+ g4 v; G0 I mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 p8 T, I) p' b8 k; n) O! W$ [1 K
3 @+ P* {! F7 N) v5 Q7 r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN8 s& q4 v2 T+ a9 O
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* f+ ~7 _( Q0 D* r9 O- X
mcasp->regs->PFUNC = 0; // All MCASPs) y; n3 f% P) N. g% H) B; J
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# }8 B0 n6 g. T9 O! n) K$ v: T* T; u
mcasp->regs->DITCTL = 0x00000000; // Not used: V* W4 g' b/ O
mcasp->regs->DLBCTL = 0x00000000; // Not used
5 ~0 }9 S2 R6 J8 J- a7 F+ ?# a# x mcasp->regs->AMUTE = 0x00000000; // Not used
0 P' `0 P/ @8 w# _ ~; ]" s1 R) n# o. E4 i
/* Starting sections of the McASP*/
p' f1 H6 B! E3 Q5 V mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ Q5 {. T( X& O, \( J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ! J7 L9 E o0 r9 j4 P
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 V) h8 q4 |9 K6 j" q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! I+ Y6 [/ i/ ~* W9 Q0 W! r- v* u: }. `
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 Q% A/ p+ G- h) P. F3 V2 c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 q+ W3 V/ D; `( x. e( a mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + {; s! @, O! `8 v! I% f8 g" v3 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 N r& \+ f* o0 c- X0 Y/ z4 b& f
mcasp->regs->XSTAT = 0x0000ffff; 4 C: Q- R8 A; R3 T0 \
mcasp->regs->RSTAT = 0x0000ffff; 1 \4 ~ t" G) T& J1 `- h* t- A
5 y5 P/ B; f5 @0 c. o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 Z" ]& @3 U. o' r. {; K$ l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& |. m! ~/ I' k mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ p }" | F/ o- Z4 W3 L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 j3 \( D! c9 w( \7 s6 l" S& d! [. F' g7 s
/* Write a 0, so that no underrun occurs after releasing the state machine */
* T# {( u0 |6 u1 j mcasp->regs->XBUF5 = 0;
' Q `5 V) U' U* v mcasp->regs->RBUF0 = 0;% N3 j; a' i5 V
& w4 t2 r' l2 L* o! U! D5 ~5 X- i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 W" z. V F8 Y8 g; G' ?0 j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); t+ i1 K2 G4 y- p; S2 s7 _( l
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 R5 z$ D& M& N ?3 Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 |7 T7 {& u) \9 _% Q* X% w( b
' P2 O6 _) p9 m* N: P; W mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - }. W! ]. B. ]4 f1 B7 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 u+ X8 V3 t5 ^1 X$ }. X
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 e( h8 v6 k8 L& K5 |- e+ b' _8 H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 J" R! D6 `8 D# F0 y
" R ~3 t$ W7 P2 V
CSR = 0x0000;* l. ]/ k2 b/ x- B% [
INTC_INTMUX1 = 0x3d;& V0 j! t$ @7 D7 l8 v# ?
ISTP = (unsigned int)vectors;- v% {* J' f( w
ICR = 0xFFF0;
l& i8 ]5 Z5 B1 v, D6 B IER |= 0x12; }# {6 T% X" w; m/ d) I
CSR |= 0x01; 3 [$ i% T) [% }& P; j
$ B+ Z% H- r0 U& P% r' ^+ h
, T- b& X# X1 i
' i2 n& _- Z: e3 P+ w9 I- y6 ?* P还有就是两个输入输出函数:9 I8 w' D& L3 y2 M$ v& G8 g
void output_sample(Int32 out_data)$ f. _6 ~5 n$ V" b/ l
{2 G! h6 }) |. j. H
AIC31_data.uint = out_data;
* c4 ~8 R( v0 w3 i8 }* u) h0 O) o1 N/ H MCASP1_XBUF5_32BIT = AIC31_data.uint;% d/ @( v1 q4 r I0 {
}
+ z5 k+ n* X$ o; Z- r
9 C7 p; V/ C. WInt32 input_sample(void)
" m8 j4 ~7 d8 g: k- Y0 D: w{ + {$ u' ~# Q6 [
AIC31_data.uint = MCASP1_RBUF0_32BIT;
% Y! Z5 L3 `! }+ z, h return (AIC31_data.uint);
6 _5 o0 E' r8 C2 n# I$ [}) @3 Q# }: u5 `/ b
8 F% C* _6 E$ E6 ` |
|