|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 B+ B7 K4 j' H+ ~main文件:3 Y0 D, W* s: V, r! j4 s( o |
interrupt void interrupt4(void) 7 E! w K3 F( X" Q E- C [! u
{
4 p6 d! _- E6 o3 C E# j: K5 S Uint32 sample;
- x0 D. a) L2 V/ g1 n. u' O0 I1 i
; Q- W7 D( m) } sample = input_sample(); // read L + R samples from ADC
! q: Q5 R; ]! b4 m8 \% c" T output_sample(sample); // write L + R samples to DAC 1 J! ] e) [" c0 N9 e7 Q
return;
6 a9 E% B& r. g; Y: M* f}( _( A9 N: v5 Y* h' I! e6 J
+ m' v$ T: Z0 M5 W/ I% v9 R ]int main( void )6 @5 W, l9 _" R8 T
{: p* ^" |- Y- K7 q5 v) B
7 O/ K/ ?& F; Q% x
/* Initialize BSL */! I# b$ F8 _$ p& j) Y# y) t
EVMC6747_init( );
/ A# x: f8 Z% o9 W /* Call evmc6747_intr function */5 o+ G( f- p- v2 |7 l$ t
aic3106_init( );2 s3 U( f9 b; g* G5 a# O
while(1);) `2 |$ j6 l6 O6 [! G* u; }
}
2 a* n) e- e" J, _3 J7 y+ D6 u; L; i( V E# g9 K7 h* |
: c) D, ]; B$ k2 y3 J3 W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 s2 a' _9 ~' ~2 `$ a: Y, Q
/* Initialize MCASP1 */0 O5 O! W' z+ m7 v5 K
mcasp = &MCASP_MODULE_1;# _& R: |7 }6 k$ V- J3 D X3 l. J
mcasp->regs->GBLCTL = 0; // Reset
" G3 j+ j$ v" C: Z) [! U% Z) G mcasp->regs->RGBLCTL = 0; // Reset RX2 @. X9 W9 O: T& M
mcasp->regs->XGBLCTL = 0; // Reset TX" A' `6 ~( ` ^# ?: W* P
mcasp->regs->PWRDEMU = 1; // Free-running' i7 R6 N8 @1 m: Z/ w- T
// configure McASP0 receive registers
% a$ A2 s* V2 T4 _# [! p2 K$ I mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 f$ x; b' ~1 Q/ s) [; d9 o5 T
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# Z: b l2 R! v+ p
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) D2 C0 H/ c% k. M/ Y1 o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 G0 Z% S) C. U N2 s( M0 u# g mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
. S, {* {0 ~% u* I t2 g mcasp->regs->RTDM = 0x00000003; // Slots 0,1 m+ H1 ]4 y( L! D1 a) l6 ]
mcasp->regs->RINTCTL = 0x00000000; // Not used' M# i6 b. P* }( L1 ^
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ N. L' {1 }9 _$ D/ Z3 g* b7 i
: V, y' t$ {; x1 y$ z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 Z- p6 x" Q, v! t
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, z' N# x [$ X3 d- C
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! [- M" F/ E! J mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" s8 e U$ S6 Y; P5 N
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 t. ^; B6 Q- m/ {! e1 h: y( I( I
mcasp->regs->XTDM = 0x00000003; // Slots 0,12 `( {. f2 g) R, E7 \8 R
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: W4 m- K8 Z7 F. B3 @4 {# Y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* H2 r s2 h0 @) o0 G* X
( A1 l/ b \+ U1 _. E8 y. Z* V, G mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ P) \ z5 _6 ?
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 c% v* F6 u6 M' a. `8 |
mcasp->regs->PFUNC = 0; // All MCASPs8 s- d3 m! N/ A1 a' s; _0 S) Q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' x2 |) r* h; |# z
% Z: V2 H/ T; I' q* f mcasp->regs->DITCTL = 0x00000000; // Not used
4 q9 w0 N" S) l8 i2 D mcasp->regs->DLBCTL = 0x00000000; // Not used
( ~# Q2 i5 F2 N1 |& r mcasp->regs->AMUTE = 0x00000000; // Not used
# v, K& ]% K9 h7 ?) `+ W0 ?# P) D# T q( _- ^; l9 Z* U A
/* Starting sections of the McASP*/
0 I; O/ D0 g, R% T+ |5 G; w mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; f- A6 K! t( H/ E4 k# P9 D2 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 Z; s v& G! f; V8 L; ]( L
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 I8 r( z0 B9 b* z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. T. ?$ }9 T, }: q) J- A3 @( u
" W3 Z t/ h) D( E0 J& `
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & |$ ?7 x# J8 u2 J; h' \2 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* B0 b i2 i: B9 \5 L
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ k! M7 X3 M5 P+ m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: x* \+ U* u8 {3 r# Q' i& F# W% u2 Z% W1 Z/ c# h- J* ~1 \
mcasp->regs->XSTAT = 0x0000ffff; : q1 C8 T" V9 x# v
mcasp->regs->RSTAT = 0x0000ffff;
& T1 T5 p3 l: V- D5 {8 h# {2 Q
+ ^5 k& D* m! b, s: t mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 d4 G; f& p5 t" }: e+ Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 s& c, x' H& W# \% D
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 U6 |7 D- l1 l6 _: M# Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 U6 Y6 V4 P' [
/ {8 W2 H4 E7 W
/* Write a 0, so that no underrun occurs after releasing the state machine */. V5 R0 h& e2 K; d/ R. ~0 \
mcasp->regs->XBUF5 = 0;
; k- L! L6 F+ q+ D5 E y8 g) U9 z mcasp->regs->RBUF0 = 0;
" ]! u! u0 m! ]' p! _
- H% z `; b; B mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: |, i' r& |5 Q+ k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" b3 r6 y* P9 @8 A' A% j! a
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 X# |5 C r+ H3 p8 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ U3 P$ W' \, e! _' n% G
. \; q5 ?, {) s g2 J; s mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; q7 l w. z* m& \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, `+ i2 J; H: {; k1 @* ?1 H2 u& E mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 o! D9 G: J2 N4 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* F: u' n6 h$ g) H0 l
# T/ F Y! s' J CSR = 0x0000;
6 ^$ n6 T$ G v* T$ t& p: w. V INTC_INTMUX1 = 0x3d;* p, u! ~! Q W/ N( h0 O- Z
ISTP = (unsigned int)vectors;
+ t% n! ~3 A }( E ICR = 0xFFF0; ' L/ s H; |+ t6 G k" X6 \
IER |= 0x12; 9 G& c3 \/ f5 T& Q& Y4 ]0 [; @
CSR |= 0x01;
% T' r$ ]! [3 p+ j# h1 L0 x9 U1 ]4 I( A2 Z( i7 A N
/ l! S; I: Y8 Z4 z: p
1 A3 G/ i" H' i/ ^4 K0 S; F: d
还有就是两个输入输出函数:
- p6 B( k0 s' Svoid output_sample(Int32 out_data)5 \) v% f! o( W! v& A O2 o1 F
{
" }$ E" [8 |6 P8 l6 M AIC31_data.uint = out_data;
; M" y6 I% C4 w5 u `0 M' j; e1 h MCASP1_XBUF5_32BIT = AIC31_data.uint;
* \3 P, f" w& G1 L( u}
6 r c1 ^ |. i: D. Z
- x5 E4 h- d# y: q0 c# c; [Int32 input_sample(void)3 n' @* p! r1 x8 \; D0 S
{
$ T0 Z0 a8 {/ c% E" q% o$ p AIC31_data.uint = MCASP1_RBUF0_32BIT;- |1 z. q( \9 q$ I
return (AIC31_data.uint);
! V* i' t( \( D' u; {6 x% B: h# `}
, O& a: H: p1 R5 Q* ?0 K! A6 O2 s# c+ V4 u
|
|