|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 p' P. @+ E! r" d$ Rmain文件:
/ `" {) G9 }$ ^; C. I6 h F ginterrupt void interrupt4(void) ! ]# U+ h- W! U' s% E/ A- N
{3 h/ ?. v/ @% j9 a( v! F1 S
Uint32 sample;
1 ?4 P9 U8 u8 v' P8 S7 ?, t2 H4 X3 \! P# p
sample = input_sample(); // read L + R samples from ADC
8 A1 _$ z- W& A& k1 z output_sample(sample); // write L + R samples to DAC " Z8 G7 E$ X) ~1 f- i( U3 ]# R
return;" B7 ^3 t& a$ j
}
5 a- {0 S ?: M* z9 ?: d+ q3 x" l
int main( void )4 ] s$ B* U! [. D) N6 X# x
{
4 K6 k* A0 w( T# a' ~$ k1 ]2 _) ?# c6 d: a+ Q! [
/* Initialize BSL */
6 n( e* J$ y8 ]' T: ?3 } E EVMC6747_init( );
+ \" ]* r# K( E' O* j9 }/ |; I /* Call evmc6747_intr function */
) p. m! y" y8 ]& |( l7 _. w aic3106_init( );
$ X' x" Y4 `$ r) i6 Z* x1 } while(1);* v$ k# D' P1 I9 _
}4 K* }9 n! J! _2 ?$ K# N; S! x
. a: G6 U& G0 p) x2 C2 H9 _8 ]" M
$ c9 P+ P- d2 E" I) U3 M: ~4 O6 u2 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. h# B- d! ?& y0 B+ b$ ~( k: B/* Initialize MCASP1 */2 @0 f3 Y2 R" V0 y0 k
mcasp = &MCASP_MODULE_1;
" ^5 r2 B' Z( d/ E) [! i8 `% L mcasp->regs->GBLCTL = 0; // Reset
" F# Z' w) C4 D" {. a o2 Y mcasp->regs->RGBLCTL = 0; // Reset RX
" V( s' }5 N7 l6 i mcasp->regs->XGBLCTL = 0; // Reset TX
9 }8 ~% Z3 b; x" I- m- ?; O mcasp->regs->PWRDEMU = 1; // Free-running: Y2 d, S# N9 Q4 D% B( Y* O
// configure McASP0 receive registers. j* q+ z* j8 Q2 N6 }1 v7 k- K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 m7 U% p4 W/ M' _( Y mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. a( M" d$ g* R3 I( g1 T" y' a+ j
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word F" f. G ]1 ^
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) h& S# @# I6 W1 h Q" }. \
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
& }4 }6 R( ]" J# ]5 _( p# M mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 s/ i$ f7 `1 g5 _1 e+ \* v mcasp->regs->RINTCTL = 0x00000000; // Not used
7 n/ C3 G: H( ^! o( l2 t% f& d6 o mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( u- m) k# l% {3 }( C' v( j
; x) P0 X- s: k& S' b+ ?; E* h mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( K4 [8 ?! A( ]$ r" e mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 R3 k' }: v7 i" x, d
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' P+ U; l3 ^" n, C' P# P* Q mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. x+ @7 A0 l- y1 X1 a/ y
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. V8 a0 v$ p$ ^6 Z w5 Y
mcasp->regs->XTDM = 0x00000003; // Slots 0,1! V- b9 w2 X3 u+ d9 Y1 W
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 |7 f( i( X& }9 Z# [ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( T8 _/ y" Q- L! ~; H5 w; a) J4 ^
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( I, W) I1 e; S* L) | mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. }) y) f1 X0 |6 @$ ] mcasp->regs->PFUNC = 0; // All MCASPs
( k% b+ ]7 b6 g0 t+ r2 X: Q6 r$ w7 I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; f a+ I: X8 {
! \7 c7 e+ _7 y' M6 i mcasp->regs->DITCTL = 0x00000000; // Not used% V0 ^" i2 L3 P* B+ a' x
mcasp->regs->DLBCTL = 0x00000000; // Not used
9 V' B9 e1 A0 e6 K; h7 L mcasp->regs->AMUTE = 0x00000000; // Not used
8 w0 E1 ~: u0 \8 y1 l' {& \6 D! ?6 W: i3 C/ D {4 m
/* Starting sections of the McASP*/
, u# Q3 B- i3 u( G! Q- L7 J1 c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; X l/ R# ^0 Z" w7 o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 K4 A$ N$ w* v% F$ f' G
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% N& C1 k# V/ I. } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 D4 G5 Z" M: H: j: R* o- z! O
. |( ]5 z( `7 A% Y# R( @8 w
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : D8 \+ P( o' y+ A# Y: J0 b2 D0 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 Q& f! c% T1 z3 W1 x
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" K5 ^3 {7 Y! L6 j' E/ h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 s0 i! j# x. Y% h6 E/ S. [0 a/ w' I6 U/ x9 d$ a
mcasp->regs->XSTAT = 0x0000ffff;
/ T. r6 d' p2 `5 m2 A& Z mcasp->regs->RSTAT = 0x0000ffff; # ~- C) H) P) V' J
* b/ Y! q& U. R1 d* p
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. E% I Q' E: r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 {+ j9 R* C. { ]* F, G mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # G `" I; ?& }9 c% x+ ?5 |( B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 b' n: U+ U: {6 j+ L% k* Q6 T5 }/ y# `& j2 i
/* Write a 0, so that no underrun occurs after releasing the state machine */
) t+ }5 {: E2 ]: h7 I. p mcasp->regs->XBUF5 = 0;
" W& K8 T0 ~5 A7 O' R% Y9 l mcasp->regs->RBUF0 = 0;
$ N7 ?" H+ D% t/ q/ ~3 u$ I5 f X6 Y; e% t
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " D/ F" _- w% k. p) l; |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: n2 z0 L+ R+ C& |( Q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' i" y. w9 l( ?; A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& ~0 E( p& F7 m' P
4 Y2 m. M' q5 j. b" y7 {
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( v. g N2 N' F( k2 Z! T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 q2 [4 K: A/ _, p" I
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + l+ e, k( F1 x/ a: {2 `$ a! [& P, u4 k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" X4 g* {+ N& F3 [* m# b! W$ {6 C5 r- S8 ]
CSR = 0x0000;
' Z. y) k% I" h+ G' { INTC_INTMUX1 = 0x3d;
8 [1 @( a; I# F) Y4 \8 _ ISTP = (unsigned int)vectors;* z- m$ q- N' U- S7 L' W
ICR = 0xFFF0;
; R: H& F3 M: n) \& N IER |= 0x12; + p* {$ |. F- _& U$ S
CSR |= 0x01;
: o8 d8 e; w% J, Q# I. D; D; M" v* x1 V( u4 t
, U& V% |6 `$ m# o" Z, o
+ c2 S$ t' S0 Y* D. p% \还有就是两个输入输出函数:" O5 H; U4 V& w
void output_sample(Int32 out_data)$ o( ?# y5 r) `* W8 `/ s
{
9 b* _$ S: F4 P1 Z+ D AIC31_data.uint = out_data; . P6 y, T/ M& J; b+ j1 {
MCASP1_XBUF5_32BIT = AIC31_data.uint;
' o/ K; n0 @9 d) Y0 O3 |8 Z}
( t/ F( ~- W7 t% R+ Z" w7 J* n1 \9 P1 ?6 u+ V1 K# R% G* p1 y
Int32 input_sample(void)" ]0 _' j6 `' ~, m5 u3 e$ P7 d r
{ . I% t F$ w/ _' r* e6 z
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. O2 Q1 t9 b& _ return (AIC31_data.uint);% i' K# I3 x, Y4 H: f% t* |. P
}2 T- S' f4 O( Z0 a* o
; a: m5 u4 d! p+ b: u" `
|
|