|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: w- s, D- P; Q, Q& Fmain文件:& [3 ^# w8 Q5 h- C) K
interrupt void interrupt4(void)
N. T; }$ d6 `( D* t2 w' [4 z2 M. T7 u{
0 ^' n; @% ]; q. p# k8 L) u Uint32 sample;
' p" m1 C5 r7 j9 E7 ~* m7 S/ T( K+ j& M4 O' b$ c
sample = input_sample(); // read L + R samples from ADC' N- }4 K0 g; ^) a& {
output_sample(sample); // write L + R samples to DAC , `; q$ y) S e' p
return;4 x, ?, t" @8 M6 K9 d1 f4 W+ ?
}, K, G- C2 k( r2 E) \
8 y- s/ @6 y- Iint main( void )! S; u5 I% A- p+ N
{
! Q4 w; n1 @ t ], T
1 Q. y, N* Y( e! i /* Initialize BSL */5 o+ K; }& t% v* x5 V! r
EVMC6747_init( );% ?( {% |) ]6 u8 ~2 ?- S$ K8 \
/* Call evmc6747_intr function */
, |1 P! X( q) C! D aic3106_init( );" P1 i2 f, y/ l- j6 `; l
while(1);
9 V7 I, N, `5 y}
W) X5 ?0 T9 F2 @2 N9 v: i2 z' ]0 t- P# T2 u" v3 |8 `
7 G% B9 p W! v$ c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, `& ]: ^% |7 a J; D# ~2 i/* Initialize MCASP1 */
% S+ u1 S# Y2 d3 i; [ mcasp = &MCASP_MODULE_1;
0 D# v! ^! k" o. _7 I mcasp->regs->GBLCTL = 0; // Reset0 \/ i4 [. w+ `" ^# _0 ^1 S9 @
mcasp->regs->RGBLCTL = 0; // Reset RX
2 l; q4 K4 r4 J# ~" ~ mcasp->regs->XGBLCTL = 0; // Reset TX
( ^- M5 g6 {+ [- o' \2 |$ y6 Y/ H mcasp->regs->PWRDEMU = 1; // Free-running2 Z& U/ t$ r: T$ h7 v1 R4 I' Y O
// configure McASP0 receive registers
, W7 y/ a/ H n+ {$ y* s2 Y) G; Y# V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
- H& x) `+ U% c' T mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. d; H; \- i% S+ H6 a1 N( [ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ H+ Q' [3 S2 T9 b0 U; [7 Z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& O8 B' W; ]/ Q0 S) \
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
. p# a7 Y6 M+ L2 |6 k mcasp->regs->RTDM = 0x00000003; // Slots 0,1& S/ k# u0 S7 C: @4 j! G
mcasp->regs->RINTCTL = 0x00000000; // Not used6 ]0 Y+ P. f0 j4 A
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: E+ ]0 f2 b+ p% M8 |& a/ b! ^8 w$ A# H2 D9 E" X: c
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) g# W' R: y% M/ t0 q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" q2 D( M3 [ o- ]9 @4 ^/ w
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( L# o8 h* K z, G
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 r( |$ k9 z; b% y5 i
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 T3 H6 u5 s/ I2 O8 _0 s mcasp->regs->XTDM = 0x00000003; // Slots 0,17 F' g3 r/ I( J# f/ |4 d1 W
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, ]$ ` r- p, p- ?1 X mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" f1 p; b# }) U0 D M: Q# R
y* W# p5 t$ G, J& F
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 }( U7 J6 `# Z; ~" l4 u/ u7 l" k
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; t9 n. H% R1 f% t! U6 G
mcasp->regs->PFUNC = 0; // All MCASPs0 l1 f. s$ `8 c# @: |8 f: N# D' k
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 Q2 I; Y# e1 j
( {; K7 B! l+ c: w; w mcasp->regs->DITCTL = 0x00000000; // Not used/ [$ Q: A; o# j. f
mcasp->regs->DLBCTL = 0x00000000; // Not used: v; J5 x6 y2 Y! `) {) {& l
mcasp->regs->AMUTE = 0x00000000; // Not used
+ c) _3 m' N' D
% o/ g0 z1 i. Y! L6 Q* a* G/* Starting sections of the McASP*// Y9 V& \ R& B0 S6 P% P
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! y3 g+ C+ ~2 u; K. h* G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 ?" [2 o. }. ]' ]$ l- T% V8 K5 @1 u mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 S$ e. c2 }( n' w' U) Q9 v) ^' ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ F. b- U/ G. m4 Z1 y
9 Q% Q& E5 q# ^# { mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' Y6 n2 m( L" I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* V. z* n n6 n* Z% r$ U( H
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . [% Z7 }! p! z0 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 g/ ?- d; M1 K
+ x' p% V, W6 \. |; C& }( V4 | mcasp->regs->XSTAT = 0x0000ffff;
: U4 ?) @0 V3 i; q$ P' S7 p mcasp->regs->RSTAT = 0x0000ffff;
. Z* U# \! u7 B
1 u# {( E7 P, u( W( j6 p5 D mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( r6 q% X* p$ v& g3 S, f g9 n9 \$ I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 {' c5 O! s7 U+ i }9 `. m mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 G8 Y+ M2 ]. h3 @! ~5 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. s( \8 I4 z1 z
# U3 u$ R0 C. e4 u9 C4 } /* Write a 0, so that no underrun occurs after releasing the state machine */
" |/ R! a1 X# b mcasp->regs->XBUF5 = 0;
- s' c" n6 q; E C2 N mcasp->regs->RBUF0 = 0;, _$ z% |3 C- c' D- @0 a5 V5 X: L6 a
9 v- Y, J# N2 b: u mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 G; j$ G/ V% D/ I; y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 c8 l+ L3 Q: z. }7 A" a% L$ g
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 s1 f' @3 s" \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 q: A, x9 s7 o5 j8 |7 L0 w$ x; ?; ?* H3 F% u3 h: D# H2 j0 y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 R4 A% t1 Y, l" `4 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. J q X# i/ E& R# E. U
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 l, L$ \$ h4 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ t* I0 L* I- c' t z: V+ F/ _; o4 z" z# z$ p! r7 \! J
CSR = 0x0000;
' J9 a# n5 W' b4 p# _! @ INTC_INTMUX1 = 0x3d;% S( j+ r, g; @3 M ^6 x& P$ P; u6 L, h
ISTP = (unsigned int)vectors;
: i* t7 x' N- T5 T @4 a ICR = 0xFFF0; - ~: C1 P( [ G5 ^0 f0 x! r& f2 V
IER |= 0x12;
4 V. @2 z% v M i5 e CSR |= 0x01;
8 o3 R# E3 @' r* K% ]
$ ^* A" @* S+ q3 ?, K- Y' V; O7 P/ n8 O' j/ d; q
* \! C8 R$ N0 d- f, ~% G) w/ P9 x5 y
还有就是两个输入输出函数:* i1 ^' n, R- W2 G/ a: y
void output_sample(Int32 out_data)
: p/ M7 S! H3 z6 j; `+ R! e{/ u% v7 U% j1 \/ U
AIC31_data.uint = out_data; a. o P* Z" T$ u* S
MCASP1_XBUF5_32BIT = AIC31_data.uint;9 Y1 A4 w) D1 ?" f+ [. U
}
0 z# _4 J4 H3 y
# w. Y) D O* e: Q: h$ wInt32 input_sample(void)
7 z1 `: G& U& V- H{ 3 U+ y' b; P" b' D- D: f, O# |5 N
AIC31_data.uint = MCASP1_RBUF0_32BIT;, S, Z' i2 v+ L7 y7 _# z
return (AIC31_data.uint);
' I0 q, m2 M5 ~( X}
B0 H- h8 \8 O( m6 y$ j- I s. K4 B* d+ ~
|
|