|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 Y. N- T% S& lmain文件: {# `( w: }8 x! I
interrupt void interrupt4(void) 3 D; y$ s5 r7 u) [- l
{
3 L) J& S- q% @ Uint32 sample;
2 I6 e7 g9 z. D6 u5 p% P8 G7 ]2 ]: Q9 B0 f
sample = input_sample(); // read L + R samples from ADC+ [! ~! `( M8 m+ U7 b
output_sample(sample); // write L + R samples to DAC ! ^" t( Q- l/ a: Y, J- H$ M }
return;
8 d: T- K3 P- B, h. g}9 u- G) E+ y* s) h
7 C* a0 z6 m- c Gint main( void )# w! r3 n) Q: s5 l+ _
{
0 I, l/ y1 H& j0 z/ k& h7 `8 p9 E" p2 O2 D$ n3 p7 u$ h
/* Initialize BSL */. H. ~$ C8 h* e1 T
EVMC6747_init( );
# D, J# j+ c; l5 @2 g) `4 i+ P /* Call evmc6747_intr function */
* i9 m* c' X9 r9 B, }6 i aic3106_init( );+ c# [. x4 P3 B" I0 J' b
while(1);
1 L. w7 x3 |" e+ x; C3 K}' d7 B9 r0 R) Z+ c |5 r- I
* x/ j. q4 }2 y6 A, {' R! `# S; F) ?* ?5 T: ?% i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 s; T! ]1 E) I/ I" a5 R5 [1 q# B
/* Initialize MCASP1 */
* S# J8 N( E( I, T7 T9 Z mcasp = &MCASP_MODULE_1;# d1 `3 {# B' `, x2 T7 f
mcasp->regs->GBLCTL = 0; // Reset, N( S" \9 c% o, H/ b. H. c
mcasp->regs->RGBLCTL = 0; // Reset RX
1 h* D* F8 N0 P8 Q0 ?* W, h mcasp->regs->XGBLCTL = 0; // Reset TX! Z* Z! Q$ O. a# A" r
mcasp->regs->PWRDEMU = 1; // Free-running" S8 v+ R5 V' c8 }! z2 R6 {
// configure McASP0 receive registers
' B: G( s+ u, {3 a: l mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( e& ]$ U- t$ x$ Z( D6 C mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; S/ D) [) a8 x6 c5 J! J7 ~. M/ V3 t0 Y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; }1 C# Q/ P5 t
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( W; y, {1 u; T% y8 C9 X( c
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 Y4 H7 t, r% g+ M' W mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; M8 a2 q- Z7 L6 ~) `, v' j3 C mcasp->regs->RINTCTL = 0x00000000; // Not used
6 C3 c" I2 D" M* V6 u mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% N6 Q' f% ? Q2 v4 ?
5 L$ y8 h1 ]! |, `$ O3 n& ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* C$ R2 U( U9 ^+ S3 A2 u b; { mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; V2 k; L* F. i! | _ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 s. R9 D: d! U* d6 ?5 j! t
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) L" B& l2 b" h mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' w2 F, E; D M/ G* {% H% v mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" i. a8 s3 n8 l. G5 h4 d0 H; }9 A4 x mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
0 u! A8 |; [4 E' N: ?. G( H6 S mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# @' {3 e* ~% f3 _7 s3 R! F6 p
/ O$ p" W+ }- J/ |- x9 M5 O1 ] mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
H7 r1 H: }5 w) Q2 [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT+ Y+ B/ P8 h" e! ~8 H" g2 R% m k* F
mcasp->regs->PFUNC = 0; // All MCASPs
1 s4 U/ M3 v! A& v8 } z+ z6 o, Z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. j, p$ f( a+ ]5 o; K! w4 \& ~. j
mcasp->regs->DITCTL = 0x00000000; // Not used
! ?' l8 r7 s( s S mcasp->regs->DLBCTL = 0x00000000; // Not used3 [- n2 p& J; Q$ I% {! n/ B1 p
mcasp->regs->AMUTE = 0x00000000; // Not used
8 P0 W% v! A6 F6 B6 E3 l& p: @9 C- N
/* Starting sections of the McASP*/3 f5 F+ T# j) B( E1 A4 w
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 U( R- P( p0 A8 f+ U. f* n5 w2 v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
q: J; f% T4 U7 U) ~8 H mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& a0 L3 v* y. l" I8 x- J7 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 q' n8 i+ u+ [5 `& c( L
4 t( E5 |) U1 s S& W
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 {9 g) E# ~8 ~- R) V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% F+ n$ p6 ?3 a$ `3 s
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# H( C0 ^2 h- q4 D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 `7 Q9 U4 i4 h2 G! O2 u! X* Z; y# M3 j o
mcasp->regs->XSTAT = 0x0000ffff;
; ?7 ~: i9 |( K mcasp->regs->RSTAT = 0x0000ffff;
' b! W' M# K: L: U6 i
- g% j5 P, j3 K0 ` mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 x7 n* U0 g& N' R5 l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 j. i7 ~5 q2 z. h6 t mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) x% x) [9 J1 F8 G/ ?. S5 Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 Z2 P% {3 \* ~) d! }4 z0 v1 a$ v$ ?* m( l0 {2 V& ]
/* Write a 0, so that no underrun occurs after releasing the state machine */6 M `( Q2 ?/ i2 K4 O6 X4 M
mcasp->regs->XBUF5 = 0;/ V* z7 O, {9 g0 N& p8 C
mcasp->regs->RBUF0 = 0;% C1 v7 v0 E% e( [- {; A* w+ j
! `' O" Z1 T3 G% x7 T
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 {/ G. `$ c' N* |$ d% Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ a+ `& p# w* D* M8 w1 s& e2 w
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 ^5 W9 n! W( }! c1 w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ \. `7 s" f/ L' n- y( w% w
( B$ ?# L3 g) O( M/ ~7 Q* a# e mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 x# E8 n! L! C* N8 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 J4 e# h4 F5 c+ L* ? mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- p3 H- g" g) y( J7 w& q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ A' C, E) J* x: L1 w M1 [ a
5 q" d9 K. I& ^ CSR = 0x0000;
/ ], _# t9 j2 j4 @; J INTC_INTMUX1 = 0x3d;
5 Y& C" ^9 C9 N' _ m" p7 i& Q4 t ISTP = (unsigned int)vectors;2 G2 z' l i3 b. ?: |
ICR = 0xFFF0; u* }2 e4 V, f- w
IER |= 0x12;
8 F2 Z: ~# {9 u0 m7 C- H$ m CSR |= 0x01; # P8 k* t# r. y9 }! ^5 W6 J7 S9 o
' b+ p& T; l9 X4 E7 ]) D% B
# R, d- F% {5 M# n- e$ R- o1 b) Z: E) i' K
还有就是两个输入输出函数:
: Q# }' \! r! K3 O5 U5 F: T% cvoid output_sample(Int32 out_data)8 u0 J. B6 V# G1 c# `, k& Y( g b
{
2 p" d( W; x9 @1 X8 a AIC31_data.uint = out_data;
8 i! Z5 A5 j" ]' W MCASP1_XBUF5_32BIT = AIC31_data.uint;) [' |$ }1 @) B4 v
}6 p" n' g8 e5 b) D4 o; x/ j
/ q: R; _* O$ K9 `' L
Int32 input_sample(void)4 m5 u$ ~# m! `1 V Q$ k
{ # m" |5 ^; g7 X8 |/ l" h
AIC31_data.uint = MCASP1_RBUF0_32BIT;; f0 j, k" |- k3 V1 f
return (AIC31_data.uint);; O6 u, b3 k: G0 ^" q
}7 ^) s) R( f. f3 f. L1 X
1 O- T. b2 N8 z* t8 k; k3 ~1 O$ k |
|