|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' m- X; K+ g0 z8 U* s
main文件:
4 v9 @% \- I1 U8 n6 E2 y, E0 r& xinterrupt void interrupt4(void) ; F( X i3 W. u5 J
{$ o; @( D* b1 K* j& o/ [; r- c
Uint32 sample;
; A3 u s1 N9 Y3 N: u; o
: ]; `% j# C& X4 S! J& |5 A sample = input_sample(); // read L + R samples from ADC6 s' V, O# ~$ C8 R. B l( M7 `+ X
output_sample(sample); // write L + R samples to DAC
O1 [! K/ H9 U return;
3 {4 y" C* x1 ~9 Z}
! F" T- ~8 ~9 u# ?, j; e( o1 ~
! Y% {6 |# x, j1 Eint main( void )
: R$ [5 v; d9 i+ V{; F. \: j5 w6 L( |" I" e
) B# v9 @; H! G, J6 T# h /* Initialize BSL */
) S2 S( N' I/ F EVMC6747_init( );, Y) J8 A$ B7 h/ z9 X0 E" ]3 Q7 N
/* Call evmc6747_intr function */
+ N9 i2 U* G! n0 C" h5 ]; G" w aic3106_init( );( \9 y4 |: g7 N
while(1);. Z$ B0 B2 W; V/ b. y* j+ O
}
+ d& q" c6 ~/ j! y2 ^4 Z* o
$ t% M2 ?1 R) A7 F; q
% y x3 w$ r& {- n7 taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 L( j4 D$ D/ R5 t
/* Initialize MCASP1 */
7 \: [( {. k" w% I- E mcasp = &MCASP_MODULE_1;8 K2 H2 w2 @* f- z3 z0 G! L- c
mcasp->regs->GBLCTL = 0; // Reset
. Q N' ^7 D& X1 l mcasp->regs->RGBLCTL = 0; // Reset RX, N6 R+ G5 v2 O7 b+ c2 J0 |
mcasp->regs->XGBLCTL = 0; // Reset TX
4 N- ^* l3 `3 G" P) V* b- n mcasp->regs->PWRDEMU = 1; // Free-running
7 }4 s* e- x1 t, h // configure McASP0 receive registers8 |8 s! Y) h% f) x0 p
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) }9 ?6 J$ h! F
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
[4 c5 o# F: U' W9 `7 ^; f/ @5 s1 E: c mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ c$ L0 x8 c. o+ t/ J' l' d mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 `0 {% {6 B* q1 }. r6 j mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
6 { s+ _/ {9 ^ mcasp->regs->RTDM = 0x00000003; // Slots 0,15 b' D4 s* j/ n
mcasp->regs->RINTCTL = 0x00000000; // Not used& N" {: c2 J* G" e0 v% p) P- s: p
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" u& _ V6 P Y/ K4 k- C+ W9 \
' m$ d" e) d! F6 ^2 w) F0 {5 Y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 v5 U2 M1 \( T+ v2 A( n0 U
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' G1 N6 A+ M6 ?: ^0 U( u: [7 } mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: L% a7 O$ v2 h$ A% v7 | mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 j) w/ Q( a& L& Q0 y- U* x! b2 } mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; J8 s; k: M5 d% H O4 n% z mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( t% v) l: ~+ P mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& p$ J* r6 N' V3 m$ G Z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( u$ o4 Y; `! t$ H! Y( `
6 G6 `# s% k1 Q; Z& H9 E1 D8 ~% f
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ b) c. ]1 t1 g: a$ q9 g
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 h' i5 U! q, N& j% L
mcasp->regs->PFUNC = 0; // All MCASPs, ^; o) i) c' g2 e: h% _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 ^, x r6 y0 o! ]# T0 ]3 b8 o
' A4 ^9 Q4 I1 y: E F t mcasp->regs->DITCTL = 0x00000000; // Not used4 U6 w9 f1 H/ V
mcasp->regs->DLBCTL = 0x00000000; // Not used" r) q; I) R3 b( T8 r9 H5 z& t
mcasp->regs->AMUTE = 0x00000000; // Not used0 r/ E+ a/ s' j. @( I
1 |* e$ L" Z1 n) f* c
/* Starting sections of the McASP*/" z: a' L6 R4 k/ r3 m
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * j2 X3 K: t' i8 j. }3 _) }$ ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ u# @) Y( ?3 }% `8 d$ ~2 ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 ` ~% v) t" \3 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 C, {+ A# l7 h: { b' H' q! \
8 o" @4 J# G( Y% F! t
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 W1 i/ _3 `+ ~; G* K- v4 e3 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& f: f# d! b; H+ k mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. m" j! q, l2 c3 P. y$ I- _ i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' \/ ]2 H3 P5 ~4 R, D* ~; w6 i/ j: z( h& z3 C
mcasp->regs->XSTAT = 0x0000ffff;
0 A3 R, _& W! [0 r8 n9 m( G mcasp->regs->RSTAT = 0x0000ffff;
5 p* u; @/ [4 L" z. e9 [2 V% o, G
. G! X& y) j+ k; i" v( S. d+ S mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! B+ O+ D" R$ l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) E& x) V0 B! _0 a mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: B7 j5 h' k# p3 ?' s2 p x4 v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 a0 [4 |$ }; B4 s
% o6 J6 T/ i, g3 ?. T3 W
/* Write a 0, so that no underrun occurs after releasing the state machine */
: c, J% i" y# _% r5 h+ Z mcasp->regs->XBUF5 = 0;
, h+ K( Z7 X2 a% n4 ~# y# E mcasp->regs->RBUF0 = 0;
! s! k& y" i* L" a/ f4 ?% \3 }% i8 F" O9 V
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 \3 G$ L) Q' I k5 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, r! M9 t& l; ~' M' a
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; X+ s% B% p& {9 O9 f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ x" j0 d$ S8 ?1 u [
$ [) E( ]0 r* i6 p) p* @ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & o5 x! l+ L9 `0 u; E ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- H; }7 }- s" j9 b8 K9 B( d
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 p+ ]- ~: S& O2 | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ F) ^# ^9 q' e; D# x
1 C/ l) _% ?1 F$ e( f6 r A, _! j CSR = 0x0000;
2 P' W6 u9 i8 v2 S, g INTC_INTMUX1 = 0x3d;
+ p; w+ @% e9 i7 k8 ~$ } ISTP = (unsigned int)vectors;
; p5 _, J4 D- U' ?( P# f. A ICR = 0xFFF0; ( q4 P% j2 S$ ?& q* J0 k2 A
IER |= 0x12;
( V; G& f+ S4 e8 _& {# G C/ ?& I CSR |= 0x01; + p# N& ?& Y) {( h8 ?3 A: z/ L6 y
& ?' j' k8 I3 g
8 q$ `3 U5 w: v& `
* v. A4 g. J! t7 G5 Z8 B% O$ r9 S( m
还有就是两个输入输出函数:
8 U3 `+ {6 @. C N! o2 _void output_sample(Int32 out_data)
, U; ]5 E. o9 f' `3 t{
6 Q8 s# t5 B/ v7 R# I% z AIC31_data.uint = out_data; % W3 s, @% ?# i* x7 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;
% I2 i8 p) Y. H0 b, ] h4 o* V}( F# K# f# T$ v6 I$ ]# z* L
. {) c1 L3 D. B- d) P- `Int32 input_sample(void)' U8 j5 ~4 ]& J# Y
{
J. X3 \8 g+ {/ c/ N; P- k& d AIC31_data.uint = MCASP1_RBUF0_32BIT;8 C; q/ r0 e: m- c# U( \; i7 J
return (AIC31_data.uint);# |! N5 p1 \/ {) ~1 g
}
/ X: a# e6 J' s: T$ ?1 d
: X5 {6 @1 K5 [7 N8 w |
|