|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 S0 J0 d# G( i' p( a. e
main文件:
7 m5 d7 T$ l& H* k& u4 z. dinterrupt void interrupt4(void) # {; `* C {/ w, Y+ D, h
{
9 y$ h2 g& s5 A- ?6 k2 H6 ]2 B Uint32 sample;6 m; I0 [6 J/ z$ F; C
, e0 @& }9 W' w2 r1 O6 t {
sample = input_sample(); // read L + R samples from ADC6 K9 U/ ^" C0 ?. Y' |
output_sample(sample); // write L + R samples to DAC $ E7 v2 r0 D; h5 k. z% D
return;5 k& J5 d7 |# K& x+ M) |
}
* q6 _ S) p' }' ~; q' |& z4 l d( W0 C1 y+ O
int main( void )
8 T( K/ j9 t' a; m{" {" Q$ Y( I/ h4 }0 e
5 u; v; V" E8 G# Y- R3 F0 P$ T /* Initialize BSL */
: x$ A. Y. J- w" \. W1 i EVMC6747_init( );
- s. d" O7 k* c; {& W( K1 ~& P* F$ ? /* Call evmc6747_intr function */
! N: t6 B( z4 [$ h aic3106_init( );
3 P6 K: S( S( D' U while(1);
: ]7 J; z, y( m4 x* x0 {} Q' A5 O, A( e4 U; n
. f7 d/ l N: S& W. r
! l, u' }8 \# z: }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 r5 k8 }7 t' P! W/ Q f7 X8 N/* Initialize MCASP1 *// M7 |" T' _8 i7 d
mcasp = &MCASP_MODULE_1;
6 I4 O0 y: `7 O2 w {' ]0 v; p; t mcasp->regs->GBLCTL = 0; // Reset
2 w8 q m% A) S mcasp->regs->RGBLCTL = 0; // Reset RX
: v5 K ?4 b$ U7 | mcasp->regs->XGBLCTL = 0; // Reset TX
+ I( q% @' [) Q3 R/ ~, K, e* ` mcasp->regs->PWRDEMU = 1; // Free-running5 g5 f" V& d5 z* n# D
// configure McASP0 receive registers" A. ~( x; Y' q/ w7 G9 a
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used ` z2 V& l# W: q
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 n8 u3 u% f" N3 j- r mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: m' [. h( Z0 F6 W mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! A/ U! S# z0 k& z5 v
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" S, l' O- A6 [" V) K% z mcasp->regs->RTDM = 0x00000003; // Slots 0,1" T. o E) U$ \0 H
mcasp->regs->RINTCTL = 0x00000000; // Not used
7 \) y) ]6 e& \' Z! ]' d mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 l' g F, u! N; b; z6 F
8 s/ B- Z; x, e2 A' O' @
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' f+ [1 ^ c9 r/ c p# y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, U3 Y! M4 I( ^7 v' s/ @: _ N
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ V6 d( ?9 h' G! b' @ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 a; f/ i' W+ M
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 |, ?, N: P1 x6 H mcasp->regs->XTDM = 0x00000003; // Slots 0,1; I. C+ z( r7 o9 ?
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! U2 \7 N+ L5 f( H4 C
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ p& }( K8 \" ^
8 |# Y9 \0 J# C2 G- M7 J- h
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( n: Y! `7 k. ?4 I
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- g# b S2 G7 I8 s; C
mcasp->regs->PFUNC = 0; // All MCASPs7 I6 P: V9 Y7 g# Z: ~% C
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ L% a) ^1 G" l0 {' u6 E
+ ^+ ^: K2 G9 v mcasp->regs->DITCTL = 0x00000000; // Not used
1 g. X3 v2 [- A' z& }! z mcasp->regs->DLBCTL = 0x00000000; // Not used
/ M: g' |7 l; ?& r mcasp->regs->AMUTE = 0x00000000; // Not used
6 x6 a7 q" l' ?( u7 S7 g' x. M: s3 Y1 f f2 s
/* Starting sections of the McASP*/0 g6 ^' T3 y s+ m3 _: Y, Q" j
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 p! n" d" z5 m- l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 8 q: f. q. p/ r1 B7 n4 z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 Z# n0 E6 ~. n/ x( U* n s; ?/ E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ H$ L: P, R, S, D( ]+ v
. h2 o: m' }7 G# k& ]
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; @: A6 G l) }. G; @2 y6 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 X# d$ v4 ^- ]# x( Q; P/ R0 K, J7 [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) i- \1 A* {) g7 y0 h. ~$ x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 D) [% C7 x/ a1 K; e1 o% {
: k1 l) z6 M6 s2 G, s
mcasp->regs->XSTAT = 0x0000ffff; ) ^$ z, r1 s( @- i" v
mcasp->regs->RSTAT = 0x0000ffff; - R2 r) T4 ^ o" s* V2 o% Q
+ U% O* [/ p. p# h7 N' J5 F+ s
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' m! G5 `1 W& m, p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) b4 w/ R7 x+ e mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; Z. Y' v" C1 t' a8 C s7 W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 B. c" p: ^6 ]
8 P! a/ J5 I, h0 G /* Write a 0, so that no underrun occurs after releasing the state machine */
% v0 k# {, l5 h* v1 u6 o- W& F mcasp->regs->XBUF5 = 0;9 U5 H" C3 p+ T. L
mcasp->regs->RBUF0 = 0;- a. f+ X7 U$ I8 F; e& K
+ F3 G0 t! ~2 X- [: `. C mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; S, Y$ g: a. A2 y; h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. y9 L# t7 ]3 ^9 f) \ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 m3 J6 |$ T, b: P" a# b1 z2 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& A* u$ k8 ?- q
7 S* Y6 r+ }5 \* `2 b$ }- ]; P
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 i# p, E+ D: e4 I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% M. B% N' U% c0 h* s1 H mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & [7 N! T- F6 \- F- d6 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: a9 p k2 g: J8 k5 l3 H
& E7 N% F$ a; P. }' N
CSR = 0x0000;8 m2 a+ @$ c/ K- y* T8 e& W
INTC_INTMUX1 = 0x3d;
4 ~2 t3 O9 h9 W5 x6 S3 S ISTP = (unsigned int)vectors;" _4 ~; Z7 @* P. g/ a
ICR = 0xFFF0;
- `$ }+ o; f/ Y$ I' X/ w4 \ IER |= 0x12; 4 Z( j4 y( d; T0 e6 M1 `
CSR |= 0x01;
/ m w' t9 M5 }! g- e* j' z$ Z P: i' K6 }1 A5 P e: o! C
5 E1 Y2 R& J: J, y% y1 ^
" n6 Q" ]" g: H4 g
还有就是两个输入输出函数:, x' x/ C/ `8 Q
void output_sample(Int32 out_data)6 e3 G0 b0 T+ y
{
! T8 j4 N3 c M' |( t7 x AIC31_data.uint = out_data; 7 ~! X+ ]( P- T. Q* w" F1 e
MCASP1_XBUF5_32BIT = AIC31_data.uint;1 R. M0 d# g0 L
} N( q" I4 p2 ^- _ z4 d1 S( T
. ?: i% m; X/ R" _Int32 input_sample(void)- I; L# r+ \9 d% G) J
{
7 O+ n, G- {7 G; B B$ C AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 {0 r" y' o& [5 Q+ j return (AIC31_data.uint);5 |; n9 X8 u/ K% p9 p$ Y
}
0 p1 X6 _2 k- W$ r& k
0 @2 T2 s4 c5 T2 n% l" f! V |
|