|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ N0 ~' T, i- L5 f
main文件:
7 ~ @6 b# t7 V5 n- iinterrupt void interrupt4(void) . z1 p; a2 h, z" M0 _$ _! G7 {
{! w2 }& V- n; R [; w
Uint32 sample;* ^' ^! k0 u7 {1 o9 d4 h# X! c- O
, a7 T! v& Q/ B; `7 k9 e: F, t
sample = input_sample(); // read L + R samples from ADC
( G$ V% r9 W. {/ j: ^1 Q output_sample(sample); // write L + R samples to DAC . h( F5 f/ K& L; B
return;7 s6 \0 J% y4 n/ ]6 e4 [
}
6 r5 e# N- \1 b( J3 f
( o5 ~7 N) Q. l1 _% _" Q R# xint main( void )
+ r/ j9 e( D+ r3 x% Z5 Y{' W( e: s; m- y# j4 X7 d, B5 m
" g5 p" B# a( N3 [ /* Initialize BSL */% S* ~ d8 [" ?* g g! R" w
EVMC6747_init( );1 I$ t2 N2 i" K) ^ W+ y& H
/* Call evmc6747_intr function */
4 |' U; N: o! N8 s7 x aic3106_init( );' D# {: G& _$ Q. x
while(1);
( J6 k$ u1 M( W}
* C+ {2 A% T7 k% W# d {* \# O
/ q/ p' _ W- B/ ~5 J) g; x$ ^: U# _# o9 J# O! X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' U" i8 z8 ]. q& R8 k: h/ w% R( x1 p
/* Initialize MCASP1 */
' k* o; ]8 i3 }4 s mcasp = &MCASP_MODULE_1;# i1 S) K9 L2 W$ D4 D$ x( P
mcasp->regs->GBLCTL = 0; // Reset
0 A" \: x. K4 Z mcasp->regs->RGBLCTL = 0; // Reset RX
) ^" D# {4 c: i7 y mcasp->regs->XGBLCTL = 0; // Reset TX
. m" b/ T& c$ O" R/ E$ Q( [, \9 M mcasp->regs->PWRDEMU = 1; // Free-running
3 _2 F% W; \. l2 o9 G // configure McASP0 receive registers% F- h" Q& Y3 W, q
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 j& \/ c; h3 P3 _6 x4 w* `
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" s7 H' Y+ U: k5 w7 r- L! o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% A9 t* }! T4 F" G* \0 s2 P
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 C; D, t. D8 ^$ _% d- g
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" ^4 K7 }9 P, c9 D* U9 o+ O6 w mcasp->regs->RTDM = 0x00000003; // Slots 0,11 s2 B v- h5 h; I; e
mcasp->regs->RINTCTL = 0x00000000; // Not used
* Y; B. V( j( k/ _4 M mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) P' X a! g9 T& H6 w- D
8 h, J/ z+ e# u# J mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
! z9 F6 v: ^6 t7 b7 x7 P( s6 z$ Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. I# _+ X M+ c6 N( A' v; ^ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ p2 P' I) V" h7 z! G mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! F1 j0 V' ]6 C0 Q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ p ]" X0 n* S( k) j mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 i7 h+ I% |9 h8 _7 t3 a, f4 W mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
J! D& [# C/ ~, Q" J, h3 f9 p mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ y# k+ V9 u7 @# w. p- Q
; R4 a2 r: S: r" [$ P/ Z
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' `- H" K, ?/ P. G
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# A6 r9 u9 i7 R3 x
mcasp->regs->PFUNC = 0; // All MCASPs
5 h# n9 Z; L& ~' K2 |# F6 J& j mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( Z: [) o7 h# }* p! y) j2 ?0 n
* R) I; ~; x& O4 O# V mcasp->regs->DITCTL = 0x00000000; // Not used+ u+ {1 c5 r0 `6 j) ^+ H9 R
mcasp->regs->DLBCTL = 0x00000000; // Not used- e1 G5 v5 L. z
mcasp->regs->AMUTE = 0x00000000; // Not used
2 u) O% j- i. @: a/ k) p9 A# f3 f8 s2 w& Y# q* E" E
/* Starting sections of the McASP*/. Y% {3 V2 @2 a
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% }) V# J0 {3 J9 _; R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
2 E) @. t1 D& D! _ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & d# r3 t% G8 ^6 `* s" K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 V# p ?# P) x7 x' K" R2 `" ^/ n8 l5 c. ~2 \/ d
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 W" k) h, v* f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 B; T4 W' k5 A: B- Y mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* L* M3 u0 i; ^7 t' }. j- m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 `- ^# ?7 n" P9 p, `4 p# E. Y; t8 F
mcasp->regs->XSTAT = 0x0000ffff; 6 U6 {5 G$ V7 ? W4 m/ K
mcasp->regs->RSTAT = 0x0000ffff; 7 E# A; N( x, W' Z
( P* I# Y- q; w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. n" Q8 t: E" f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 O6 C$ {+ }. O0 p6 t! Z8 I mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 w" R' y0 b( t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& O- L- M" l( w: H
- j: E/ _# n; Q x3 z# Y /* Write a 0, so that no underrun occurs after releasing the state machine */5 ^- I8 Z* q9 J$ Y# }* i
mcasp->regs->XBUF5 = 0;7 o4 z' ], m% E* b
mcasp->regs->RBUF0 = 0;
2 s- L3 A1 t q9 L6 I% W: u- u% O% a2 y7 a# c6 N
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; W; f8 E! P7 V4 y8 P1 q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ G a2 U7 }! `+ _# Z3 O, k( x mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. \$ z. v0 G+ R9 b( P2 G. B: V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- Z- G8 `7 S' K+ K' D% I
) \: b) f5 W3 i" D# C! S6 j
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: W/ J; m: c2 i/ l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 s8 K5 Z# F' n- [+ d% p+ Z8 s mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 `. s" x. @0 k3 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 K4 d8 J0 d& ]3 k! S
' u. [: G( M) l: `& L& Z& G
CSR = 0x0000;
( W8 F% T/ p2 Q% d; }1 t INTC_INTMUX1 = 0x3d;* G# ^8 V j- E3 ^& P% }- q
ISTP = (unsigned int)vectors; Q% C: a7 g$ D% X6 F( m K
ICR = 0xFFF0; 0 F u4 R9 c5 a" k: t
IER |= 0x12;
* P1 m& r; d( ]6 m, _2 g" d3 v CSR |= 0x01;
( h" }" c9 W% ~- a+ u9 I1 I/ H8 X
5 U4 U/ L6 s: |/ l5 J5 z4 N! Q$ G! B6 a! K9 n, h
还有就是两个输入输出函数:
, s0 U( A# n, v; H" E6 k- s- E9 pvoid output_sample(Int32 out_data)
/ h) t% C8 C' ~0 w$ N+ E{% `, \* k% W7 N9 z' k
AIC31_data.uint = out_data;
6 b- |# f! j2 u; K MCASP1_XBUF5_32BIT = AIC31_data.uint;& G$ ]5 W% t& f" X% t( Q* _
}8 @. I. t- w6 f. c
8 ~7 y# t* b! x5 w% f1 d
Int32 input_sample(void)* L v3 G$ `' A
{ - s1 I: N- A" v3 i: E
AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 s0 @6 {) I# C. H( |0 U return (AIC31_data.uint);
1 D6 _/ S! O, q' C}
& _6 G7 Z' Q, [/ w$ z% P- p
# o' A: _" P% p) ^ |
|