|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# A; Y- E- o5 ^8 t" }7 a" P3 ^
main文件:& r2 U" X* n; e, z) r
interrupt void interrupt4(void) 1 Z1 S& N' o. F9 B6 e' _; Q
{$ E. X/ }8 g7 d3 }# P. i' A
Uint32 sample;
: H* q/ H. m) ?7 A+ F) C: O7 O" B- V9 ?3 s4 n3 h: K& i
sample = input_sample(); // read L + R samples from ADC
( O0 p6 g. \; h% X3 _! A" I output_sample(sample); // write L + R samples to DAC
! w, b) N: L; F$ o3 e6 ?' z return;4 W5 Q+ j; ^ i* E
}2 j' c8 i' X8 `/ }" w# X. r, L# B
) t8 u% ^# k8 H; e& ~. D# `: P+ yint main( void )0 W2 n \$ D6 B! N4 z. J* r2 o# P @
{
6 c* Y1 g7 d6 [: |9 P' ~
- b! V" y$ o" h# Z1 ~ /* Initialize BSL */; r: ?# i: {9 j
EVMC6747_init( );
! Y3 @6 G, ~8 \+ P& K /* Call evmc6747_intr function */
( r; K& t8 l( s+ i" I- Y z aic3106_init( );3 U) }% ?/ r6 `' T1 K/ O
while(1);
# a1 y2 j$ X. ^( K9 K% d( X( y}
% L5 p2 M, s) ^" e0 D
5 C8 r9 u! F6 j4 l8 `5 A% X" D& o9 R- V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 @% y& h3 `5 h0 M
/* Initialize MCASP1 */! D- {; v c; K$ n" U
mcasp = &MCASP_MODULE_1;' e; k- o, D' Q/ t* o; R8 i
mcasp->regs->GBLCTL = 0; // Reset1 @$ e) m7 ~- P- |5 \, z& C7 X/ T
mcasp->regs->RGBLCTL = 0; // Reset RX
, A$ R, `6 F0 g. [% g mcasp->regs->XGBLCTL = 0; // Reset TX8 U( i0 [8 f" V0 q- X' {& r$ K
mcasp->regs->PWRDEMU = 1; // Free-running/ J/ Z5 C; }; G' c
// configure McASP0 receive registers
' u, @( o6 K. \- ` mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 M/ U7 @ Q+ k1 F, C; { mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 [. g$ b( W: z" ?
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ E* [3 {) O* | mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 U+ |4 C% ^9 j
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ i3 F/ x n y' x mcasp->regs->RTDM = 0x00000003; // Slots 0,1" r+ i1 {) A3 ?2 E" g9 |
mcasp->regs->RINTCTL = 0x00000000; // Not used
# @' W, ]+ _$ E8 ]8 l mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 f5 Y- G" J3 Y+ H# j, b0 |) ^
1 K7 Y/ H5 }4 R. V9 l6 P# |; ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ S$ [& ~% s2 ?$ v0 q+ G$ t7 m
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 X/ M9 Y+ ^7 C* m# O mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 K+ ?& n# V+ X& c, ?' k8 |
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
G6 a2 q! W$ W W+ f2 M mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
7 H7 l' [# Y. I5 b; D* L mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 v/ ?) ^2 X1 z( a mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: G- `, [ s, c7 V mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% U8 v2 }5 \) Y6 P9 ]. b9 W" k
* r% J* I) b, a: M. W mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, T0 \! \ M, p" I/ `
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& x; Y) B& V/ V& D, F! v/ M
mcasp->regs->PFUNC = 0; // All MCASPs5 i U: y, u- q. k5 u* {, x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 ^$ M5 q- @( L5 l( I1 z3 m# p2 O
mcasp->regs->DITCTL = 0x00000000; // Not used
8 o+ A0 H- \* \: K3 o: a W, M mcasp->regs->DLBCTL = 0x00000000; // Not used" Z9 `. {! \. E
mcasp->regs->AMUTE = 0x00000000; // Not used, {, H+ q+ S4 B2 k2 t- T3 e
% X* O% y0 f+ {/* Starting sections of the McASP*/8 e& L+ P4 A. S( t: x
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # j+ y* }) k1 W$ o9 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ' Z8 J* G6 Y/ S) x" ^, c( z, @
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 t ^$ _1 ]: K" Q- c+ Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 p! w3 H) x7 {/ _
7 q% I6 A/ P( R9 Q! J, X# w mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & d8 S9 K- e! ]- W( g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 g' |( v1 K! T/ K. \$ T+ v mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * I- y, V1 J2 l* I2 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 ^8 J# l9 B/ e% a$ L R% _
. V# @2 X+ a# E" q& e" { mcasp->regs->XSTAT = 0x0000ffff; # `+ `4 e9 P" y
mcasp->regs->RSTAT = 0x0000ffff;
/ e4 O+ P# \6 \7 S' Y) _4 h, z, T; e- ` {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 S, y$ B( H7 Z& {1 F2 s, o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* Y5 K. W" ?+ s: Q" D
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 N9 i0 ^) t! J' B' i9 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ T# e* x% k# K4 [+ L
2 M7 z# N: L1 R /* Write a 0, so that no underrun occurs after releasing the state machine */! `" O4 p* {4 r
mcasp->regs->XBUF5 = 0;
; _0 L! \( B: r: M' N( O mcasp->regs->RBUF0 = 0;
W# \+ {! t( `3 k/ {7 l* h4 w( w4 s" t& |" U$ L! _2 |! Y F( E
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) z4 w2 D& z9 } D6 s# J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, H0 a+ o y9 x% T9 z0 Z
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# m9 T8 `: k: `3 A' X5 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 @ c, D) o$ ` J1 S/ i$ v
' s0 V. I+ g% R/ |; w* x+ C. f" q# j mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ c, x: ~9 X* U/ L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% B \1 O" g% F' C7 k+ f0 { mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 P$ ^9 _8 d) m g; V9 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' n2 K# J3 J: t0 k9 F# V4 f
+ O/ X* |( P+ y9 ]( _
CSR = 0x0000;
( u* H4 d$ v. g; T) `/ F9 ~) | INTC_INTMUX1 = 0x3d;
% w; ^- B& o7 g9 ]0 N E ISTP = (unsigned int)vectors;" w- v" I5 w; f7 l o! k" }& V
ICR = 0xFFF0;
4 c4 j" W" m& G$ _ IER |= 0x12;
& z X8 K5 { w& ?$ @ Z* m: q CSR |= 0x01; " s' i5 c3 Z" |; B; P* G- D
# A$ D2 {. K* u( x" t' h% f1 \, A4 f: D3 ?' q1 M. ]! Q* M4 u
# G8 _5 s" J# u) B+ Q还有就是两个输入输出函数:* i- j0 p1 s7 {5 o
void output_sample(Int32 out_data)% C) m6 k, j* e9 E! v8 i
{4 @! Q6 t7 `: L$ C) j, P: ?* h) _
AIC31_data.uint = out_data; ) J7 f7 |! d, u9 g
MCASP1_XBUF5_32BIT = AIC31_data.uint;9 p. W) }/ C) [3 H% e( Y
}
3 j3 p3 z9 d" `* H0 |; l
" ~% b' ?6 G; P- zInt32 input_sample(void)) j. H$ m( n6 F" O: t6 p
{
n4 ?7 A+ q- J1 o/ ~) v AIC31_data.uint = MCASP1_RBUF0_32BIT;
; D+ O6 P; r4 |; g/ S. |. k return (AIC31_data.uint);' G% c0 a9 x+ Z' l. x& ^
}1 l/ D6 P$ \- P" w& f
& R: z; T+ H0 b |
|