|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' M5 P* S6 f5 E6 L$ q& Rmain文件:
# \8 U5 d; g P2 K$ \3 h& X1 [interrupt void interrupt4(void) 9 }" }: B& X# \
{ V! ?0 O9 E6 E M1 M
Uint32 sample;
( b B! G3 ~8 K& L+ n# X0 U, z- U5 c' v" E* W& T& K) @
sample = input_sample(); // read L + R samples from ADC
2 g3 N7 H4 H- n+ V output_sample(sample); // write L + R samples to DAC
7 q& C8 }4 k, m* l6 `2 Q. m return;+ y! J; A$ B8 m5 J9 z# H
}
. M; |* [/ l: G( F# i$ W* [* g( m5 ~, H) G' a4 ?7 m1 A
int main( void )
+ L2 H) r1 H+ a+ U6 M{7 C+ B8 l: P$ s. l" ]' @4 c
- B$ [. b& K& S; k$ p /* Initialize BSL */1 g# p4 x! F% k; |' _
EVMC6747_init( );/ u- O4 K5 o2 r9 j* M( W6 N1 A
/* Call evmc6747_intr function */
. C5 ^8 ^5 l. j' x aic3106_init( );* Y4 Q! }1 @5 X4 v; V( Q
while(1);
. `7 l% j+ K0 a* Z u}
" ?7 M; r* o. c, y
0 `2 W7 _% F9 H- b3 k
7 i, L2 q. Z6 i9 [+ d+ u; ?; g6 Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 c" {4 |9 s' y% W$ K/* Initialize MCASP1 */( z+ \; j4 i" c a$ O
mcasp = &MCASP_MODULE_1;2 N1 f$ t8 @6 O* T. p
mcasp->regs->GBLCTL = 0; // Reset
5 N( i% w( D/ a mcasp->regs->RGBLCTL = 0; // Reset RX( H3 L3 f0 s, U0 @0 t% a
mcasp->regs->XGBLCTL = 0; // Reset TX
; I) B: a8 Y# i9 ~; \9 n q mcasp->regs->PWRDEMU = 1; // Free-running$ B* `; @5 v% g5 k
// configure McASP0 receive registers# {6 y2 q6 q/ E" n
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 c8 L% v" `; q: R8 h mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 K3 @4 [% `3 o( r+ M7 C mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 Q! p0 c# @3 _7 x1 f* j7 v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): [5 R+ G6 C& }/ m. G, b2 f* b2 y6 C
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
. G' B2 I" S6 L6 S9 ]2 O/ x: N( ?* u mcasp->regs->RTDM = 0x00000003; // Slots 0,11 C8 i& t c( U
mcasp->regs->RINTCTL = 0x00000000; // Not used
1 z9 q/ M8 ^3 s( a6 P mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 a$ c5 N2 Q; x7 t4 U' [
* G o) a8 P0 L6 X; ~* c3 e7 P
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
" [: ?4 B0 Z/ ^/ P0 l1 O mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! X. t6 e2 [- ^( i9 K8 ?7 O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% w- k' q2 u9 }% q5 f) e3 h
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 k/ t- \% w9 w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* |9 c% t' k4 _! E" Y! W) ? mcasp->regs->XTDM = 0x00000003; // Slots 0,1
# S/ w( P+ z1 \, O- {, G7 h mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- q X. {: s* | mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; c7 P- S6 d. R+ }' ~& Z7 ^2 l4 E1 v
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) R! [/ l& @ q3 H; _" r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT. q d$ _& C$ v' Y4 R
mcasp->regs->PFUNC = 0; // All MCASPs3 E; ?, }( x; O9 W% A! ?% L
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- |, S U, K7 @0 T% z" G
6 V' m7 a) u7 D$ q' n0 p mcasp->regs->DITCTL = 0x00000000; // Not used! B/ ~: @* R/ W* {
mcasp->regs->DLBCTL = 0x00000000; // Not used
& H& C9 }$ N- n3 o5 ^ mcasp->regs->AMUTE = 0x00000000; // Not used
2 k- A% ~) |2 a# w) U* k2 r; r6 [( S; c0 C2 \ u5 S9 d
/* Starting sections of the McASP*/
5 O" f- X3 Z) k5 [) W mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 C/ b1 f7 z! {- Y8 l/ Y( r' m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 y- k3 j, J T6 P% T: r
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 U- W8 I G# g- U- C4 k9 o: y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 T+ ~9 a) N; L, X( N; [
- }2 Q+ b3 E2 f p( q5 o mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: U' [& j9 [$ P1 n2 k/ o+ v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 ?. Z: N0 r/ @. k9 E3 @
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) y8 ^! B- b" N4 {, j9 g+ ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" l8 f7 `! }5 Y, Y
$ ?' Q3 _0 G/ A( j7 P5 I- g" `9 E
mcasp->regs->XSTAT = 0x0000ffff; 6 m0 m J; y3 _6 y9 O
mcasp->regs->RSTAT = 0x0000ffff; 6 d* J6 s8 b4 T* ?8 H' P
' v9 Q: W. `/ F' r1 [- { mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 ?; n2 V8 d S. `4 _" W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# U3 v V! k9 U! X5 m7 M mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 }0 c3 T! v2 C& K3 Z6 M! \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 v0 h, W% Q& F6 F
5 {+ `3 G" ~, r! o9 q q2 } /* Write a 0, so that no underrun occurs after releasing the state machine */
$ N' t' v/ q9 y& {+ k* Q4 {% i mcasp->regs->XBUF5 = 0;
! z! u7 \# b- b# U) n) Q- u mcasp->regs->RBUF0 = 0;3 ^" y& g' c M8 R, E0 P- C2 T
! v& W' I( e m L# p4 v% ]/ b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% N* }$ K) {" Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 C8 w- K; W; |6 U8 s0 J
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
q* s( P, ?9 _: S, Q; }$ j- S* ?6 M6 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 U, e1 y5 v1 i1 u. [
) d) B: h/ }0 i9 J8 r mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" }8 A& H: `% Q$ [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
|, y( A, a9 z7 A" E/ o mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 p. i; h& C" l/ \5 E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 i- u2 e( M1 m9 `3 c, ]
8 N9 Q- a# N( C! ]* A1 J CSR = 0x0000;
% t+ q. H0 Q/ A0 \+ Q2 d( Z; K. g5 @ INTC_INTMUX1 = 0x3d;
; w9 I, O S: Z) B6 x5 n) N ISTP = (unsigned int)vectors;
" R/ k* z5 n( o( ~. e$ @ ICR = 0xFFF0;
' M/ q. y6 a& L0 R& w IER |= 0x12;
- O- j" X7 U, k CSR |= 0x01; & I+ c5 @" i4 v8 A
; `2 |- r3 p6 i& P7 I# Q
6 s% w3 B& l% J" z/ Z3 I# X/ F2 z I- _8 s8 U
还有就是两个输入输出函数:
* T+ S/ X& |, ~" F3 x h5 cvoid output_sample(Int32 out_data)
' f3 ]# o( e/ p% ]$ S{5 |/ Q; E7 y. J+ w! Q
AIC31_data.uint = out_data;
r) T4 m0 }! p* x MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ |) S1 ^- R9 E% K2 u/ [# ^! L}
( I/ q% U2 |' @. l+ t( U% O
0 |2 s9 o* r/ ? F1 `Int32 input_sample(void): Y- |8 g$ N3 p8 r% \4 g8 F Y* j# l+ b& D
{
* U% d# w& {, c2 Q/ q* h AIC31_data.uint = MCASP1_RBUF0_32BIT; C" \, W3 o _* Y4 C3 S W- F, p
return (AIC31_data.uint);
% e3 }9 k* W: J/ f0 ?* T}0 |, J' j ~, z& B
; V* H. e+ k7 K |
|