|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) d) @2 y* Z$ H' R9 r8 h' ]
main文件:1 k6 h* ~6 u/ m% q
interrupt void interrupt4(void)
& X, v; j) P1 _% S# ]. l{8 l" o2 |0 |) D9 k* m% J8 D4 s
Uint32 sample;
2 A1 t) @- [* n3 R# u' v4 j2 c8 B* n3 E' Z7 k1 H: x5 x" l
sample = input_sample(); // read L + R samples from ADC+ g. u# b1 A/ } u, n9 g- j
output_sample(sample); // write L + R samples to DAC
4 R, v' w' I% D) k return;
3 @0 q% T# r0 X+ G}
9 U4 h! i% G" E/ I0 I9 R
$ E' F! n! v) \( F; n0 jint main( void )
$ C' E: R0 a& u( E& E$ I; g{, l( F$ Q) ~4 m. t- ^
3 ~3 F5 G! j/ {" T4 y0 k! x9 ^
/* Initialize BSL */5 Q2 j! ]8 L* s9 @' {* x
EVMC6747_init( );0 Y! }* q: C6 k# i( i& _3 F$ o+ k# @
/* Call evmc6747_intr function */! x. f1 s8 i" I; w
aic3106_init( );
2 y9 I7 Q. O" f2 y2 ^6 y while(1);9 U5 q& f6 U, G3 n1 Y5 W8 c
}& S, U1 H: ]' X9 Z9 Z
! _+ o X; f' I) S8 r( o
+ s) ?2 K3 k+ Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. L4 J4 Q0 @% j0 v. v2 A/ e/* Initialize MCASP1 */' Y" ~ l- |# c4 H" Y
mcasp = &MCASP_MODULE_1;5 N0 e7 @$ R) `+ K
mcasp->regs->GBLCTL = 0; // Reset
X: B6 ?. c% ?; F: y, r4 J mcasp->regs->RGBLCTL = 0; // Reset RX
4 U Q9 s: }6 @1 p- {/ B mcasp->regs->XGBLCTL = 0; // Reset TX
8 B ~& \) r2 y, c, j& H mcasp->regs->PWRDEMU = 1; // Free-running
! }+ ]7 L) G8 P, y9 w% f // configure McASP0 receive registers
$ V' O/ ~& g, a/ h; m* X; l mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used+ _# }6 `4 V6 Y4 R1 |* F7 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; @" d' |" ?% u! A
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 ?" b9 o' {8 P$ h6 c G7 }' D* P" J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 R, O, t4 \4 Y w; v) z, u
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( C6 M8 l7 @' P6 }
mcasp->regs->RTDM = 0x00000003; // Slots 0,17 S( c& P0 N* x6 x+ {
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 L: j8 B' Z- K3 C! m mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& H# c+ y3 X/ Q; \, X) c- L3 W: [- O0 Q) [7 ^: J
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
8 O7 M$ O$ {* G* G$ l/ |4 Q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 |1 F- ?, S! m9 P$ L% Q; t: {" O, S mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 b7 Z- Q$ j' b& i6 @ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( Y1 W; w; ]- z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& J0 S4 H3 h3 u1 Q mcasp->regs->XTDM = 0x00000003; // Slots 0,1* R, C( R' Z, ~$ V4 o
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 z& X1 f- M; P2 y- G3 n mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 D4 h1 u) h) o9 ?+ L9 F! z; ~) i: ]& L; P4 Q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ }7 w# L" G0 x( T' A' X9 G J
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- O1 [2 @# S" G/ {
mcasp->regs->PFUNC = 0; // All MCASPs& w/ c) F- I& U+ r' `
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
a% K9 f7 U! V. C+ t* A
; A! t4 Z7 |; V" f mcasp->regs->DITCTL = 0x00000000; // Not used
( i& h0 C: f( S6 E mcasp->regs->DLBCTL = 0x00000000; // Not used
. l& S( y5 t3 G5 I ` mcasp->regs->AMUTE = 0x00000000; // Not used
/ Z4 G0 k& r# e% R& K
) m1 P; K" D( o4 q0 A; F/* Starting sections of the McASP*/
4 y. t1 C! X4 K) B mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 e3 P7 H4 J5 n$ L" d& V) H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
* z0 R' `" y9 g' ` mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 Z( v! C1 c# C: D7 u! p! ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- O( @/ T7 F# R9 w
' S5 P* `1 m; H* x2 u' J mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 w# a4 H' X/ y" {! m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' o: v" I+ Q, W; b/ u/ Y$ o mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 W. `4 Y' U0 q' J. h, w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, ?5 C- [; M# y: Z1 x8 W$ |& j$ x
: O0 }' B! l- `8 @, @1 K7 M mcasp->regs->XSTAT = 0x0000ffff;
& x* [0 q) m9 [+ b, k9 z mcasp->regs->RSTAT = 0x0000ffff;
. u }% K8 r! e1 R- Z& [0 m/ [# v" M( L5 ~+ E& }0 G' {: z* r3 v
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: j% L2 j4 s, }: M0 j4 e6 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 [% t% P! `& h mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 V) I- l+ E% ]/ h2 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 {! O: j" H' K& ]/ u1 Q% Q) L3 I; U* {9 y, U4 Z7 z
/* Write a 0, so that no underrun occurs after releasing the state machine */) Q6 i7 [; V4 L @& G& {8 Z
mcasp->regs->XBUF5 = 0;
9 p8 _9 D8 S& w1 z mcasp->regs->RBUF0 = 0;. K. u) {+ X4 e& @
9 K7 l0 S+ ]* e mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 }6 ~" ]" e G5 s4 J4 j# V# {" P6 W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 B: \9 ~7 D5 f9 z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " _' C% l8 U! U* T# @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' [' M4 ^( n' W& }5 b9 E" i: G g! R
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! D6 M7 f" O7 w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 R( T& i; K7 ]! b mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 n; e% t" c) n" M0 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% V! ]2 B/ V, u# Q# z$ ^* z6 w
+ P; j s0 g) z1 O
CSR = 0x0000;4 Q6 j5 ~! g6 @! M+ d t, H
INTC_INTMUX1 = 0x3d;( q$ \6 \6 ~* i
ISTP = (unsigned int)vectors;! {# f; @9 d6 o& A
ICR = 0xFFF0;
4 H4 k9 `; I8 F/ Y U% Z IER |= 0x12;
. H: @ t7 y8 ~! w( Y CSR |= 0x01; " a9 [) W* V* o9 |
o5 P# `6 t+ w9 k [
- s+ p+ H/ x6 ^/ x* R
3 K4 M4 @- i' H8 s5 ?* O) o. Y还有就是两个输入输出函数:
4 a7 h7 N' X/ ^9 x# P" T% pvoid output_sample(Int32 out_data)
3 u9 X* a' g4 f' [7 J1 X/ `{
, s0 V8 W4 F! M& m$ k$ t AIC31_data.uint = out_data; 2 |% n4 q. D! x- x0 g
MCASP1_XBUF5_32BIT = AIC31_data.uint;, V4 p/ `. f0 U9 D
}* \( [1 [0 `: A! y
, P: b" x, U* S1 z' z; [3 Y
Int32 input_sample(void)
& O% X6 ~2 K1 ^9 \2 y{ % a4 x! L0 `" `; R8 i8 J$ D
AIC31_data.uint = MCASP1_RBUF0_32BIT;8 |5 G5 T9 V* A
return (AIC31_data.uint);: K% k" K( f4 `$ ]" D* k; C' W
}+ `1 |! k, ~9 B+ p1 S
9 V3 d) ?& o/ B& M5 N
|
|