|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
{6 r- o# O% Y; V+ rmain文件:
9 ?& l. r Y# F* Z) S$ linterrupt void interrupt4(void)
3 G; m0 Z: g2 J3 E- }{/ ~' m9 n: r( H; B) Y1 {0 L: b2 c
Uint32 sample;" ]) U! j3 k" E' v1 ?+ T
3 x/ o" I! o: v' o$ ~+ H! ~6 p sample = input_sample(); // read L + R samples from ADC
# w$ h& D, O7 m% D3 U output_sample(sample); // write L + R samples to DAC U. U" p$ r/ E9 w; p+ f# n
return;
1 j1 x/ R8 _. l6 X6 n}$ }6 m/ G' @3 E2 b
7 b! Y' b$ X; G) ]: D4 t: u; f
int main( void )# c) b) ^6 G. h3 z) v# o
{
- ?1 {7 d- @/ y9 e0 G9 m
9 ]; Z3 o- Y6 R /* Initialize BSL */
( D0 [$ ?( g0 [+ P5 F EVMC6747_init( );
7 [: l$ q- L% z# {0 ? /* Call evmc6747_intr function */
" _" t1 \7 d" T( ^6 Y aic3106_init( );
+ G/ O9 [6 n. K: T& M while(1);) G( w3 G F/ @$ x: T
}' n6 B: ]9 Q3 l' q
# p+ L& v$ |2 Q c; y4 w- ~
9 ~3 `8 J* l- M* G8 x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' M$ d$ N: u) R
/* Initialize MCASP1 */
+ A) Y4 }1 o# |5 j- }% ~% g mcasp = &MCASP_MODULE_1;
. e0 R4 Z. @& e( M2 g5 |1 p# D mcasp->regs->GBLCTL = 0; // Reset. l# d3 }' f' x% T! o
mcasp->regs->RGBLCTL = 0; // Reset RX
. v/ U b p! n mcasp->regs->XGBLCTL = 0; // Reset TX" ~. D) P& I. F5 ~! v9 ~4 Q, \
mcasp->regs->PWRDEMU = 1; // Free-running- m) r. n E. ?5 ~
// configure McASP0 receive registers
* d7 P3 R3 g. _2 S# _ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used- A0 S% k3 X, w2 V
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus F# w" [# e; O; ?
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 W! y: O9 s6 Q- r3 U) `. q mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# n2 s6 l% }% j" g+ l mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)7 U" e M% O$ b3 E% d! T
mcasp->regs->RTDM = 0x00000003; // Slots 0,1% Z" Y# k- c! Y) {3 X0 }9 K
mcasp->regs->RINTCTL = 0x00000000; // Not used/ m8 Y h3 P$ [4 U
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# k$ r% z2 h% Z: ?: h3 Z* T
+ Q2 a) T7 r! c; ], ]# S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 ~7 l! y% V' d
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& @5 q. Z, h: s7 [1 K7 E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! @ q9 x& V# w: ]6 U) k! B
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 v/ }: L, ^9 ?7 v) I
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 i3 [# J, l0 h6 a0 A
mcasp->regs->XTDM = 0x00000003; // Slots 0,1 A: Y/ Y: v% N" t: a1 U
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 T7 t' a0 |4 g" F/ R( G1 o
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& Q8 F: p, _) e, p/ ?# ]
" T; k0 f. }; k7 P( A- l* L3 Q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 Q4 w ~' C/ P9 y5 y5 N: P6 y mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* ]8 _6 V2 \3 `6 Y$ @
mcasp->regs->PFUNC = 0; // All MCASPs6 ]0 z( w. K" `( S$ L9 W( C
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# O" m* U: F, U V" k: \7 F; r0 T
mcasp->regs->DITCTL = 0x00000000; // Not used
! g5 X) f* q) r1 f* J# G mcasp->regs->DLBCTL = 0x00000000; // Not used- J* ^3 q, C- t. A9 B! H
mcasp->regs->AMUTE = 0x00000000; // Not used; s* X! |6 n; e
3 o' Y$ Z9 T' W' Z5 n/* Starting sections of the McASP*/
; c* K- A4 z2 K8 ?! X3 k. f mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 H4 F' X: ?4 [9 u) E# |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! W* x: k( v% ` mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / d6 k. k- r. R; E, r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); ~3 F# }/ U( h
}( `& ?- v1 g8 c& ?( V/ M& ? mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 ^# @. }# M8 \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ q% {" @, l1 S& y% v5 b
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 f0 a$ _! d5 M* |! E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! `& B+ h7 ~! n$ Y; r8 F7 g/ l" J+ g% o) u4 c# g
mcasp->regs->XSTAT = 0x0000ffff; * q h, v! y" I; d6 @
mcasp->regs->RSTAT = 0x0000ffff;
! I8 S! x& E; P9 F! a: Z
9 e& O" W8 ` j \6 q( U mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 U6 b! g4 ~* u) m ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- S$ r: T3 \; Z) g! m: e( L mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 V- }' y+ C& [4 u4 P) Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' K* {, G+ k4 _- ]% a$ x
5 k i, K1 I( G( Y" x& t /* Write a 0, so that no underrun occurs after releasing the state machine */
! @9 O, R- @( W" e7 ]# E- ` mcasp->regs->XBUF5 = 0;' C' j7 m# d# m* ^
mcasp->regs->RBUF0 = 0;
4 r( ^: |. n" f; G, M; q5 Y" Y- Z. `* B; j% E5 [( U% |
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " T& F: J/ D/ l \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% u5 q: h( C1 i# H
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 c2 E; B& ~) [1 w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- O, d! @- R1 n% m3 Q( n% K& E% l, f" e. S
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 L- g6 n( X, u* @/ ] U! E% L B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 z5 }6 F$ K5 X$ Q& [* @1 y& v mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& Q) s& r; I; k! U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. M9 B; }3 f2 {4 M
+ c. N" t% o/ W8 @ CSR = 0x0000;" X% {0 K l" p2 T3 p4 r
INTC_INTMUX1 = 0x3d;% B( n' [9 r! {5 F8 r
ISTP = (unsigned int)vectors;
/ k/ H! s3 X) {% A( S: B ICR = 0xFFF0;
9 K/ v7 T) k8 w" J/ f IER |= 0x12;
; ]# }+ I9 J6 `7 R7 F0 t" e$ B* | w CSR |= 0x01;
) t7 ^$ S2 [- A% g2 I, E4 m
: {( x+ |- {1 k2 N# ], O" n
- y# Q; M2 Z6 S* h `3 {0 W
; M n. F( a7 c3 ^! t还有就是两个输入输出函数:
5 s/ T% E% n2 J# V( i: W3 ? ^void output_sample(Int32 out_data)
6 ]% ?1 V9 j" O! T# j2 V* B{0 e4 @# B' i6 z' I6 L& r
AIC31_data.uint = out_data; 8 H. d5 R- t% M3 n1 V( r3 ]. r
MCASP1_XBUF5_32BIT = AIC31_data.uint;( L1 H) \" C- W
} w! L# j" F) H) G% Q# U$ `; I
2 t* ^* j' i8 I0 |% e9 RInt32 input_sample(void)
/ |! J4 y. F) r$ W2 r" d+ @{
4 g f# P, }7 ^: n1 W" e AIC31_data.uint = MCASP1_RBUF0_32BIT;
, w( D: f A; \ return (AIC31_data.uint);
; c4 k& ~& Y( b8 G, I8 G$ V6 I}
: |/ U& T, m* r! [! h2 Y: j
" x& t' [' h+ Y4 I3 g" e |
|