|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ P, k. k6 o, E9 K, _
main文件:* P9 B+ u3 Q0 M( t. I" [# r
interrupt void interrupt4(void)
8 f( t- F1 j7 x, Z, x{
6 ?, j$ q- U+ c8 g/ J, I x) ?, | Uint32 sample;) }& \; K" e0 r- H
; w* k5 u l% o sample = input_sample(); // read L + R samples from ADC W5 i9 d" f) a2 s8 N. H* ]
output_sample(sample); // write L + R samples to DAC
$ Q: m, T) b B! O9 p% l7 d/ e return;* W& t. g( u# f, q' o2 b; T" x
}3 k% s) U; c1 D4 O7 u; F
( J* K H! e) A6 O$ dint main( void )
4 O! F! t7 `. s b{4 o1 `2 A5 P$ @' X! x5 T
6 |/ _& H. v2 Y; A. D7 c# V' X
/* Initialize BSL */5 s# b& S# y3 V, F8 D
EVMC6747_init( );
( A( F& u: J* X' F/ ` /* Call evmc6747_intr function */
0 W# q6 x" R# v aic3106_init( );, t. O8 h z' A, Y
while(1);5 z; Q. s2 P- v- N% J
}
0 Q. u ?! x. x, r3 N; v
+ P: N" k- x8 m1 _1 ?
6 Z3 ~+ d$ \6 i& ?3 D% X/ baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 n% C3 Y0 F: n; A4 H- T) |/* Initialize MCASP1 */* T5 Q/ B1 M" m `% ^5 g0 _( ]
mcasp = &MCASP_MODULE_1;! |8 y9 J$ f$ u7 m% |# Y/ X7 c
mcasp->regs->GBLCTL = 0; // Reset! J! U& y8 e2 n
mcasp->regs->RGBLCTL = 0; // Reset RX
' `0 Y: X5 p( ]" y mcasp->regs->XGBLCTL = 0; // Reset TX, B0 J% y; ?7 \/ ]( U! ?5 `0 e# g0 L
mcasp->regs->PWRDEMU = 1; // Free-running) R2 a: h' w4 u* j8 ]5 Q* D
// configure McASP0 receive registers- Y% K* Y% D/ H7 p8 ^0 i! l( z5 \- B
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; E+ X0 B) {3 }9 o# ~ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; t/ V& H& V- L( k3 ]& e' D/ w% Z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 w' |5 p. c: v- u, C- T mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* { t( X1 C# W mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! x9 {' |3 x7 }# e! q P+ K
mcasp->regs->RTDM = 0x00000003; // Slots 0,18 ?3 S) s5 T u) c0 [8 K1 M! M( S
mcasp->regs->RINTCTL = 0x00000000; // Not used9 ~5 f. @; E. ~' Q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 N& E) ]2 d6 c1 b
' s4 _" ^$ \! C6 }0 Q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& G$ v2 L# W) ]/ g+ l4 ] mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 @, n2 W4 B; B, q( _7 ?' e
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) w) a& K- V& [+ F8 `# R3 c
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 G; ~. d5 P" x9 X; u' b: d8 A F mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 o! ` o5 t6 u+ c8 s0 {7 X6 L4 j5 v8 X mcasp->regs->XTDM = 0x00000003; // Slots 0,1( a' B# U4 Z9 {
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 n; f2 p5 W* X
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 o. J; C3 r6 H
! n% V6 ^5 `: Y% g& }+ r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 W F5 k" G4 L6 U# }& ]8 i mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( I# w5 L; D+ R) N. g/ M
mcasp->regs->PFUNC = 0; // All MCASPs) r8 x( i7 S3 p+ \! r$ |$ T |
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 j3 ^: L; t8 n6 E
# y6 z0 g/ D" R/ B T
mcasp->regs->DITCTL = 0x00000000; // Not used$ J a/ h7 I9 l9 R7 @* j; S7 Z
mcasp->regs->DLBCTL = 0x00000000; // Not used: i3 B6 Z2 \% ]( w
mcasp->regs->AMUTE = 0x00000000; // Not used
! n6 i8 l) O: |0 d# _# Z+ X* a7 ^, E8 [' v* ]2 t% s3 e4 ], m
/* Starting sections of the McASP*/
6 |7 O: y7 b* n3 Z. ~+ A4 @* G mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- |- J1 e* \7 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 3 f0 E4 p+ g" \! b$ B3 N, y p
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 x0 j! s- O$ P* v5 C# M& e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 i' Q; G3 X1 }7 E6 m( \7 n7 w% u
2 S, T, q' c# ?3 s mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( j' ]8 O5 X) [, C( ?) f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# Y9 b4 I2 ^& o' G; n
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 G9 Q* \4 J5 C0 D* q2 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ y. U% W2 f+ n0 a1 \
4 B. w( O5 I5 u mcasp->regs->XSTAT = 0x0000ffff;
% n+ w9 K( r1 U' x( z mcasp->regs->RSTAT = 0x0000ffff; $ h, c [7 L" O9 }& x; {
$ q- e/ R8 |% q$ o3 Y6 G
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: U) W% ]: o, a; B# ?; N t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 L9 t. f7 }% l5 |
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# C, s3 o9 o4 E e7 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! |5 u: ?% N, O5 g+ |; d
6 ^8 |6 E) F; @) ]
/* Write a 0, so that no underrun occurs after releasing the state machine */1 M- t. h& {) F3 A" ~5 E: e
mcasp->regs->XBUF5 = 0;
7 S' I9 Y3 ]! K. b& E' L, G mcasp->regs->RBUF0 = 0;
! _* d# |8 T- y `! [$ V# a; G7 L* x; m
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ ]2 U1 J2 s$ {1 D* N7 K( ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' B. ]0 [3 @) M) B: F! Y | mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 l' L4 A" E0 e( c! ^ K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: O& B- X- u' |+ C$ h4 P
" K' G5 g8 n ?4 t
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) Z; Y0 U: f7 ?, `2 y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 N$ R( B" M& Q/ d9 t- W mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 K6 _& O( H( W2 u0 ?7 |" U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# O- I. K7 G( W. g
1 y* K7 O5 g0 C4 r! u; K CSR = 0x0000;" P# R7 K( z) R9 ^
INTC_INTMUX1 = 0x3d;
# H7 o Q# w4 X1 h1 J+ I ISTP = (unsigned int)vectors;+ u9 I5 Y* d8 [! b8 M9 ?: o) {
ICR = 0xFFF0;
. m0 m3 R9 S; b0 e' p2 b: e ? IER |= 0x12;
; V3 H8 W' f* R C CSR |= 0x01;
* @; e+ u0 t6 y! r6 Q% p+ ]5 u' M- Y2 z# \
+ P# t0 t4 ^9 u. d: d
8 s7 W( Z/ g2 |6 b还有就是两个输入输出函数:
$ a6 N: \7 A j I& Fvoid output_sample(Int32 out_data)8 O, Y& _; g1 r7 o8 [, N
{7 R1 W) V1 k4 T5 r/ v8 N1 M; m1 k3 |
AIC31_data.uint = out_data; . @ I$ _ f+ I6 P1 a
MCASP1_XBUF5_32BIT = AIC31_data.uint;
* J7 [/ s2 N2 X) C6 u}/ p! _" |1 V+ Q
+ D. ^( F b _, Q* I( K
Int32 input_sample(void)8 F5 a9 c$ T' F8 D
{ . T2 C0 U; O6 r% Y$ _
AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 F: P; v5 A9 }9 f* a1 G, U h return (AIC31_data.uint);& }5 s9 P9 h* O# U! A9 h/ m O
}
) G+ u8 n, p3 @7 `5 {3 e5 s0 n' b, B" x& U+ o5 l1 U: y$ f
|
|