|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; ^: a8 w7 p. h% ^# bmain文件:7 }7 ^3 H, r1 t" @' ~
interrupt void interrupt4(void)
* R- ?7 k0 O: R& A* s' J{
1 X1 b* M# c2 G( J0 y. f8 N3 d Uint32 sample;- h2 x+ f4 \4 P1 U
+ _" x: j- n2 N" G4 S3 z9 W2 h* v
sample = input_sample(); // read L + R samples from ADC
6 w( R8 O" [+ A" s output_sample(sample); // write L + R samples to DAC ' ]: {$ S% C8 Z, ]
return;. U/ G, j& x9 ^/ i* \0 `# s
}. t3 l$ [4 v4 o' p
2 h: G9 g; B5 s, b) D/ j E* S' v) H
int main( void )
, b, ^, w7 ?% e( b8 o$ U{
! D# X% ]6 x# C. v J. n
5 `* G1 {, Z! P' h6 p /* Initialize BSL *// @3 w! J+ |" x' B5 v
EVMC6747_init( );
1 A8 \; s9 l- K9 e* c7 H3 d( d, n3 Q /* Call evmc6747_intr function */4 {& X0 a9 O+ O
aic3106_init( );% @& J3 i$ d3 C5 F" i5 W8 }- S
while(1);4 m7 m' i4 |0 G! P; g* h! x
}
6 Y6 J6 m$ E2 _1 q( W
. _! n& M d: p5 Z9 c# Y
& P5 s. E6 `3 `+ r n. q# u" Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 b) g; b! p( R! a+ e6 w( b
/* Initialize MCASP1 */' k; p, R( N- Q' w) ]8 d
mcasp = &MCASP_MODULE_1;
+ i x; }$ L* N5 g I/ N& { mcasp->regs->GBLCTL = 0; // Reset* v! _& j4 `3 |0 Y) K7 e! j
mcasp->regs->RGBLCTL = 0; // Reset RX
6 m) a! }) r& L* X' x) g/ W' \* o mcasp->regs->XGBLCTL = 0; // Reset TX' l4 z% c+ C1 I9 ?3 O
mcasp->regs->PWRDEMU = 1; // Free-running+ W; l# U6 G6 U
// configure McASP0 receive registers. b4 k$ R1 r3 |
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" J% U' y- j6 B' z& D mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 ?, s2 C/ j) l4 p5 |: g, j% n mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 v: U' {1 o2 Z) j. a mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ ^9 p7 ^* [) m9 V mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 J+ J% h' R4 Q0 ~ k
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ ]& n( `( N5 H5 g- Q, i' f8 A L
mcasp->regs->RINTCTL = 0x00000000; // Not used4 H! B5 V! f3 T. ?7 G
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& V7 x5 ?$ p( Y) p( ?
7 m; {0 F" Q5 v. A3 ^. R: C mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. x, j, Q: p2 D! _) k+ h3 D/ S8 h
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ c9 a3 N4 P8 A7 b! U
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# e! | {/ G( [# c. W mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 a( c* y/ O; m. @; i. R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" C; K5 z' |3 g w
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
! r/ x! C9 j5 B$ L5 | mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ Y& G2 e- D. z# |' B# d" z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' r$ d6 O& C, p1 ]/ A
! q8 {4 S" O3 m7 p1 A0 o) ~ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( ]; K( e3 k* b% [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 Y7 |$ E$ `# c0 P! v7 H
mcasp->regs->PFUNC = 0; // All MCASPs# _+ O( I: ^! U# B# \4 Y2 z* m% {6 [
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 l& U- Q/ w$ e( S; F; v
& _ |% V ~/ B* f# S9 o
mcasp->regs->DITCTL = 0x00000000; // Not used: p, O* N4 \; P! c9 D( ?2 E
mcasp->regs->DLBCTL = 0x00000000; // Not used
& R2 p1 A4 H6 A3 a! v; u/ i/ H1 x mcasp->regs->AMUTE = 0x00000000; // Not used/ }3 f+ X* S+ p j
" W4 ^+ T& @2 |+ m/* Starting sections of the McASP*/" V4 ^6 e/ p' @4 X
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ w% h5 B3 ]6 B0 u0 z3 g8 L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 j! v6 E& P1 `/ J mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( Q2 b) |* t# M; {& f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 n' J, x9 y0 h: x, q
( }7 W6 ~( }2 ] mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( ^! V4 o+ c% A2 @% U! X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& ?8 \+ |" s' i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 @3 b5 Z0 ^# ]+ o4 ^4 ?% L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% ]7 v% C0 K2 u! } k y5 y) }2 S1 K
% D/ v$ D6 t' o9 A" L
mcasp->regs->XSTAT = 0x0000ffff;
5 U- n/ ?. ]8 ~ mcasp->regs->RSTAT = 0x0000ffff; 0 k: T" S& _: D3 h( |* j' g
9 n9 N/ a3 c0 U& r7 F4 }8 U4 g
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 I0 _% l8 }* B; R" G" ~7 u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# b# k, p. H6 e7 D d& w* K/ R mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 a( d& O8 O1 u4 [8 o5 V9 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. t: r7 e- V: I' D( M q* y
. V e+ x- L7 u6 _
/* Write a 0, so that no underrun occurs after releasing the state machine */
. g1 y2 G8 H2 o1 ^ k mcasp->regs->XBUF5 = 0;
/ }6 e( |# V/ q& U mcasp->regs->RBUF0 = 0;
4 l D8 ]8 m. A5 q* g- R
- }7 k, A& X" b) Q+ E' a* E mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% v, n+ \, P2 K" j# l. t6 [) O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& w; Y4 {* v8 \) q' j4 @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ o2 ^# ^( G' Q% F# _$ X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, ?: t8 O( ~( {6 \
4 w y* |) {0 I0 y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 a4 e4 u9 i/ Z$ a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# h7 v" o; v: ?: a: u% {: M mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 k+ d4 X9 D2 `. X R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# _1 ~: D) `3 H" k: V* v
+ A" Y5 t1 ?& }! g CSR = 0x0000;9 x& v% Z" y- T' ^
INTC_INTMUX1 = 0x3d;
3 |& \7 P N6 N7 h/ i. R' C2 @1 { ISTP = (unsigned int)vectors;, L$ @* _7 _" x/ n! e" J) @
ICR = 0xFFF0; n% D) L7 r- b) n! O
IER |= 0x12;
. z; C6 a: h1 ~. m L+ x, `6 F8 B8 u CSR |= 0x01; % ]' t. a) x8 k1 J8 U5 i' A5 ~6 T9 A
) Y1 w- I6 X3 M, Y6 H
9 M0 V5 x0 ]- y
( k/ Q+ K( g% F还有就是两个输入输出函数:
9 Y2 D7 ~" C5 |( d5 M' fvoid output_sample(Int32 out_data)
U! w8 ]. }: P9 H# n{0 m4 c) x! C/ ^. x
AIC31_data.uint = out_data;
. e% a$ |0 B h, @' w3 d/ n MCASP1_XBUF5_32BIT = AIC31_data.uint;; ~( m# c/ l" }3 [5 i8 W% y6 d
} O, b, l/ I/ ?: N9 }1 U: X4 {
; M& I4 ]# M8 d9 f0 `Int32 input_sample(void). \- ^) A6 i) P* ]/ F; |( t
{
$ W7 q$ O6 i I6 @+ |3 ` AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 ^, x+ g% v$ c& a% F. o6 b+ M return (AIC31_data.uint);2 k r. Z, g5 J+ w- F( Y
}/ G/ k% e7 v6 u! h0 e6 p+ N" N
- e1 G; L4 b) _$ U* U |
|