|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 c0 U2 ~" t. ?' J8 g
main文件:& r4 N5 H9 n1 L
interrupt void interrupt4(void) 4 c# L: D3 p" U8 m; K+ O
{
' ^( r) V' N; s5 |! C5 `1 A Uint32 sample;$ m8 ~4 S' K% v. W9 N5 h- ^
" x8 x" f4 u" i& z+ x* G
sample = input_sample(); // read L + R samples from ADC7 V) {$ e" s. g' D+ j2 y1 E
output_sample(sample); // write L + R samples to DAC
0 g: }( |0 u. u. Y. m5 h return;
9 j* x4 F! b* V/ w: ]! o- S}
' y0 w; H# _) F* @( o2 w( w% Z& @1 m
' l" Y7 D0 [; @3 s* n O7 Bint main( void )/ K% s7 c! p4 P( _
{5 H. a0 u; E8 K
' b) K/ e9 @7 U" ~# V /* Initialize BSL */
# ?9 N# O8 o1 y: C EVMC6747_init( );
% H: r! w" o0 a, b) M: @ /* Call evmc6747_intr function */
. Q& \4 j4 G: A$ ?0 \/ C$ b+ }3 O' y' U aic3106_init( );
+ F3 g" i& w9 U& } while(1);
: e0 q0 z8 \2 s}
* X2 m" L* c3 v; I+ |1 T3 X4 }; ]2 g: a
5 I' a0 W# _8 n z# ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, l( ~* c0 q1 P' s, ^, |/* Initialize MCASP1 */
8 h: ?' f: V5 s% ?1 |% W: A5 q mcasp = &MCASP_MODULE_1;2 {% z7 G5 {/ c, {
mcasp->regs->GBLCTL = 0; // Reset
- a1 o" Y, T- ?" Z- b; F mcasp->regs->RGBLCTL = 0; // Reset RX" b1 ^ @. U6 N- N1 y5 v5 j2 Y
mcasp->regs->XGBLCTL = 0; // Reset TX* z% ]# ~, z# G5 d" ]" |; d) u
mcasp->regs->PWRDEMU = 1; // Free-running' o+ O+ M9 k" r" w( z9 @( u7 p
// configure McASP0 receive registers
5 t3 T4 R/ p$ ]" m# a mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ E1 a% w1 l# U6 o/ E6 Z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 v: p! c+ n" ~, b' M5 _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 I8 G9 w: e6 X3 X8 F# h9 P mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( T d1 {5 Q0 Q! S; _, s# q
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& O( n$ f5 ?& v) D( F
mcasp->regs->RTDM = 0x00000003; // Slots 0,15 E5 z+ V8 a- h L& l( I+ D' O
mcasp->regs->RINTCTL = 0x00000000; // Not used6 R B( |' l/ g" j
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 W* E, D) M1 h9 I8 m! A, i5 e2 k! u$ x
) K$ A+ _6 ?$ e mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
3 m( _) d s3 S/ R0 ^) S3 g S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& d& U) j, ^2 B- s5 O mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ e% B" a2 N, v+ ]& m( e$ Q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 \9 w) E E& s8 M# w( M) e( l* Y
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" H6 ?4 T2 q! E
mcasp->regs->XTDM = 0x00000003; // Slots 0,11 T! C, `' y# ^# |4 W3 o/ Z- Q
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ Z% O- _, Q# Z& N" b* S, J
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 P( `* r$ P6 r4 O0 C+ ` d2 M9 @
4 T1 @8 Y8 v1 f# `$ u mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN3 v; _& Q& M' n% F- r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- }" D3 E/ H2 q1 j( E: P! Y, H
mcasp->regs->PFUNC = 0; // All MCASPs2 s' J. F0 F ]) l* x$ a( A
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- g/ _0 {, s% _6 T9 m
, L6 _) k4 ^5 [% _* `. b
mcasp->regs->DITCTL = 0x00000000; // Not used. u2 ~/ i/ }0 V& o l; Z
mcasp->regs->DLBCTL = 0x00000000; // Not used
% O+ N, V W1 G g; R+ C mcasp->regs->AMUTE = 0x00000000; // Not used
$ ^) A+ ~/ [5 _: w
8 j, a, c, a' g+ Q: Z+ v4 y/* Starting sections of the McASP*/
/ D* e( J! [# G1 T( b4 f mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 g8 B0 n( P7 S9 {3 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ) ]7 a" b- u0 }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , c n2 h; C$ X ^3 i3 m' L/ k* N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; c. ^5 c) M- d0 G
' @6 U3 b5 ^/ Q( V% t4 X# V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: _/ ~! N) k* p: f- ?% _3 L5 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" r% n: k P( n4 \) W J
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; `: n& }. U4 `* ^2 t; [, g6 E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 D2 {* H3 ~" s% ? d) D/ T* A9 h4 t3 h$ y+ N
mcasp->regs->XSTAT = 0x0000ffff; % x+ E. Z; a+ L! @3 g; c
mcasp->regs->RSTAT = 0x0000ffff;
- x$ \8 G6 f3 y! K+ P6 a. C
% b2 h- V: Y0 Y+ d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 C5 y7 |% |; D. Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' a; a3 M0 s7 [. U% t mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* _" R# d# M+ ~8 F U5 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 j$ Q) ?" l# _. j/ u/ j \/ E
) d4 N4 ]* i" q$ W /* Write a 0, so that no underrun occurs after releasing the state machine */1 X$ v& }: ^1 }6 K5 T
mcasp->regs->XBUF5 = 0;: G! B1 j6 E; }+ M! E
mcasp->regs->RBUF0 = 0;
% u" I' K3 D! r. |$ p8 x3 J/ n* Z" P& `* c# {
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 G. }5 e- C1 I/ B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 o' M8 F% e$ j0 q+ {. z5 j# s mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 M) `1 x" a* a* ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. e n6 x( Q6 m! c# U
/ l, Y* c! ?+ A, t) H
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ t" Q0 k' D! Q& g$ {6 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' }" ~# u" N; ?% ?- O. i* K) t
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " o* O5 v- Z- R1 u* }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. e. C7 G9 G: s* l4 C' r. `
- J4 y* x' h9 n& D$ c8 o CSR = 0x0000;
: j+ O8 F3 O# H3 y( y INTC_INTMUX1 = 0x3d;
& {8 w' |& f1 ~8 { ISTP = (unsigned int)vectors;
; e& P. V h0 y, p+ k) \ ICR = 0xFFF0; 2 ?( T$ s5 R" P
IER |= 0x12;
) g0 k8 F. @& o/ C CSR |= 0x01; 7 y2 u( y1 U7 W, Q0 ~
3 o7 V |) ~2 [5 Y5 ?; Y
) N v3 R0 L# @/ l; d$ L# H) u* C1 c) W |. N2 Z7 Y; y
还有就是两个输入输出函数:
4 u8 h( ?# t$ R: d* k/ [void output_sample(Int32 out_data)
& a7 n" }; U; K{' x: f; \- f* J! V6 u( _
AIC31_data.uint = out_data;
. y9 A6 U6 }$ Y4 r" w MCASP1_XBUF5_32BIT = AIC31_data.uint;5 i. T. C" Q7 V" `7 T3 f: r r Y( ?
}5 w- ~8 v4 _2 E9 m8 ]+ q
9 J: T' Y1 D* a. R: a* s [
Int32 input_sample(void)
$ r- j5 e5 X$ e- J& P{
3 c5 {2 Y2 a1 R" J" Y6 g6 {9 L4 g2 N AIC31_data.uint = MCASP1_RBUF0_32BIT;
: y1 H2 v% R2 P L# o return (AIC31_data.uint);
+ B9 y, B( R7 @ |, v}$ T6 R# s S9 P9 ?
- J0 d. b8 b, p" N/ n% m. \, } |
|