|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 _' b9 ~+ W4 R% F( }* o
main文件:
b; W( G0 R) |2 i C- n+ m1 Ninterrupt void interrupt4(void)
8 R$ g$ G" c! x3 d{" W0 b% P# E; v
Uint32 sample;" A& ~3 @4 K# u6 p( B
+ y* h( c4 d% X( [ sample = input_sample(); // read L + R samples from ADC
* `3 ~- s6 `8 R6 N6 W6 p7 F output_sample(sample); // write L + R samples to DAC
1 j2 s) ~8 r+ s7 h return;% J) S2 f7 ?- o' r! N G3 r8 Z5 W
}! {* j. V( R& b
% i$ H: b, Y! ]' O2 a6 Z7 k/ N$ Iint main( void )
1 h0 t1 y( i% s' s9 i% N# f0 h& T{
7 f7 U$ |$ F, M, T, c0 w4 ], Y: V' r
/* Initialize BSL */0 H' B2 ^8 V3 W- I. y! E; P
EVMC6747_init( );$ i+ D3 X {) R
/* Call evmc6747_intr function */
1 ^% f9 \0 n; L2 o$ [5 E aic3106_init( );" [) i k! z7 e) H
while(1);
" F1 J5 j5 B* e& I" d}9 t6 F- e6 Q# X3 R- c& g& h
; ~- C+ X' W& A$ T- Z- e' H' {
: V; t- F! F7 u3 L( K7 I9 waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" S2 ^# W& i! J$ a. g9 N4 o* [/* Initialize MCASP1 */' X/ n" U, G! [
mcasp = &MCASP_MODULE_1;
; y# v* q* X) X1 \ mcasp->regs->GBLCTL = 0; // Reset
U; J& \% O7 S4 F# y mcasp->regs->RGBLCTL = 0; // Reset RX7 n- A! `: i+ y V. K
mcasp->regs->XGBLCTL = 0; // Reset TX. V0 h9 l4 E, g5 T1 U' e
mcasp->regs->PWRDEMU = 1; // Free-running. \, n+ X' f9 J" C5 K- ^/ w( L6 o t$ [
// configure McASP0 receive registers6 R) h/ y: V0 {
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" ~4 f& M6 G; p# a4 d2 E! k2 i
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ C0 k: w: K, ]) e mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* w# c# Q5 @0 f u7 J h# N mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) F" Q0 l5 m h2 q. e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% z5 \" \! }- r. K( ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
" c; l4 }* T% F mcasp->regs->RINTCTL = 0x00000000; // Not used
, b K; e5 c! R/ M mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) c# ]- i* Q5 J* }; X( h
1 f# M I0 u% }3 C1 i mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ k$ ?: {+ q: r* F0 X# Y+ n7 K
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
i( R( k9 D. h- s5 s5 z% Y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! u" s1 ]' N7 {" e mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( E6 F$ y) b# z& E7 ]3 j" d mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 W0 C% s9 {! O; I) d mcasp->regs->XTDM = 0x00000003; // Slots 0,15 g# M4 [8 Q! G' L' r+ T5 ~
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit3 E) e4 L' {4 C: t
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" u0 E9 Q9 L4 a1 ^0 \$ @5 q; f( N7 ?
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( O, k: K* n& z1 H" M: X# @1 n p2 }
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' l5 l- T5 ]: |2 L& v/ h6 G
mcasp->regs->PFUNC = 0; // All MCASPs) R: ?5 }( {' t0 ]
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 C* n, t3 F+ i& x# D! Q7 t8 ~) o
2 \( ^ m4 p8 v4 y5 P mcasp->regs->DITCTL = 0x00000000; // Not used
+ Z& j% g+ B/ z* ] mcasp->regs->DLBCTL = 0x00000000; // Not used3 A/ E. C7 C/ g; r t9 ]' U
mcasp->regs->AMUTE = 0x00000000; // Not used
! K& m) b. k+ p# }4 l* l. y+ ^. P# N0 X' |$ u. J4 Q* K5 S
/* Starting sections of the McASP*/ W9 b6 i# P1 w* S8 R; A
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; O/ E( p& `) E/ P& `( e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 _5 g3 J' B% P) q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : _- ]1 R% ~% Z. C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& |( s) |* ?! v' T8 N; X
/ E( y) J" c( L mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / a2 U3 O8 j- K% t% ]/ V p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 m& u$ t. Z2 a5 J/ R/ f mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 `3 v. Q' A9 o" P) M4 D. ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 c2 Y+ ^) g! Y6 h! v
! Z' [& _1 N3 `; _( k mcasp->regs->XSTAT = 0x0000ffff;
( H; X3 Z- L0 x mcasp->regs->RSTAT = 0x0000ffff;
# o p2 D# u% K( t( I! l, ^6 X$ ^" C5 y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( d+ p! Y( O S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% H( q* w2 d3 I* r
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, c) H9 ?" Y5 O$ s( L+ u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# V- Y6 P* Y: N4 ]
% W$ \$ @0 |2 _; F8 a3 C S F
/* Write a 0, so that no underrun occurs after releasing the state machine */
0 a2 S& @- f! j l1 Q( h mcasp->regs->XBUF5 = 0;4 y5 ^2 A- @# i8 n6 M0 m
mcasp->regs->RBUF0 = 0;; ^1 X* }4 @0 T
/ C- K3 u0 i+ a3 s5 X( t% Q; B
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 Z ]( L& X/ v- [+ U) \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 R/ x4 P6 G" T3 i$ }& H! L
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 n& N# P6 t [, b3 w6 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" L4 O3 W+ U9 s' Q( n* o
T, N4 C4 L ` mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' {, M5 S5 C/ Q- h2 c' G. u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( t# T2 p9 j$ e7 s# i; B mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! G' b7 l. N( v8 ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 }# P9 R2 ]* f2 @
: J" E6 O& s# b" e CSR = 0x0000;
8 ^* [7 }. f, I0 H! w INTC_INTMUX1 = 0x3d;
& Z( f) W% m) o# t3 { ISTP = (unsigned int)vectors;2 j' I' `/ p3 ?# a2 u
ICR = 0xFFF0; & G% [1 K5 `( S
IER |= 0x12;
% \' J1 E& U0 ^. J: y+ a3 y3 w CSR |= 0x01;
- P: U( W& A- c4 H5 }# r
; [0 F3 n) \1 i- w$ [* }1 E, ` X/ u9 h9 U
7 D+ G% p+ K- H- V3 k还有就是两个输入输出函数:
* G2 t# t! @% Jvoid output_sample(Int32 out_data)
9 J8 ]6 k$ t- n" P8 A1 [! d. ^* E{# @ C! O( _2 c8 c1 d/ T: \4 L4 S# y
AIC31_data.uint = out_data; * f' C: Y5 d* M3 _ C0 l5 a
MCASP1_XBUF5_32BIT = AIC31_data.uint;) g- L3 x0 b0 N7 G
}
, p- H8 ?/ ?/ `4 [( t: F3 Q4 i5 G$ I* G; ]( U+ |- R: R
Int32 input_sample(void)6 z0 {9 C- b! \' p
{
0 A+ w2 [0 n8 \3 D AIC31_data.uint = MCASP1_RBUF0_32BIT;9 u6 w Z9 {, k
return (AIC31_data.uint);$ J; Y6 Y2 |( `) h3 S: v
}4 Y4 L3 T) |9 S
- b4 g! J/ g- c6 i5 @ |
|