|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' V, { N3 }3 g9 Y7 h. S# C
main文件:
D8 O; ~/ [8 L3 x3 ?" rinterrupt void interrupt4(void) 0 a. X3 x9 \) X" [5 \( {. g* _
{
s. l7 U/ V7 h6 K9 y. A Uint32 sample;# Y0 r) n' c8 W6 J* I5 W
9 U8 T8 w0 t U) H& T
sample = input_sample(); // read L + R samples from ADC
]* _" F- L; _! h! t% {" g. G) N output_sample(sample); // write L + R samples to DAC ( q- B9 A$ L+ w @9 y3 M
return;
/ }. W; ]% c7 o1 W- M) n3 |}
+ P8 @9 a8 H% i. Z8 |3 T) }: V- b# v: C& J: _% p4 a2 X& [
int main( void ); V9 t% y, J: i- y: H) p% u
{" f% v3 S: }; h0 }! i$ o
" n8 O& @% F* T( Z: o' J /* Initialize BSL */
* ?: M4 B g$ z4 m5 J' o6 s" L EVMC6747_init( );
5 ~: a* i. c/ x5 H' x9 ?: S /* Call evmc6747_intr function */
& }4 V2 x4 x! Y. U+ K8 q aic3106_init( );2 y& K2 x- ~. q: L: A9 t
while(1);; G" ~, Y# {, Z
}
7 i5 ?" x& C& I5 Q. R5 g) c' W- f! }7 w
$ _0 D. M9 a3 [9 h, laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& Y' @. E8 z4 i9 ?/ T. W
/* Initialize MCASP1 */
$ k& D6 V7 {4 f4 S9 e9 ? mcasp = &MCASP_MODULE_1;
9 |8 v2 N) |+ d% w* a5 I mcasp->regs->GBLCTL = 0; // Reset1 m+ P/ v( K+ f
mcasp->regs->RGBLCTL = 0; // Reset RX0 y, @1 I7 ?% h; N6 L' Z
mcasp->regs->XGBLCTL = 0; // Reset TX. @' @9 Z9 C' M' C
mcasp->regs->PWRDEMU = 1; // Free-running: M! G9 c# |( T- M* X% s" a
// configure McASP0 receive registers6 S; D3 b+ M; C, h4 [* i% D
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" k# b: }6 W+ q; _ n: n9 I- G4 H
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 \5 c) M. X" H; t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" T- e+ R+ b& E' }' k+ T mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 R- U8 K& o3 S9 \ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) s8 A+ ^ u( o% V3 [ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# n/ N6 ]! `* l( @0 } mcasp->regs->RINTCTL = 0x00000000; // Not used
! R+ X5 F: G. q8 B/ p" _ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; {1 P2 B" Y0 H5 U" [2 H
3 s K, W" |! ^4 |3 L4 a: S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* H& B* g* k' A5 q9 `& @ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) K3 [- Y' {# U( q' S( [
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 x4 p1 |, ?% V' ~+ ^4 ^! h7 E7 Y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% K: g1 b& ^- w mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% l" }4 u. L) v8 u% q" n
mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ r [" D' q- X( L6 H! e
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! m' v6 N. o: O
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% `8 p& o0 z) N
4 _# \' g) H' z3 X M mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) X6 @& L" c' D; U0 a# `$ \
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ M. i# w8 k- k) r2 H" A! O
mcasp->regs->PFUNC = 0; // All MCASPs
! t# O9 L1 L l5 I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: l: L' B4 O% k/ u# o
: k9 h3 U9 w) ^3 x1 r* _ mcasp->regs->DITCTL = 0x00000000; // Not used% ^, Q) I9 Q# i7 L
mcasp->regs->DLBCTL = 0x00000000; // Not used
) P0 d& ^: H/ r& z mcasp->regs->AMUTE = 0x00000000; // Not used( v9 {$ s( d/ A$ E. V
3 }; s& b' f7 q9 b
/* Starting sections of the McASP*/
" }! P' x/ [7 p. G, p8 [ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 D5 d$ p* h, m, B/ G- z5 a" a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : H% G9 K! F6 v" w& G9 J
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. ^) O# S' F7 B7 e: p. m' }8 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. U* ]6 L3 z5 Z' Z+ Z8 f1 f- E, M2 n
! i0 h% R) S0 B( c
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 R/ z/ c& `1 X( c! h! Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) p! R! k! Z( j: l+ W# H/ N" S& I& a3 ^3 k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " B/ _7 |/ A$ r0 W8 Y0 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ A, S+ b9 {1 k$ ]
8 ?$ Q6 C" C: H8 [8 J4 T
mcasp->regs->XSTAT = 0x0000ffff;
9 k. ^$ s. ` Y0 O+ D6 X! R mcasp->regs->RSTAT = 0x0000ffff; ; c% Q/ a* N$ W. n
1 z7 ^% w8 e! }
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 p' F9 O& p1 R: ?# E5 c* o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* K/ u. r6 S) G. i% h5 i2 V% O$ C& g
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' k6 A; J; x& a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: u; n- B8 Z% J, c0 d: i* x3 ^4 [" @5 W i, p! E9 }: E
/* Write a 0, so that no underrun occurs after releasing the state machine */: i$ w" ?6 x3 D6 A
mcasp->regs->XBUF5 = 0;4 \* l) j' p; F( G a, p
mcasp->regs->RBUF0 = 0;
& s& I }* }! r& V; s
* X! P' E) d& q" w8 H* ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , _+ t8 m3 U- `- s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% }$ l% W; R" |- _$ n6 I4 \
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ K& ^8 a0 Q( J& R5 O: l* z. g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% [, A; L/ s' H. U- s7 _' |% c m
( K. T8 y& U2 A4 r5 G mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 w6 l8 [1 U( N7 g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% m* \6 U/ f; ~% G mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% i& j" {; J$ G. {) @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ T0 }8 H2 M: `+ Q4 H
5 J& {7 i! z: T
CSR = 0x0000; C5 t3 d/ Z& p" v
INTC_INTMUX1 = 0x3d;/ m4 o! J. ?/ L. d, f9 S' y
ISTP = (unsigned int)vectors;
4 O& R' p/ A5 w( G& j ICR = 0xFFF0; 3 n, ^) p+ T4 C& M' g. s* F
IER |= 0x12;
- j7 D( o+ y% t( I q" s; {& p CSR |= 0x01;
6 m3 F0 W. ^: ?; m% T9 m) m& D# Z e- |5 w! J$ x# K2 a; |) e
, b8 Y$ A) G# ]8 `% I2 }
& Y4 Q5 Y, e" T) S7 U) E$ u5 R
还有就是两个输入输出函数:
! J5 I# s8 Z7 _8 _( ?# Tvoid output_sample(Int32 out_data)( F2 I/ p5 ?' A( B3 ?
{( H- C( H: p( u
AIC31_data.uint = out_data;
) I& F6 r7 f5 `# Z* s }% {* q8 a MCASP1_XBUF5_32BIT = AIC31_data.uint;
% s; a6 u' k! ^" J' l}
, O5 h" [ z- p6 H4 y- y& L) Z. t M7 d$ y. A
Int32 input_sample(void)
* I- @ h4 R" x{
4 |. x' Z0 M) X% e9 r( Q5 V) Q AIC31_data.uint = MCASP1_RBUF0_32BIT;
) h0 V; g; Y% h8 F4 V return (AIC31_data.uint);
1 }2 m$ v! ^! F2 s7 I; M2 A}( |& W2 a6 S7 `0 ~7 Q8 K5 U) G
; Y, ~3 I1 I! F" ^/ @9 m' w2 I |
|