|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- O, R/ ]. j* i2 p: _/ ?main文件: s A/ u& M z' `' v$ D: G) i
interrupt void interrupt4(void) " W& l$ C. F! ]3 Z5 ^/ ~/ v3 X
{
, n4 V8 ~9 g" P8 d, x+ { Uint32 sample;& C0 D/ M- i& i! r6 @* }9 Q+ R
{* c7 h# \5 r: Q2 e( M" C( v, N sample = input_sample(); // read L + R samples from ADC
9 y3 `+ Q; M. z' u output_sample(sample); // write L + R samples to DAC
! X4 V2 m7 B0 z; E+ u( z0 T return;) t& M, i# e) E* U
}% \3 u! c' m! d) Z4 l
' P4 b+ g" o# X3 [9 }) w; F7 A
int main( void )8 M! S! K1 W2 o1 a( s! |, {
{
4 K5 t3 Z, L& W; {* [: h6 v5 w+ d
, X3 z4 s% n6 [" c0 ]* i2 F& r /* Initialize BSL */
- g9 I) {1 |1 o9 G& y7 ^ EVMC6747_init( );, n, D& e. W2 E# p: {! f
/* Call evmc6747_intr function */
0 Q& D: L& k4 j, H8 R- w aic3106_init( );
3 k& x7 J- ]# y/ g! v0 g# d/ M while(1);
9 c; W( G4 Y) X}
5 @; P* O1 P7 C- i1 v- X$ c) [: G; }
/ i1 j8 B. ^. I, s& I1 U
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% @0 C# i$ @+ Y! d2 X! r p! S( b/* Initialize MCASP1 */
1 v) m: W! o1 @; b mcasp = &MCASP_MODULE_1;
. w( \- d i9 h$ t( g mcasp->regs->GBLCTL = 0; // Reset
! @+ \3 r, A7 v# ?5 g# R2 t: T9 K4 i mcasp->regs->RGBLCTL = 0; // Reset RX
( E! z$ i. {5 H/ j, H2 E A( B mcasp->regs->XGBLCTL = 0; // Reset TX
% a8 \) Y; w I/ l6 W/ Y0 H mcasp->regs->PWRDEMU = 1; // Free-running V' Y) l8 Z" p: s
// configure McASP0 receive registers# i6 g- n+ ]! u& d- H
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; P4 a7 _7 _7 a6 u; k3 U+ \ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
h: |& j7 K, _2 J mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 P3 [" e, @8 ~, n
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( F7 @9 j! N& J$ Z& ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' A! K' y, w, ~+ D1 `7 ?
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 i/ U+ c1 E' l {2 e1 U* s mcasp->regs->RINTCTL = 0x00000000; // Not used
( l/ V7 y9 A6 }( I7 O, b5 m" { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. r+ F3 p5 R! `: d! J/ x* v
5 F2 r7 Y# Y q& }9 A5 t2 i5 [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( ?- F" T( }/ A1 M( S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' @# R, X" w, u/ e) E* e mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
~- p; P7 E- E mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: O3 G6 x3 d. a' K3 v, F: b. g mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% [, U9 h8 t N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ J4 o4 p7 b$ o, i mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: d# J) Z& H+ b, P+ H8 r- b mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* W5 ^7 M, q, t: R/ p, Q
) x, l6 ?7 N" D mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 O3 j- F$ ?8 B# y2 R" d mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT! J0 L$ K, I( k( m# Q
mcasp->regs->PFUNC = 0; // All MCASPs& t" \9 G( y7 E% S
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% z! z" d |, [" R0 K
# Q0 k$ K4 o8 B9 Z6 g- y mcasp->regs->DITCTL = 0x00000000; // Not used
" F) Q$ f0 v2 O/ Z8 y! C% l, ~/ a mcasp->regs->DLBCTL = 0x00000000; // Not used
5 x1 W2 D E) ]2 ?' D mcasp->regs->AMUTE = 0x00000000; // Not used
( j0 v' G! c; L2 H! Q( ?1 x4 O! W2 Z+ D O; g3 l
/* Starting sections of the McASP*/9 g B1 Y! f' r
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( j/ D( o+ o; n6 Q; g/ ~1 z1 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : u/ [3 Y3 ^7 z! c/ |; M0 c
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 y5 i! w1 e! |% y1 w9 o/ {) N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 S) D: \5 v) L% }$ U/ b, t. M
+ x! d! @, H2 L0 o% v1 z# Y2 v mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! L. g8 L; t; z7 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 A @9 Q/ b0 ?
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. w1 c, k+ b, N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 ^# I( S! y5 L4 F e3 f$ Y) v
+ U9 }# |, {+ W: \2 G+ [$ L) z mcasp->regs->XSTAT = 0x0000ffff;
: P& {; | i, a( |: u mcasp->regs->RSTAT = 0x0000ffff;
: t0 |( P0 N+ ?5 {- Q
# p# G5 e7 v. g; t mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 N' `1 [3 i' |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 Q; E' d- B/ x8 P) K. ~; p$ |
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% r" B) m; ?9 L3 L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 o( G6 W& @$ j L8 Y8 c
/ x M2 S- F7 a; [" @( C8 u6 C* x4 { /* Write a 0, so that no underrun occurs after releasing the state machine */
, R1 b( f. [: o7 e mcasp->regs->XBUF5 = 0;9 {+ ^3 |! s( _, a2 U6 \
mcasp->regs->RBUF0 = 0;
" ~9 |; t; Q! b: H, Z$ M) O0 j, ?& A6 D. j _& b" b/ S0 z
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - B- b$ X/ e3 h( \) k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& v: {) ? F: W$ V8 }! A mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / e1 `) A: O) h: I: ~: J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- p# Z6 ]0 [# @0 y: X: g2 H
- p9 k0 H+ L8 J8 P& o, w* s+ a2 u mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 {( ]6 j7 G U% j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 l" P+ [2 E0 a; s" n; m8 o
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ ~/ x/ W" V, S7 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ D6 y8 K% [+ i" F
, O1 g: l9 |7 k& E, @& U: d
CSR = 0x0000;! C+ ^. r2 `7 c& t! Q: _6 S
INTC_INTMUX1 = 0x3d;4 _- O; A& w8 D- p# [& P3 z+ S0 }5 w
ISTP = (unsigned int)vectors;
+ i, z. e7 a' J( R6 H: K0 _ ICR = 0xFFF0;
1 u8 Q2 [( k. u1 E1 `% b IER |= 0x12; 7 D; D l& }9 X% r3 h( S
CSR |= 0x01;
4 q' u. \8 `+ I8 |/ T( W7 r( h* Z4 t
% ~2 ~/ `- \4 A5 n4 f4 V# \- s. e
/ v6 b; W) p( n, `+ }* M2 L; a" Q还有就是两个输入输出函数:
/ G, d4 N/ A5 w# ovoid output_sample(Int32 out_data)
) B( Z% Z2 p( Z& [; G S{1 C8 C5 y/ s. Z7 G
AIC31_data.uint = out_data;
4 i% L$ S- @, a- d: u MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 _, h& X0 {; r/ F9 v; B- }. n}
% s* E; `# \0 k( t0 j3 o/ k c* n) X* z; }* B4 b1 K
Int32 input_sample(void)
; k. t7 r$ D- J{ * c+ p) I) z! X9 e$ F: f" \
AIC31_data.uint = MCASP1_RBUF0_32BIT;
% d% P" {9 q1 j9 l8 I4 w return (AIC31_data.uint);( V& a, t. l' L% u& t9 j0 }5 @
}
& M- n6 ]6 T( l3 }7 D
) V) y, X4 D, G5 ~ |
|