|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- a! _: w0 B- G% \8 Cmain文件:& T; h: ]( ]# ?2 F
interrupt void interrupt4(void) ) v* ]' B" B3 E/ u
{: N6 f! _4 r" A- O- d4 s2 {) A
Uint32 sample;
, H" X. K4 a" L$ x
* g- P) {& V: n0 W1 S1 {/ ? sample = input_sample(); // read L + R samples from ADC2 ^' ? V8 P% n
output_sample(sample); // write L + R samples to DAC , Z/ G" I$ \0 p4 `: u( h$ F
return;
, f3 U4 Y! `7 U/ p; m+ l& q}9 M( a' o' S3 g) r" t7 V9 W! R
# \2 V5 O, J- `
int main( void )) w6 p1 o3 b, V0 o7 _3 q& E
{
; c6 d* P9 s$ Q1 k$ C
+ E* t: @1 L( X' W; E! { /* Initialize BSL */* V' m0 `7 }1 o4 j; {1 }
EVMC6747_init( );0 b z( _" }* l5 Y( u1 y
/* Call evmc6747_intr function */
6 _2 f+ V, u4 ^. | aic3106_init( );+ T; U& t" _ U
while(1);
3 W6 b. I2 N1 q, D( X}
) y: u3 T! O, T# s: x
+ a( z1 W2 v0 S! z+ G2 q8 K5 Y: m
- [3 s$ D9 _7 D/ Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* N/ H& g& [6 p5 X6 b/ a
/* Initialize MCASP1 */" R/ R, e+ n& `& d' c
mcasp = &MCASP_MODULE_1;$ A: p/ }4 u( K6 b0 O0 P3 l& q1 d
mcasp->regs->GBLCTL = 0; // Reset
0 ]* e3 p& U3 I7 a( y5 ]+ w mcasp->regs->RGBLCTL = 0; // Reset RX
: \2 G7 I4 G: H1 Z. l. B mcasp->regs->XGBLCTL = 0; // Reset TX) _7 y/ Q( G; |7 W( X0 |
mcasp->regs->PWRDEMU = 1; // Free-running
/ J: i! Y h/ c* r7 d! t7 B" b // configure McASP0 receive registers
" y6 k4 _5 B1 s5 L mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. a; Y( d1 M G
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
b# |: S5 k p8 O; \ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! r/ Q, D1 X9 s6 _; T mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 g( L; _. [% K$ I& `5 q
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 v$ X" f& N& {
mcasp->regs->RTDM = 0x00000003; // Slots 0,18 j" b& B6 H8 r/ K: w
mcasp->regs->RINTCTL = 0x00000000; // Not used: [9 R8 S+ ]5 G2 F& h. O
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- k, k8 d9 z2 d7 x' c" E2 v) I4 `
9 _4 n2 H8 b1 z Z6 p
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 x# A; b2 m/ K
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' t) E7 I; Q' Z% z: @
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ T, j+ i5 \' d9 x& o mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' u8 k; i1 k! @6 K, g9 b T$ B9 u mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( \" s2 h4 P* |9 `$ a. c( I/ R
mcasp->regs->XTDM = 0x00000003; // Slots 0,1 d" V/ h* D* D) i' K
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% p8 b2 E; s W1 f0 N; Y mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' B" h. a4 a8 E+ p: ~6 i5 L1 s' _0 q* Q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: M( c Y7 @2 p. \; Z0 ]7 K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; A) p5 F; B8 G: D mcasp->regs->PFUNC = 0; // All MCASPs
& ]4 C! x* p1 W/ d mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; Z0 @( _$ b0 C
# s* N1 J0 z, g" c& B1 w
mcasp->regs->DITCTL = 0x00000000; // Not used
v6 ^& ?% c% W: t) i5 A' w mcasp->regs->DLBCTL = 0x00000000; // Not used
. O# ~1 P) m; N0 _. B M! B' j mcasp->regs->AMUTE = 0x00000000; // Not used3 L) P0 {: R: I* U& |
8 f% @, G: ?! H; l( W5 \! w/* Starting sections of the McASP*/
5 r9 S0 s- ~" a$ |: \% b mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 \7 t1 {1 q1 S8 ^; ]6 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 o+ [7 d. k4 ]# B& V7 `7 D. k mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * r5 E3 }8 f$ P) L1 y2 Q/ X$ h q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ F; a/ q! W8 e% v5 z3 K9 k, r
. o1 d" W% F* T( P' X2 } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; q1 t0 i" ]5 u# ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
p4 x8 E8 f$ S- x" ~ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; v! J; Z" _2 Q4 F# c/ C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 h1 W# ]4 Z7 k$ J1 M% r
' z1 f! H: c& z6 S0 L' ~% O5 x7 n% ? mcasp->regs->XSTAT = 0x0000ffff;
& z7 `& c7 Q2 L mcasp->regs->RSTAT = 0x0000ffff;
9 ]* P/ Q& X/ f9 G" h+ {4 T$ E0 Z( N( i9 Y0 w9 U# J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: k$ }7 f0 ~( x0 b+ ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# |% c1 h; T: \
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 k& ?4 l) b k2 _( Z+ x) v- D. {- O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' G% N4 F& ~/ b8 k
. |9 v- R& M' d8 A2 h /* Write a 0, so that no underrun occurs after releasing the state machine */
. n' M0 \1 x% e mcasp->regs->XBUF5 = 0;
( p7 w3 d# R* _( u) T/ O+ E mcasp->regs->RBUF0 = 0;1 y2 M' [# @ i8 a
$ U9 Z" X) y7 _2 e$ h) o
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 X+ m0 g$ N. x, ^0 u( r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: r. ?2 ]' \1 ?! P7 p$ x; Q: M
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 J* `6 f0 G/ k% u9 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 j* W7 ^5 a& M) z( P V/ e6 @, t/ }1 P! A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ W9 J i9 c$ D+ s5 p" N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ e; Q5 B- Q1 I& ^- ~+ A9 J
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! R$ R! I4 S, P# a, D1 D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. [$ q7 r- I7 p' p" h, D; M3 y" y7 j5 a: D
CSR = 0x0000;
: Y; j0 P" B% }9 { INTC_INTMUX1 = 0x3d;+ _# C! ^4 @0 f/ M
ISTP = (unsigned int)vectors;
6 t9 v0 T/ f+ t7 ` ICR = 0xFFF0;
& O' J% N6 r' v8 F5 M IER |= 0x12;
- s2 ]4 H: Y& S9 L CSR |= 0x01; : J/ x: f' j5 P9 {1 Y
7 R T$ d. I( j' i8 l5 B
! H2 Y$ _5 X* k# K+ A
( ^; X$ }8 h! u2 t6 ]; K还有就是两个输入输出函数:
1 ] K! C" Q1 w' \( ~void output_sample(Int32 out_data)
2 [- k. ~: G5 {: w( t. i. ^4 ^& j{
, C1 ?, D4 }- @& E+ G- Q5 n AIC31_data.uint = out_data; - O! r) F. H+ B5 C
MCASP1_XBUF5_32BIT = AIC31_data.uint;: I) f$ l% h! R! g4 X- _* n# \
}
; }9 |) Q1 ]% `9 R7 }5 L# r" ~$ \; q, [4 h
Int32 input_sample(void)
- H/ G# t4 ?9 p* _& I{ 3 F7 S, }2 t0 ^6 j- J
AIC31_data.uint = MCASP1_RBUF0_32BIT;( G: m% ]- q) P: f/ k3 Q
return (AIC31_data.uint);
: c0 u3 K- `1 s* J$ T( j @}
; n; t. b9 ^, E, e. U( m! n/ t% `6 Z) S1 p
|
|