|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% `: P) _5 M: {5 D- g2 w
main文件:
; J/ f5 j% r! X$ B7 Vinterrupt void interrupt4(void)
# b8 w: n, ~4 P9 X, \& I{
' B! @/ R# Z8 M$ Z2 C. ^) g Uint32 sample;
. K9 \+ H5 w& T# L. ?
& S+ W0 R9 c5 t; |1 ^+ T sample = input_sample(); // read L + R samples from ADC
& L1 D- m/ R" L output_sample(sample); // write L + R samples to DAC
9 M- |- |: W. @, O% F) p; f9 V return;4 E) {0 m o) b, S
}
; f; c* h$ z, W5 w7 G/ U6 _+ X" y# I, [1 k
int main( void )
% D; |. E5 i. g/ P{
' a7 a8 W. C! [7 q5 ? I. t; Q; {- @) [0 @4 t
/* Initialize BSL */
g3 J; ]+ v6 ~4 a% `" m EVMC6747_init( );
+ }* a# C' D4 w5 s /* Call evmc6747_intr function */
. Z+ {6 U$ U; W6 Q5 a, m0 V. n aic3106_init( );) B0 {4 m3 c3 s9 |
while(1);
) M( e+ x2 p* f}" t" K; t( y* A/ P! B! x& E7 I" l- X
! L& @1 p* |" [
4 J: i1 k4 G# S% N, K# W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 P- x! U; [& ^. x7 y/* Initialize MCASP1 */
# V/ R4 u# }8 S$ n6 | mcasp = &MCASP_MODULE_1;, J0 \! s5 `) D+ l# p
mcasp->regs->GBLCTL = 0; // Reset' y1 ~; ?8 P, @* K; i
mcasp->regs->RGBLCTL = 0; // Reset RX, L- _: w" X; W: {$ k, s
mcasp->regs->XGBLCTL = 0; // Reset TX/ d, w6 U5 @2 d! [
mcasp->regs->PWRDEMU = 1; // Free-running
# C0 Q* N0 m# [& H0 g4 G3 G // configure McASP0 receive registers
w! Q+ N" U# q mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 Z- ?' W' [1 Y0 n1 Q1 U o, f" H mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) B8 e2 \& Z& R
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) {. H X/ M' H1 n5 o1 Z: E
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ u9 s8 F4 r- m& G4 t) d2 C
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( }$ T* b; S& |7 P' B
mcasp->regs->RTDM = 0x00000003; // Slots 0,12 T. w4 Z( F3 r
mcasp->regs->RINTCTL = 0x00000000; // Not used- |. `+ ]+ l3 g& c% H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; r; ~9 t6 v# ?( y
( X7 l% }1 l: V$ k% w. [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
5 E) W0 T1 s# K9 b0 ~9 z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 i q- w2 j q/ d mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 @1 G" B/ l$ Q7 t mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 n( K% Z% E' g3 ` mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK A" {) W7 s: M4 ?% v" K
mcasp->regs->XTDM = 0x00000003; // Slots 0,1) P( f7 f% l& j$ d3 T- y1 w9 H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 ?9 M2 [- z3 Q# F4 \. l
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 P7 e3 q8 i: m% h% } k
' e, Y' N+ A0 w: w* Y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
# y p, H' z' U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT" u; ^# C8 |2 g7 U$ k: S
mcasp->regs->PFUNC = 0; // All MCASPs
+ D: M @: u9 ?: b X: X mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* g4 m; |' `1 o2 o1 ~1 } S
( m0 N( l9 {4 v8 J9 e$ a mcasp->regs->DITCTL = 0x00000000; // Not used
) K' V. M! \/ t% S# O mcasp->regs->DLBCTL = 0x00000000; // Not used
- F/ I0 Z' R1 F8 w9 x% e' { mcasp->regs->AMUTE = 0x00000000; // Not used
4 ]# o7 P) ]8 v% F, x8 H7 i% U3 _( H
/* Starting sections of the McASP*/* v4 z6 f' J P6 @
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 o2 r. ^& S2 C. E9 ?+ I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , _+ q. p. f3 r7 c6 @
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , n" M) ~, s6 @" ^( |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ _2 `" P2 r" ~7 O
: \' o! D$ X M. `' N mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ h/ {" Y; H9 S" O$ J" }2 m) O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 S+ t( _* F& U' L" L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ |9 Z7 i. B. o' e8 U0 m: n: C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 ?( K$ W6 { B; Y5 g5 \0 \" n1 f- y q0 N
mcasp->regs->XSTAT = 0x0000ffff; ! m: K2 }. u9 p0 q
mcasp->regs->RSTAT = 0x0000ffff; 7 g8 d+ K9 z* Z8 I3 T* i, S
& j2 d, x6 N& p7 p mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% k( I1 T' i% u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" W9 G/ @( e3 e, X% t% d mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 y, u2 J" h2 l, q6 M7 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) ]0 N. M, e. k. h! [
' B$ k8 Z0 Q% D' H7 b. f( r
/* Write a 0, so that no underrun occurs after releasing the state machine */
5 `- d9 @8 y: `1 t6 r3 `- D0 a& h mcasp->regs->XBUF5 = 0;
% F0 V. r/ Z( ^; ]1 V mcasp->regs->RBUF0 = 0;" I8 X) m/ z* C. F
; u* l9 e. i6 j
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , a! @" J! R* p2 w, S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 L% e1 u4 D6 T# K' u' i mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " @5 s& ~! y- g) N! P' I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 i$ n. a" _% u' H5 a: `# F7 O
" {& t7 @2 `* v6 U) _% G
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, `% w) w2 m1 B* n u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; A ^! P3 s3 C* z mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# F3 r5 l# U6 I, W' v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) w" m$ w; }# N( j
) w$ S# u+ e x! F* @# z9 S3 J6 ?: z
CSR = 0x0000;9 f/ `/ K& M6 g& j7 K- i
INTC_INTMUX1 = 0x3d;% ^3 N) r5 ]# {2 Z+ q+ e( _; i* w
ISTP = (unsigned int)vectors;& a" F( v; M* ]3 K/ e5 _, o+ k
ICR = 0xFFF0; 3 ~% j' t: V3 i; p! X8 k
IER |= 0x12; . D2 _5 J4 Y8 S( L E% o
CSR |= 0x01;
. C o1 N) V' E N) j
9 n+ J% [* n* ]" {0 M- r( Z9 J) Y+ d8 a! `
# N& H/ H# G% S9 }9 M2 u还有就是两个输入输出函数:
! f% v0 W9 m% e A' K- Hvoid output_sample(Int32 out_data)+ c" h% J1 S( X" a+ O3 K$ m
{. K$ B! Y) T7 N; `8 x, k
AIC31_data.uint = out_data; . ^6 h& ^0 @3 _. G9 `1 z6 G
MCASP1_XBUF5_32BIT = AIC31_data.uint;( U+ E7 x9 }4 J$ o
}+ E$ h- H. n6 _2 t m
5 \# c7 j7 B$ i+ RInt32 input_sample(void)
4 q4 R+ N0 P0 ~6 e! t{ 3 s/ j9 @# H) y7 ]9 `) ]" R1 H
AIC31_data.uint = MCASP1_RBUF0_32BIT;' F/ a! T2 u) w6 R
return (AIC31_data.uint);! E+ o: ^4 a: Q
}/ c9 |9 U( T" @( H% q1 j
4 s7 G8 k; t: Z; a% r3 a7 g$ w
|
|