|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. z7 U0 k) A3 e2 t* {9 B* M
main文件:/ R* S& U( F7 w4 A" }
interrupt void interrupt4(void)
( I& x" L- @; ~* s' q0 N{; ?: }8 D% E+ l' t) R: F- s! i# K" U$ P
Uint32 sample;4 Y) M i9 Q+ @% |- C8 Q
5 M* v- w5 S9 o0 ]: I0 e
sample = input_sample(); // read L + R samples from ADC
* [$ ? V: w& b: T output_sample(sample); // write L + R samples to DAC * R( E! L; l, L, {/ H: ^5 r* q; V
return;
& U( D9 B3 H) `' \( W6 @- P}
* _ F; d+ s% A& A4 |
/ |/ X0 x, K$ y" D1 qint main( void )' }7 j* {1 ], W6 ^/ ]
{( J6 W/ [: L% A6 ~/ i: D. w
1 D+ m& \; C& a0 n7 w /* Initialize BSL */2 U/ M7 O H$ {6 h) e1 Z
EVMC6747_init( );
. D a+ M4 T d, A. E /* Call evmc6747_intr function */
% @, p5 ~3 G5 ?5 @5 b aic3106_init( );
& o0 T' E1 S( y6 _8 u2 `- c while(1);
" O' d4 }: b4 N$ c}3 \4 V9 p7 O6 B- A8 l- f% V, \
2 p$ [7 O7 i( A& ?6 s6 `
! S2 V6 t T+ ~) Z! O# N+ ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 x8 E N. k. x) l
/* Initialize MCASP1 */9 j0 p5 o) L3 j9 |3 ?7 `' x, z
mcasp = &MCASP_MODULE_1;
* w/ V9 s5 z: Z) [ mcasp->regs->GBLCTL = 0; // Reset
% [' A* E( N* c4 P B mcasp->regs->RGBLCTL = 0; // Reset RX
4 \7 g, w |/ i+ B) S' Y mcasp->regs->XGBLCTL = 0; // Reset TX! l' ?3 u# x8 \0 e7 d
mcasp->regs->PWRDEMU = 1; // Free-running, s+ t* r* Q* m+ D/ S
// configure McASP0 receive registers
# {5 |: u0 |' }& W9 m/ h mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" k" k- t/ a& g! `8 J2 Q" h& d mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# c9 a" G1 G& C- _- U mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' J$ L7 c: o/ Q! f: u# ]% J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 l# P2 C0 H- M- D4 ]
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 e* Y& o- r* X7 L! v' V5 S4 l O' L" i
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! M) ~4 q5 E) T; I
mcasp->regs->RINTCTL = 0x00000000; // Not used5 c7 t R4 I7 }. ~: C e4 L* {9 c
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ K3 h# k/ I* W* L' Z8 G" g1 O
: p# \; F C* q8 O! w8 N4 u
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 P9 D% m6 E% C1 V# @5 D9 @3 j mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" n! e' j2 r, S) ?% r+ h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 y. y& H, ^- [" U3 H4 n mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# ?7 r' X/ X1 C5 w4 [5 E: w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% x) O4 w8 M$ K* o" T8 c! I# R
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ t( g' e# z- @$ @% E mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 L% [5 l! l: m s( V0 Q2 b
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 T3 f: _* ~+ ]9 ?! |" W2 [; E" G1 j5 A
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN% k3 i) [5 r0 g5 l$ _
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
% T2 n4 K7 {; q2 G mcasp->regs->PFUNC = 0; // All MCASPs, K3 C) _6 Y0 y1 A. O/ ?% O1 m! Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 J- Y/ F# K3 z. l1 p
7 N" c! J3 A$ o( W
mcasp->regs->DITCTL = 0x00000000; // Not used
5 a5 o7 K$ K* J, S& V q1 I6 d mcasp->regs->DLBCTL = 0x00000000; // Not used
3 Z; n. B8 {; r7 Z W+ Y& k" o mcasp->regs->AMUTE = 0x00000000; // Not used) h. z* q) i5 y. ]( V3 V4 c
$ |+ j$ ]; B1 g: K/* Starting sections of the McASP*/4 m. \, G6 {% ]3 z& Y$ s
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" X8 ^& W, ~" y; r9 ?+ u) Z9 R% d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 {; Z: z; j7 u1 J mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 k z4 ~6 H( P/ Y7 t3 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! ]5 |0 a* E% \6 P/ O! s r
- x$ { {. B; X- u/ | mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 | P) N" c( ?* G4 V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# O: L( a4 \, l: C2 `; u
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + V# n5 l% W( r1 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' e* Z8 Y( z% H% |/ h9 l
% z+ R" a; u( B& l& @& L7 a mcasp->regs->XSTAT = 0x0000ffff;
) c+ a1 z; s7 p% W f mcasp->regs->RSTAT = 0x0000ffff; + o& D3 ~/ w3 k4 o1 T
' @( t& \2 k' Z2 s9 B$ M, v mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ ~4 y' c! S0 ?2 @( J% o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 x) Q6 W4 G/ R
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" y* F! g) P$ F) a. m2 c/ s% H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% h- a5 N+ R! i, ]% `; f- q
" m0 ^) n% y0 Y5 d4 e" S6 C: m" m /* Write a 0, so that no underrun occurs after releasing the state machine */5 o3 e. f' E, R- c
mcasp->regs->XBUF5 = 0;
) l/ A/ P# w" c0 V9 _( P mcasp->regs->RBUF0 = 0;
3 H3 y/ M1 O* p2 S3 |+ R' N V( v+ V0 Z/ M/ n \( R4 d( O1 j/ |
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / t: j8 i' X! E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* D. e6 V9 J6 P2 }' q* ^7 @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 K0 X6 a# s, V% b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& p8 r. T. q6 D; V4 d' t' N
0 M% k7 c2 z$ X( u; o& e
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 p. _5 T4 q; n% E: } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# S8 L! d2 o& D" J1 B0 v mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& s) v" a4 E# B/ y/ _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ U' r t2 I c3 ~4 ~ \3 ]( v) d
2 F. o0 l% ?4 M CSR = 0x0000;: ]# a+ k9 C( N! f k- e& y
INTC_INTMUX1 = 0x3d;9 R) g6 H( m! i" n9 G5 D1 V
ISTP = (unsigned int)vectors;
- a; `0 s( @; x- m ICR = 0xFFF0; ; ]& h. B! P4 y/ N
IER |= 0x12; ( y [* u+ e" n! m& L q& W
CSR |= 0x01;
- d7 F8 @4 ~9 T/ j) i' O$ v1 m. t
0 g! j# U% T9 w" x- a, x: P
4 k, w/ Q# v: ]% B
4 h' f, F( {7 p G, x2 b! K; \还有就是两个输入输出函数:& p* G! j. v k
void output_sample(Int32 out_data)
9 G1 @, t* f1 |. Q7 V{
* l- N+ Z: c ^7 `& Z L AIC31_data.uint = out_data;
1 A: o) r% i4 k6 C1 S MCASP1_XBUF5_32BIT = AIC31_data.uint;) W K0 n: j) }! [# d
}; P" X+ S8 v. g T
1 j% V9 r/ E: L |7 {. c; j; p
Int32 input_sample(void)
* f( X% ]8 R6 }( V) ]- \) I{
+ ?9 P& P4 X3 B+ D2 `3 }; f" O AIC31_data.uint = MCASP1_RBUF0_32BIT;
% E+ m. I- n1 N8 L# ?( X return (AIC31_data.uint);
/ ], e5 Y' l; L( u0 G0 p" t}' }. o) N; N8 o6 J, \8 ?
& z& U3 s4 e, U' i2 i3 ?! [$ [
|
|