|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ X$ k4 X0 d _$ G2 l+ Rmain文件:7 T6 J. w- r Q1 d+ G
interrupt void interrupt4(void) - e& b& j& }7 p# \1 I, {' r* u" C
{1 h; C' f* f0 G- ~3 ?$ G
Uint32 sample;3 {, w K0 x# B1 o% s. s
1 p, `1 ^, e1 L. I/ w1 b+ [& ` sample = input_sample(); // read L + R samples from ADC
; b$ t5 j0 M6 H+ L. u; q: k output_sample(sample); // write L + R samples to DAC 4 z8 n& n: a/ v7 \
return;
, T8 M/ F( E( x& E( j# Q, ]0 {* A}, T9 } N. D3 r( i5 T
* B9 V- S) e% T6 e* ^. E
int main( void ). u2 ]4 T# l; d# s
{
2 A, N. L7 s0 h3 m7 Q) h
$ b' V! A+ t$ q6 B* {# ?7 d /* Initialize BSL */
. ?9 n2 r$ X+ f- V2 V# Q! y EVMC6747_init( );. a! B$ `9 K+ L, I
/* Call evmc6747_intr function */
* y F3 Q6 \, P aic3106_init( );# V7 {, N7 u. a
while(1);$ ?3 J' w) y/ i" x! b A, O
}- B! w! t2 K1 z8 \
' z. ~, ~( C j& x1 s! g$ J1 I5 p
9 G5 v) H5 d2 g1 S, w- Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) |: F* p: b; d- A" N ^6 `: t7 K/* Initialize MCASP1 */0 e2 F8 a9 g% B5 t
mcasp = &MCASP_MODULE_1;
- T; f! z+ N4 Y f' Y9 k mcasp->regs->GBLCTL = 0; // Reset) O2 i8 ~- S3 | c* b
mcasp->regs->RGBLCTL = 0; // Reset RX
! d2 u. K; R0 P+ Z4 a! s( a+ ]' M$ S mcasp->regs->XGBLCTL = 0; // Reset TX
, u: b" S* m" I' ^ mcasp->regs->PWRDEMU = 1; // Free-running
! h2 W9 y! H a5 R // configure McASP0 receive registers
, Y! u% m1 E2 Q2 f mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. u2 l+ c: j9 \$ K' A7 A
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ j2 R1 ^! ]2 B5 n& L mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# p! F% e- u+ d
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( t J j8 R( |4 s J7 a mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 c9 k) g6 k% v5 D mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 n5 `! {) a+ C mcasp->regs->RINTCTL = 0x00000000; // Not used7 E# P9 Q8 ^9 K4 k5 h9 }
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. j4 o( p7 Q! i ?, Z! W, ?5 o
6 `$ n" B0 M# m4 [# w mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, R5 ?, ?; S: v" E
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- z7 A) _) V1 n( \3 Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) P7 e# ]* ~! M; D& j3 r6 ?2 C$ o
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& a6 {- ]# ]% {3 _; V% N7 s mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. n; k$ U1 w/ V& W% s
mcasp->regs->XTDM = 0x00000003; // Slots 0,11 t; W& r0 C, @, W: e
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
7 g6 V% o3 V5 i. r1 K# Q mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 c) j/ Y; v8 O ~# Z3 q/ D
% o" ~1 Q4 ]7 o' t( T mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 X7 @( B6 ~! L6 ]5 J3 i' J mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* u& y2 _6 L$ c# q' A2 L+ y mcasp->regs->PFUNC = 0; // All MCASPs
# V% T H2 [9 C$ v( P2 d* a5 G mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! ` P2 Y; G4 [* X' P4 @5 T) q+ q! F
mcasp->regs->DITCTL = 0x00000000; // Not used. c' {7 U o l3 M* R# U' ^) d% s S) D5 y. L
mcasp->regs->DLBCTL = 0x00000000; // Not used/ B# }, P) U! f' {
mcasp->regs->AMUTE = 0x00000000; // Not used" ~4 m r( R6 b9 u! K ~
' @0 B' E) Z1 [5 o/* Starting sections of the McASP*/
" g, Z0 f) W/ B0 L" X! G mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & p* F! e- J( n4 I) M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 b: E+ N, P/ O9 I' ~& I mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 q" L* k, M2 A! ~: q! B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% D* N) ~. X) a# H# M
& u4 `, C- n4 i& W5 ?& ?1 V# x mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- X; q9 K0 {$ h2 M7 n$ _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% k3 S" R0 U0 Z
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% \4 V3 j+ ^* k* P3 H, b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 ?# Q X5 {; D% X" ^3 M
* Z6 n' ~6 z5 m% p( v
mcasp->regs->XSTAT = 0x0000ffff; 9 S6 g, m% m8 Q
mcasp->regs->RSTAT = 0x0000ffff; : A2 T& z9 W) D
( h4 |. H" U8 D, k% H. Z0 J* m5 Q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 N" @1 O3 t$ B* O0 S! v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. m' I6 l: z4 O. F2 D8 k. ^ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 l1 f P; ~( D6 E9 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% J5 c8 @% S# ?) Z" g' C% K1 h2 e# n! n( E t( t* x
/* Write a 0, so that no underrun occurs after releasing the state machine */
- P$ _1 ?; J1 c( V mcasp->regs->XBUF5 = 0;. b/ @! @( A( v( d. M9 k
mcasp->regs->RBUF0 = 0;1 b, a0 {; e7 p, j) U
9 z' F( p$ J9 N4 ?. n mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 r1 G: @4 Y S1 L5 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 @' d9 O' L* j" A. u3 @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; z0 u$ o& F5 c' e0 {% c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ r5 m) P1 D$ U. x
* \0 ` C! ]6 O: N" Z) L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
d5 d% K( s* B# I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, c+ G S4 o r0 C- C3 x mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; Q- \* R: C' u$ f( U9 x/ Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) g, P- s2 D3 w: L
) K5 _' l3 |: {: K0 A: F CSR = 0x0000;
0 g5 W. V+ `, t/ T. P, M# E* z1 F INTC_INTMUX1 = 0x3d;
9 Q) Y% q* w+ K$ ` ISTP = (unsigned int)vectors;8 c$ ]5 ?7 F! u& V& n% p( Y" k
ICR = 0xFFF0;
t4 `/ s! o8 o% o IER |= 0x12;
1 @( d) k, Z c' k" R$ q4 y CSR |= 0x01; ) v/ p4 o1 ^9 l2 N0 ?
1 U/ F5 {9 i4 e; {; e& ?
# ~ C( m; M. \5 e$ [7 E6 _5 H- \
还有就是两个输入输出函数:
6 o* U' \. p, y" Ivoid output_sample(Int32 out_data)9 ], X E3 ]3 D$ W+ i
{& f9 M5 J1 S/ T$ N/ l; K
AIC31_data.uint = out_data; 3 M) u7 K4 F r9 c/ A) r
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 K2 R3 m2 |/ `+ P; s
}2 S# P6 U7 I( _) k: N0 u2 A J5 v* C
1 u n( m3 n" ?8 `/ z( TInt32 input_sample(void)
2 x0 i$ S m' r6 @& B- b/ i{
1 v4 r; U, b! l7 G6 ]( e AIC31_data.uint = MCASP1_RBUF0_32BIT;( m2 f" F; x& F6 t* L# b
return (AIC31_data.uint);
8 j: h' ^: c4 A}! V) x+ f& g$ C1 H4 A5 h
y8 L1 g+ }5 \* J3 N
|
|