|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' P5 O' P$ H6 x1 X- @
main文件:- X* h2 s0 V' z& _( O5 g
interrupt void interrupt4(void)
* B) c! c6 q5 k! a- E# ^ [4 c% K{
0 w2 V. u; \2 I4 D+ O Uint32 sample;9 s, }- E' r1 E6 p5 Z: S( ~5 B
I$ r4 P% Z7 g5 d& S
sample = input_sample(); // read L + R samples from ADC
& M$ ?7 E* ?- L. ~ output_sample(sample); // write L + R samples to DAC 2 K. @! v1 l0 Q* q
return;
7 D, W5 [, n. Q# i* b% U4 \}2 u! L: d$ H7 Q/ I4 X& U
[* z. y1 j3 z! _6 tint main( void )2 [& W) V7 z5 F! z& g
{+ q/ J6 {5 w2 {4 X+ ~* q9 g9 u
9 l1 n# a: \# j- R' W
/* Initialize BSL */
; l# U5 L5 M& Z o! O& d! w EVMC6747_init( );
( a- O9 u6 Z2 ?8 O' b+ p /* Call evmc6747_intr function */
# A' X; F9 C& Y& {/ ^( F: Y aic3106_init( );
1 M/ M3 R6 T+ [% [! C7 [$ j4 l while(1);
+ Q: h! A9 T8 ^ r2 l}
' C0 Q- Z8 k$ L0 \: g7 {. F9 ]3 [" |' s- Y2 j6 h
0 F7 |' h( k. u9 G$ t. ^! A6 Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( C( k. W) G2 T4 U) _ \4 i/* Initialize MCASP1 */
4 i+ A5 C( A9 i3 Z7 z mcasp = &MCASP_MODULE_1;7 X; ?% a+ y, a$ _. ]' ^
mcasp->regs->GBLCTL = 0; // Reset
% J8 P& q% k4 e& t# ^ mcasp->regs->RGBLCTL = 0; // Reset RX
# a. L/ t- u' V mcasp->regs->XGBLCTL = 0; // Reset TX
( I7 h0 q' g3 C. {/ g2 l# v' {% m mcasp->regs->PWRDEMU = 1; // Free-running
5 j# C1 t2 [) _6 Z% a4 P! f3 N* u // configure McASP0 receive registers
* {6 ~ @5 N% t1 x5 K+ N; Y* _ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used+ D( C4 `8 Q# B- F
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& B8 L: ~* u% r2 J' i$ k7 E
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: k8 u1 [9 o- V: A mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
q& A# R/ x: q8 e; U mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) Q3 O% A9 l( u6 v& F
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
% w% p* A( E3 |+ Z, N mcasp->regs->RINTCTL = 0x00000000; // Not used) [" W& S- R: Z+ B* t7 e1 B, p3 |
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. u# [+ _7 h, j7 q
, m3 g( F; e: G1 R. \% k* f( q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% u& G1 m& O% @9 x
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 k3 Z: o( s+ g6 U0 o! d mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 w8 w: y3 ], [0 l" {1 J: v. }' ]
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& J3 Y5 v4 D) N9 n mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
1 D$ \* k r. {/ k! K" \ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
]# W# t* R6 ` mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. g( D) c3 u% h mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# m; p; _# E- ~ K3 R
3 x, z9 u( g) p6 O4 a- \ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) D$ Q% N3 E/ x0 @
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) ]) x6 k" @2 t3 D7 b7 D9 f+ a
mcasp->regs->PFUNC = 0; // All MCASPs+ s* Y- w, w/ a2 c
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 G/ ^( U* H8 N9 z7 J
! L2 Y2 Y/ T0 C. b9 M( `
mcasp->regs->DITCTL = 0x00000000; // Not used
. l# ~+ K7 u. B7 Y7 o% T; o mcasp->regs->DLBCTL = 0x00000000; // Not used" ~& M/ I$ I+ ]0 D) t* q
mcasp->regs->AMUTE = 0x00000000; // Not used
" H0 b I. j* P+ F& i" y
1 D+ a! i% W! L! y' _8 P/* Starting sections of the McASP*/
4 E9 [$ H/ v- A- G' t/ X mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 J' t" T/ h/ Y% e& P( i+ ^! f+ f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " s( g7 ?0 }' y- Z# s
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & i, l0 d, S S: Y% b. Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); D& U7 D, c* Z$ @/ Q" D( g5 z
4 l/ q2 A4 E; I: F- k3 G mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 k( u4 l E" i! u1 G0 B& J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 [8 D8 K6 X6 l" X* W" P* A% V) `
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 C' t# b! Z! h0 l1 q7 I# i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
v8 c6 i* I. P, ?) c* u3 T+ t" Q& {/ `+ l3 g% P ~; B
mcasp->regs->XSTAT = 0x0000ffff;
9 ], ~8 b4 i& N5 Y+ a( _ mcasp->regs->RSTAT = 0x0000ffff; 2 n0 p; F9 m/ k, G
( Q' A" A, O1 A, e3 Z4 K
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' r; ^' s4 p k. w# i* x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" X+ o! }0 p8 P0 v5 o. L
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ k4 ~& A8 E; ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' n0 P8 n) S9 t7 L
, g) ~5 I: N6 G5 g /* Write a 0, so that no underrun occurs after releasing the state machine */0 n3 a9 d9 g/ ~9 o) V1 s
mcasp->regs->XBUF5 = 0;
) ?! j, Y8 z0 K mcasp->regs->RBUF0 = 0;
9 ^* m0 w2 y4 A% k, f2 S$ S4 I% S( h3 \* D" c4 i
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 v1 K% _/ E6 M/ u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" ?0 K1 C8 W6 w+ G mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : v- f) e% |3 i, C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 M9 @ y( b u9 B, i/ ]0 y- x( n
7 E' _- k+ F9 G0 a* r% A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* k' M+ B, p: L3 K- m+ b; H: b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. J+ E( Y6 e' O0 _- v; J2 u
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & D6 |* V4 d6 q5 \% o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# W7 F6 {8 p h' C' O
) G0 y. Y, c1 y. `1 X; N4 |% H: k CSR = 0x0000;9 v+ {3 a# `$ k; G; s) `
INTC_INTMUX1 = 0x3d;
6 E8 D* P5 j* A, H2 ?% M- x ISTP = (unsigned int)vectors;* i) M( T; e; O3 p9 b3 Q" \2 }
ICR = 0xFFF0;
7 l6 d5 z2 b$ z% P/ ^" K, x+ I1 o IER |= 0x12;
& `& B$ V) g, P! _4 O: z, y7 ~( ? CSR |= 0x01; + ^; Y: s: ~( q' M2 F1 `
6 ]& S; H* N7 f- y+ V' a1 ~+ Z+ b8 }9 a/ A' `
* i3 x3 D* h- d9 j
还有就是两个输入输出函数:
) k( V: R2 l5 n$ _, V% fvoid output_sample(Int32 out_data)
' U% l9 d! F- T4 t. y) k4 ~) `{
|2 H$ h. ?% D AIC31_data.uint = out_data; : L* g8 @5 V$ h% k2 z. B; e6 }
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 Y0 p% i1 Z4 U3 w& v, }; R' [
}
4 F; }2 x3 X. \% L4 c- f# e9 u
2 r+ c' n% T' r7 O4 @3 pInt32 input_sample(void)* u- T& q( g1 f) I
{ 5 }3 y/ f' C& i; p0 |: c8 O. B- _
AIC31_data.uint = MCASP1_RBUF0_32BIT;( V; t5 o! y$ q/ z5 U# D* R% C
return (AIC31_data.uint);
0 l+ t) C: f {# g m% L' D}$ R& e `& W l3 ? L0 P) _
5 z `0 G7 |0 R/ y: Q h, n |
|