|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ J8 N6 }6 S# d, ], G# v* Z
main文件:0 w' R2 o& Q& d2 w/ W# ^% C! U
interrupt void interrupt4(void) / l( W H, X& }, \+ x
{
/ G- _; Q2 X1 t4 L8 s3 B9 _' p Uint32 sample;3 P4 [9 p- i. d# G- \; ]8 t7 \4 d @
& x1 v# Q* s6 X, P, F# [# M5 F sample = input_sample(); // read L + R samples from ADC
7 c2 z* B9 ], @1 k, m$ D, ?0 b output_sample(sample); // write L + R samples to DAC
( G" Q. Z! |' ]% s8 ?! m/ @- ~ return;3 R: L+ E2 }5 k8 F' x
}
+ `6 K" q; ~& i5 K6 O9 i# a1 f& s; h9 ` ?* Z3 c
int main( void )
( @0 J( O( x- n2 D* e" ]{9 S% B1 x8 f9 Q
& U4 G+ {) R* t4 S# \- ~
/* Initialize BSL */& P& h, C3 g$ J
EVMC6747_init( );% v$ c7 C. k; @% o8 X% N
/* Call evmc6747_intr function */
% v6 Q9 d' G8 H6 Z- s7 o aic3106_init( );2 I; ~; B& k5 I* p) ~' U/ R
while(1);
) X& n: i& s3 X}
( q! L9 ^( c! n3 ?
2 r5 B( B& Z7 d& g6 q
; }9 I0 L- C5 _' \" ^1 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ ]( ~5 o. T6 _5 b
/* Initialize MCASP1 */
- P! \9 s; D# S U8 M mcasp = &MCASP_MODULE_1;
9 }8 ]- M- I: E' O3 E6 }: o mcasp->regs->GBLCTL = 0; // Reset
' U3 m( m% S3 s! t5 ~2 ~ mcasp->regs->RGBLCTL = 0; // Reset RX: O. s5 f# u6 a0 z4 A' w$ r4 O
mcasp->regs->XGBLCTL = 0; // Reset TX
" N0 B& @9 L% u mcasp->regs->PWRDEMU = 1; // Free-running
1 A: i( r' _0 ` |6 {- Z6 i // configure McASP0 receive registers
* J2 m; _8 D/ N# c6 T7 g6 Z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: s6 \4 Z: G6 p
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 H/ J! S2 n3 [: d- x& O1 a" o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! N9 q' d! i6 W& ~3 Z% S& \
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 I. V# z9 g4 B3 s' z
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 k% R- q$ ~/ t+ k# ^4 @
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ b. v" U+ x9 u mcasp->regs->RINTCTL = 0x00000000; // Not used
" n4 t) f) Q+ p; H mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 h# F% R. A) u5 T2 @) m! J2 V
" t3 h1 v( T) S9 J mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ j$ x# ?# L3 P! g8 {+ q" X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ \# r6 \" I3 [/ t/ ~( P
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 \: B& J9 w( B. d1 f' r; g mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( V# H5 b4 j0 D/ w9 G0 p mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) H1 i6 w, L: u. [% |+ p) J mcasp->regs->XTDM = 0x00000003; // Slots 0,12 n+ _" t3 o% e# M3 L) D1 o
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" q& [ J6 C' J" G: Z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: m. w9 ~6 X4 L$ u
: i. a/ |! }- B6 T mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 D) u6 b" R0 u
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 L @% s9 c$ M- U mcasp->regs->PFUNC = 0; // All MCASPs9 H7 k/ C0 _5 x# \' d
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) t9 H' v; @5 I5 C, Y( ~# [; G" p2 K+ i' ?1 h+ O4 l' {$ {
mcasp->regs->DITCTL = 0x00000000; // Not used
, P; N0 Q& k, G( ?" I$ f5 N4 R mcasp->regs->DLBCTL = 0x00000000; // Not used4 h) V8 I; ?; {4 f* Q2 W" o) W
mcasp->regs->AMUTE = 0x00000000; // Not used
8 m' D# n% ^' @7 c
3 \$ s" q7 W4 b2 G) N' ]. n/* Starting sections of the McASP*/$ E" ?. c3 s0 Q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 t- J% [6 G+ {2 i' L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 p: d/ Z- q* S J9 w, F' j mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; z0 x% X' {" U* ^; O! G$ e! H8 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 T% U8 L r; B" L& B1 C
- r: F, T# v$ J/ w! T. @- z mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ y: y( H$ C; G2 x H- d# O6 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( n8 z. L' f7 U
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - J" y" c0 N$ o) L2 G. M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 g) |! E( }' ?; c
: d! N+ O( G1 T, j, _ mcasp->regs->XSTAT = 0x0000ffff;
' E) x& `0 _: n, [) M- M3 h mcasp->regs->RSTAT = 0x0000ffff; 3 X9 }$ G) R3 w% ]- |* m
( O; ~0 {; F+ {. M9 W* N/ X
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- C: Y9 l% B& ~( G* |9 f5 \4 q+ ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 S; _0 O. R s# |) s
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , d0 u: ~- Q7 C+ O5 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# o9 q. k8 X5 f& E, C4 T
& M, Q/ J6 `) I1 U8 U5 w /* Write a 0, so that no underrun occurs after releasing the state machine */" @# P: d# ]0 M7 t: V/ B3 B. k
mcasp->regs->XBUF5 = 0;8 k7 ^. C, h# T+ k7 n
mcasp->regs->RBUF0 = 0;
* ]8 g" E; N7 n( l3 ?/ z" ~3 m6 T1 P1 X0 I- @* z, z
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 N5 u/ V0 V# e6 l7 H ~' c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 I J6 A1 y+ A* } mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* a7 g0 r# W/ H3 V' l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& j! Z& v7 B' e6 O" B1 n5 n6 y
! ?6 H2 ^& C1 N/ T. }1 Y mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : N5 G5 p# D* C; y' H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# O U& y3 O) H }1 e+ S1 T: J a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 N5 y: b5 z& }2 B2 ]5 y% G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 P% c$ K/ K, O, W! {; Z0 y$ O% p" y9 s" B5 k) Q. D3 y
CSR = 0x0000;, |% `+ v6 |& p5 W
INTC_INTMUX1 = 0x3d;7 o0 y- x: B- v% v) C
ISTP = (unsigned int)vectors;* r+ w! E/ I7 l' F% w6 Y4 X7 J* e7 C
ICR = 0xFFF0;
3 {. O$ I) _% H IER |= 0x12;
6 |/ j o: A6 q/ @3 t CSR |= 0x01; - M. a/ }# z; o5 _+ o
* Z2 _4 U1 |4 ]2 q% ?% C
1 t" Y; p; z, \5 S, z& j8 x' q! O+ V" A5 ^7 B7 R& L
还有就是两个输入输出函数:
& a: |" C+ G5 o3 b: |/ ]void output_sample(Int32 out_data)
1 F6 P/ d2 O! M$ m0 l{+ }' h# ? N6 [# ~* z
AIC31_data.uint = out_data;
6 |9 A/ E3 B& ]* A5 x MCASP1_XBUF5_32BIT = AIC31_data.uint;
, R5 A' ]$ m& y0 @}
8 B; H; \, q5 w2 k" N: G, M5 `& c4 [; h, f7 D1 e
Int32 input_sample(void)1 C" L- N; U0 c% c. Z: H7 `( {2 m. w
{ 6 p7 a8 a9 [7 g* }$ i3 T
AIC31_data.uint = MCASP1_RBUF0_32BIT;/ K9 r% E% }$ M3 k% h. V6 P9 C
return (AIC31_data.uint);" H `* x2 P4 F }0 z
}' A6 [: W" d9 [' M/ u
- ]5 n0 e) g; X1 s& A5 _. Y: q0 C |
|