|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( M. p" L: N6 x. u$ }6 v; ymain文件:4 y3 D! n- W2 C( w2 |
interrupt void interrupt4(void) - _* `+ L* P4 C; i! m
{; G0 H( ^& K* E' R
Uint32 sample;
) O: z+ s/ A" \; p `
7 A, D( f7 s( y( l4 X) |) a8 ^+ a sample = input_sample(); // read L + R samples from ADC* e$ y! w: a8 t. C( F
output_sample(sample); // write L + R samples to DAC
2 [9 r. H! {8 \2 c return;
/ a* n1 r! r( q. X}, P# [% N) v9 B$ O& i
8 m( l; n( G2 _3 ~# v$ ^8 W! Eint main( void )
+ ]2 Q& w/ k; B4 l; H+ Y{
" [9 O4 A4 V6 I# L A, j$ S K+ |% E. P# D# n
/* Initialize BSL */
6 g& Z8 V ~* A- [* R EVMC6747_init( );
# P2 y* n* Y1 \4 U* p* j# { /* Call evmc6747_intr function */
8 o4 ^: {" d/ |+ N9 F- ~* ~ aic3106_init( );' A5 w1 _) `7 K1 c3 Z( R! [! ]4 N
while(1);7 r& {4 `3 E1 q; F5 ~
}
3 F i' ?) f7 G# |! K1 u4 H6 J+ n# t2 n
7 I8 }7 j9 J: Q7 ^
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& }% B: s2 t6 M5 R
/* Initialize MCASP1 */
- N& C7 X4 v3 ~+ }. s4 F mcasp = &MCASP_MODULE_1;. N' J k2 }5 ?$ R2 ?. M
mcasp->regs->GBLCTL = 0; // Reset
2 a6 L* L. p3 O% a+ D x; { ~ mcasp->regs->RGBLCTL = 0; // Reset RX/ O; V K; T8 w" ^0 o
mcasp->regs->XGBLCTL = 0; // Reset TX
1 V" ^# x# D3 F$ ?2 v# ~; ] mcasp->regs->PWRDEMU = 1; // Free-running- Y( ~/ j5 U" B1 r% z! o( G
// configure McASP0 receive registers( {8 F3 I) n$ v& `: L2 V
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ \+ T) l1 ?( V- f. `2 g/ x
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 _3 i5 b ]7 `% _. n; d6 N
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' m' Z/ a; j% l) G$ z' { mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- A' G( _5 }' o; Y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)/ p! @ `; [# ~8 u) E" g' D
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ ^% K, o) u3 j" P; a mcasp->regs->RINTCTL = 0x00000000; // Not used: ]" h. n ?% c" F
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, V Z6 Q. W3 L, M; L: w7 M
- f& V' ]! |+ Z3 P
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 n7 C% S/ c \+ g4 W: Q+ T9 P mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; L2 i+ ?2 ]: i" D) n mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; B3 x/ W/ N* z9 w$ y; R) s
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ Q$ j$ b0 N: `, |# A P
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK# G7 x8 r4 z5 P
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" P2 U1 }6 y: b mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 Y4 ]7 M7 _& W' o6 K }
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& V+ M0 x) C9 c, D5 V; E# R, O6 g8 A+ o, p
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
& b0 d# v! l8 ]8 E1 w mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 d! B0 Z: q* U. w& G; X
mcasp->regs->PFUNC = 0; // All MCASPs1 S2 H1 R' d5 O7 T, x+ k
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! ?. U: B5 @* q+ ]; @0 I* {
" d' d5 l1 e2 j5 b
mcasp->regs->DITCTL = 0x00000000; // Not used% p4 b5 P8 `' q4 C
mcasp->regs->DLBCTL = 0x00000000; // Not used' J# z' a; w' o- `5 S$ E
mcasp->regs->AMUTE = 0x00000000; // Not used( d* i. x3 D# T4 s3 V$ w9 i
9 ~# `! z, T9 N" z* M/* Starting sections of the McASP*/# q9 n9 q q7 J0 b7 `6 h
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 V9 D0 G$ M! B+ s1 ` h. f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 I( l) x U7 F
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 Y; s" V8 S. _+ ~2 x5 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 d- L( p$ r# O' r9 `
8 |- ^$ X# g7 Y0 X
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; m4 g4 P/ |& x) r Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ [* k/ r5 I, `8 l' J mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + M, t j: e% Y* N6 k) X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; S/ B8 M' f: O {
1 _4 O, h9 |" R" @9 J6 D" L mcasp->regs->XSTAT = 0x0000ffff;
# Z& y7 o* Q X) a3 X mcasp->regs->RSTAT = 0x0000ffff;
( k) F# |4 j& B" t3 C! U* o
: O, a8 W H1 X I mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) U2 V9 \, r, j8 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 K$ ?! E" b* Z8 } mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 P/ `& Y' l5 Z4 ^3 P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ D. T$ U7 R# M" g G8 e" p
% S* L) Q0 c- P9 f2 M /* Write a 0, so that no underrun occurs after releasing the state machine */
8 x, j+ n2 Q& d1 o) G% h- v mcasp->regs->XBUF5 = 0;
8 t0 M7 k0 g9 L mcasp->regs->RBUF0 = 0;/ @- {6 e$ P; s4 I1 N8 e, ^* K
1 k/ \5 d8 i0 q6 g- p
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 t6 X6 l5 i0 u' G* T# i. q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% W) @" ]! y" a/ I
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ N9 m* X" s6 c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! l5 J1 P: O, M& b/ z
* Z+ `4 C* w1 [* t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
\' k9 Y) P5 k# b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% s8 o, m) r/ M: ~% q) h [
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ B8 }3 z) K' U1 q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( T+ }! M- }0 F7 u! j$ k+ ]
. ^5 Y& M+ t7 {' U ? CSR = 0x0000;* x, o6 @6 n7 I* O7 i& S
INTC_INTMUX1 = 0x3d;
' p% ^, e5 ^0 ^0 E5 h" K ISTP = (unsigned int)vectors;
1 z( F0 Q# f/ x: M; q ICR = 0xFFF0;
9 ~: I, |' j9 k! r! \/ K2 y IER |= 0x12;
6 s& @! T' A) ~8 t) |- s CSR |= 0x01;
$ z, G1 y7 Q/ T3 D
( n! M1 z$ J& d$ m+ v- E5 c& Q; }, F6 o0 b
1 L% i; c q# A4 C& x' k还有就是两个输入输出函数:3 z" u, p* {# O4 I7 _
void output_sample(Int32 out_data)9 J+ r1 |+ L% I+ B/ b
{( ~1 ^- W: P3 [
AIC31_data.uint = out_data;
( K7 m* a) y/ r3 G% K( N: z% p MCASP1_XBUF5_32BIT = AIC31_data.uint;' v" F( R* u- E6 f5 o0 d, r0 ]
}
, U1 N9 p8 ?6 ]6 H! T/ d; c" t2 ^" E# O
Int32 input_sample(void), M1 k& o; d1 x
{ ( C, I7 y9 g8 ?' s* |
AIC31_data.uint = MCASP1_RBUF0_32BIT;
" m! I" X7 B! B4 J/ q4 l/ [ return (AIC31_data.uint);1 p! P. |( t& M$ A$ p5 g
}
8 I' P" A& h5 R n' R/ t
8 `$ r6 B: z; B# k4 u |
|