|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ X3 o- i1 R3 X% I, amain文件:/ f+ h" M' |. ~ _' L6 m. G
interrupt void interrupt4(void)
x9 m3 F/ t9 i, z' l6 _{
! [& Z2 Z) s* f3 S" t# i Uint32 sample;9 D0 O& A9 ?/ l4 {4 W3 d
7 C7 G, Q0 w& G( i
sample = input_sample(); // read L + R samples from ADC
5 ^, ^/ d8 `6 r output_sample(sample); // write L + R samples to DAC + [# ^& v- o- `$ I9 G- c6 g9 `4 c+ g
return;2 `: y3 q5 q# ^9 |/ B
}
1 D. f3 H- g: x2 H
8 F5 W* i" m) u% ?2 C& M+ {3 wint main( void )
: z6 u; |+ e3 U+ A( X! m: Z{
5 z1 W! i8 }& v
) \% @0 S$ U1 \" z# N, c4 E /* Initialize BSL */* F9 R) C& G+ d ^# @
EVMC6747_init( );
: o) W7 _. I$ q# W7 N /* Call evmc6747_intr function */) u, X: |* u& s, m4 ]9 k4 x5 [
aic3106_init( );
& r/ b% C, R# K8 |; Y3 M$ h while(1);) ?7 R' ]; \1 m" Q
}' @- ~+ }" _4 v* ~% d
6 l% R( ~4 z, R, S% K8 D+ i
' ^' j+ y1 K2 M0 haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* X. }5 \, E$ T5 }7 d; H* E/* Initialize MCASP1 */
+ w& m, b# j! d2 x3 @7 \; } mcasp = &MCASP_MODULE_1;( k/ M# D+ O2 E& M0 y% n
mcasp->regs->GBLCTL = 0; // Reset
7 i4 l. C, d) D- q3 d mcasp->regs->RGBLCTL = 0; // Reset RX
6 y2 T1 l; _1 k8 |( J7 B( a) s" Z mcasp->regs->XGBLCTL = 0; // Reset TX
8 P# J& |, S# n! l8 N" _ mcasp->regs->PWRDEMU = 1; // Free-running7 \* z2 d/ i3 L: ?/ m" \
// configure McASP0 receive registers# T9 {+ k( ?8 @2 H2 q! |+ l
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used0 M. ?0 G& b2 E& p% ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" A) U0 k. s0 K- Y0 B( i- a
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ w! o2 f" ^* \- j% ^* E mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 {% j! ?" B# n( Y0 t mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* m' G* ]2 s) T" v' @
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 ~3 y0 |+ ?! I1 N) s mcasp->regs->RINTCTL = 0x00000000; // Not used
2 k" b @% Y: N/ M# z9 | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 |' c q4 N7 c" j1 I* X, P
5 Z* A3 S5 U9 @
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( C1 [* A) [, i mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 Z% s! h5 G" q: g: h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' ~# f' t) y7 d: R mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 x* T" r* T; B8 d3 Z: A y
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' k* w* T) M5 z mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ R2 \% A ~) w h0 z0 o& n& A mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! C8 g% f; {9 w mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 A; ^2 U# _6 Y" o) Y! W9 o) D! K
4 A3 p/ y4 t: v1 o0 s6 W mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ y, T# r5 x3 J' m1 v) [3 o. ^; u
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; m2 E B6 t" O, K& ^4 j! t! c7 J mcasp->regs->PFUNC = 0; // All MCASPs
) ?- \" L2 D+ j* I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 }+ v/ x& H5 s4 ?& m7 x2 o. ^( R2 X- y! V
mcasp->regs->DITCTL = 0x00000000; // Not used. V4 u2 X8 U' P& d
mcasp->regs->DLBCTL = 0x00000000; // Not used* W4 W* X% ?& {* {, _; j
mcasp->regs->AMUTE = 0x00000000; // Not used
8 s V9 m! t2 R4 m$ L- R& A8 b" ?1 s/ m2 z
/* Starting sections of the McASP*/4 {3 \, d: v E1 S# T; [) M
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 `. ~- Q9 e$ ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 Y; y2 F3 Y1 Y- h- e! U J9 w' i/ ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* e6 E$ R& V2 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 I T+ v( o2 G; G6 Q; e/ s/ e8 M! j T F8 P( t% |
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 ?0 |; n% V8 Y& b9 n2 k1 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 |; g4 C5 n1 J
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " h6 j# E: B$ \$ E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 j7 L& ~7 W) y9 z- ^: A. C
( r* V6 i' S& ^ mcasp->regs->XSTAT = 0x0000ffff;
0 |# M9 D1 J* x( s& l mcasp->regs->RSTAT = 0x0000ffff; " J: [/ y' J+ m% _' |
0 j. `. D [! a; R mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ g* H; ?1 x" \4 w& V# b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( N! C& Q5 h& y7 u& a; W mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ O( B, d6 l/ Q- Z1 g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& E7 C% |& y: h: ?0 D, B2 x* h/ H7 z2 I" @! E& T2 {
/* Write a 0, so that no underrun occurs after releasing the state machine */" D- W5 [6 |3 t5 Z0 y$ b( b& `
mcasp->regs->XBUF5 = 0;
+ p$ E- c. k; B+ B$ V1 @ mcasp->regs->RBUF0 = 0;
+ ? [+ t, Z& i4 O2 `9 h0 g
( |: d" E9 a) |7 ^) a# H mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 ] d! ]3 I9 J. U9 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& r2 M& p/ j7 G. A$ }' r
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ u' N5 ~, y2 H* J* E# O1 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" [9 Z7 N6 Q2 _+ U) d4 D" U! A& s
; z- Z5 I! H+ S, { N mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 D; e2 u: h! h' y2 r' o( g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 X4 x* G0 E' W7 z b7 O5 h8 G3 o O mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, Y6 E3 h/ ~) j' O* K3 a6 q( \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. d9 R- r# `" I4 }
$ `) i! x- x, k8 M
CSR = 0x0000; Z' t& a/ I. h6 v# H1 R
INTC_INTMUX1 = 0x3d;# E |5 u! H* V: O5 ~/ ~4 Z
ISTP = (unsigned int)vectors;
0 \) Q1 G4 T$ Z8 C% \4 q# i! u ICR = 0xFFF0;
: Y( P/ e3 A2 s' Y5 t/ c IER |= 0x12;
7 e, Z$ p# O$ F: t CSR |= 0x01; ; T$ V3 f$ C1 }) k
5 D* ^8 |# @1 _$ [- H3 g/ I
4 ]9 X' ^ v$ }+ t; h+ Y) M: J1 ^1 r
还有就是两个输入输出函数:
) l5 n' y, v8 L. S6 I3 U# Tvoid output_sample(Int32 out_data)
8 K6 ^; R5 b5 \ j9 O; j{
0 ^7 C6 S# [6 {8 ] AIC31_data.uint = out_data;
; j+ m; I( o. z8 @ MCASP1_XBUF5_32BIT = AIC31_data.uint;
" P! J3 e; j3 c8 V4 R+ v( M}
/ J6 ]6 |1 @& g4 Y5 t7 H) o+ p$ K
Int32 input_sample(void) d: S5 ]3 s+ Q, u$ a; b
{ " z$ p$ y! ]+ d: D# _4 @
AIC31_data.uint = MCASP1_RBUF0_32BIT;
* s9 L# S- K1 _; a return (AIC31_data.uint);
+ u2 r8 c- k) q' v2 R) O}
8 @) P, p& T( C" U+ V2 m. w! q5 ?; ^( b. {6 i2 e
|
|