|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! `% D& b7 x% ~" S: Qmain文件:
- }$ ]: @* |4 ~1 u I& p6 Pinterrupt void interrupt4(void)
- Q& Y; P) Y' `! q8 v{( ~. X8 n# L8 p* T' w2 z
Uint32 sample;
1 T2 w! I( W8 j5 p1 t; }1 T$ M/ G0 C2 ^' q7 Y4 h: i9 M' j
sample = input_sample(); // read L + R samples from ADC9 x" P$ f/ S6 v- B0 { V B
output_sample(sample); // write L + R samples to DAC
- o9 ` Q/ l- D2 t. H( o0 N4 M return;' ], j0 x+ H4 }8 n+ T3 m
}
- r- t& x! P0 |* v( b! m% L- _5 T$ S+ B! r Z: N/ w
int main( void )
& j/ [( F+ c) \$ A{ v$ p, e t- N" t m' y
- ?- T4 u$ |8 s# H /* Initialize BSL */- R; Z" J0 @+ D: V& O) [% o8 }
EVMC6747_init( );
/ d& q, a/ X! W /* Call evmc6747_intr function */
! K; V% D! q3 x/ R" |* ^ aic3106_init( );; C3 z/ i _3 c5 _
while(1);
, l( t3 |9 D9 q( w4 n* X! m% _. z w}/ j6 ~. X- T' K
; p# j/ C- w% `! e6 L6 ^+ Q, c" L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' ^$ G2 L/ M" }9 i( P: R
/* Initialize MCASP1 */
3 P2 U" [& i% g+ ^ mcasp = &MCASP_MODULE_1;
" E9 I! i7 E$ d! c mcasp->regs->GBLCTL = 0; // Reset
( D& [/ ~' x- s8 q# }$ _ mcasp->regs->RGBLCTL = 0; // Reset RX! X' u+ C0 n" ~8 A% n9 o
mcasp->regs->XGBLCTL = 0; // Reset TX
0 X! L" L$ Z3 ]! ^, v g7 K( d mcasp->regs->PWRDEMU = 1; // Free-running
) f% J# p" u7 b // configure McASP0 receive registers
! h; k2 ^1 ]/ m+ U) Q$ ^& z2 N/ ? mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: T( ?( d+ ~& b \, s
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ G% h( _8 H5 \ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 x0 g) ?7 n% |( \& M* n. _
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 F+ g! V9 c; J1 r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
' G- F1 C: G; I1 y) y mcasp->regs->RTDM = 0x00000003; // Slots 0,1- `! x% y" h; z1 w
mcasp->regs->RINTCTL = 0x00000000; // Not used4 c9 l. y! t0 M) ~. e0 u' d9 a, P
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: U$ k* q4 C3 S w# v
4 m% O8 q$ X+ Z6 X5 E3 k- S5 c+ d; V mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 u! X. W( E! k8 n7 W mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 n4 A/ E+ m$ f; T4 V1 \3 s mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 ^% N8 o% p- Z$ r1 W( Z5 k mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! ^' k: L; s5 N+ j% z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK8 V( s7 Y' ]$ n6 n' Q
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ |; z F2 d1 g mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 p2 d3 L8 q' Y$ V. W3 P
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- X1 @) _9 k$ h
9 w. t: E0 k2 F2 a mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
# i8 k! u! S% S7 `( ` mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT: K, d: e; g3 F3 j4 L$ I' R+ z% Y
mcasp->regs->PFUNC = 0; // All MCASPs
, E7 P7 j3 Y# `" ~" x1 a mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( Y: W5 }5 S: G2 D1 R! l9 P& b* ~/ _& T" }1 n1 f* @) ?! l
mcasp->regs->DITCTL = 0x00000000; // Not used
9 x; p5 S) l% j8 }9 q mcasp->regs->DLBCTL = 0x00000000; // Not used
& `7 u; C$ i5 `( _" c9 S9 N6 H mcasp->regs->AMUTE = 0x00000000; // Not used8 Q3 d: [$ l: D2 u6 D( K) ^& i
7 n0 T3 k0 i" n: n2 B
/* Starting sections of the McASP*/5 F$ J7 S' J" b7 E- w. s
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 y1 |; l& ? q# C" m/ A, C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, x+ ]6 H0 _+ |- q- k! ^! ? mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * E& F# |6 v" ?- f3 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 d' c$ @, A3 o! I, ?8 `# ~6 W9 ~7 O1 t! O% E+ [8 ~: ^
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + ~0 g: G6 G" J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 u- V3 Q4 i+ q8 D: Q4 D
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' E. p/ _" I$ X: }$ n, r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( o1 K( B v" {0 P, y
$ [% x6 t/ Y. w: D6 i ?
mcasp->regs->XSTAT = 0x0000ffff;
$ S. O% [# O; B. a mcasp->regs->RSTAT = 0x0000ffff; 2 ]8 J& N: G1 e
8 t. ~0 e3 q. C3 I mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- S6 Y A) d7 Y0 Z3 R5 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 S g0 w1 H1 }8 |: ]! a4 I/ x mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 T, J2 M, G: E6 X) i2 q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 h6 Z% K* t2 @7 d6 e
. o: i. c8 P% }: s$ w* H' B /* Write a 0, so that no underrun occurs after releasing the state machine */
M0 B0 ]- ^9 E9 g mcasp->regs->XBUF5 = 0;! P0 k a& f( W8 D
mcasp->regs->RBUF0 = 0;+ Y- k. d! t0 t# ?/ x! O! @
5 ^& |( r/ @1 C+ p8 i T( N( |+ l
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; z5 n* j6 {& }; [$ u: {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& y3 O& b% s8 W' G' x
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; |6 |- y) c: r# s% T6 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 e. C+ W! r; f
5 U$ X8 ]# Y P6 q- `
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! k5 n3 x. T- j& C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 ^6 k& T* ]# @( {0 x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 I* u& L5 k) B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 C4 x2 q M7 {' k5 _$ j/ \
6 e# s# u7 N# t* r- p2 `( { CSR = 0x0000;5 ]" Z8 e9 d/ W
INTC_INTMUX1 = 0x3d;
7 I# g% t2 q% q3 S- c ISTP = (unsigned int)vectors;' C& {7 X9 ^1 a! D E9 n
ICR = 0xFFF0; & H+ S t8 l1 `2 z
IER |= 0x12;
/ X. t! p9 U! O; } CSR |= 0x01;
2 Q4 O- n4 h7 ~* I6 E, z
, k2 A# \) A/ v6 Z/ s; v$ |- u% p8 p
4 g& W* M+ m. M* p7 M9 d4 p% L
还有就是两个输入输出函数:1 m3 T+ S0 a- x9 L
void output_sample(Int32 out_data)
7 O1 |0 k* l8 h, a{* m* h7 u6 i/ X1 Z
AIC31_data.uint = out_data; ; }' B7 E6 x! u6 Z8 R( v- y
MCASP1_XBUF5_32BIT = AIC31_data.uint;
" @2 ^( \/ ~' B: t' ?6 f# `# k" x}
( {, B* Q2 K( d* t+ {& J: W
, H; ^0 i' h3 n- e) K3 cInt32 input_sample(void)
. E& T2 r9 Z" L3 L2 e$ a* y{ , w# t4 y- A; K9 Z
AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ y7 c& B5 E. n5 h3 y return (AIC31_data.uint);
; [. o7 K9 O1 s% b; I l& a. o/ j}1 f/ r' R; V4 v5 ~$ f" I4 x( p
' g5 z6 u% a2 y0 I$ J( ~
|
|