|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 Q2 A; R7 i/ @5 k! o7 fmain文件:
( b& \2 N/ A% |* L5 ^% C) \interrupt void interrupt4(void) ( V7 L7 [! c2 P+ n% q* D$ H1 I7 U' _# f& ?
{
( v$ I' C& h" A) J# w* [ Uint32 sample;
+ C8 p4 U' W) D5 y/ L l, V# ?+ K4 {9 d9 K9 k9 ]1 ^
sample = input_sample(); // read L + R samples from ADC
& |, p) h& c" m+ ~ output_sample(sample); // write L + R samples to DAC
& I# d) ~1 f0 E+ I. I return;
2 F, o4 X6 J0 g5 [" Z6 ]! f" |}# K# @- e' z4 Y0 }5 ^. O) c _
7 ?; a; O% {) v O; Q* V( Q
int main( void )
) o3 W8 ]1 @6 }{, U. ~4 @5 B" V/ s
+ i6 W1 D6 K, ]( Q
/* Initialize BSL */( [" @) E- O4 s% d
EVMC6747_init( );
5 I" d2 i5 \/ J4 b% M5 F0 h /* Call evmc6747_intr function */0 U2 y+ a# I: {5 B8 u
aic3106_init( );
9 Z1 |2 y3 t j4 l+ Q- a while(1);
3 ^0 \: z8 \. F}- q- h# T+ l7 A4 V* @; M# }' ?
% U0 \* z9 J ?3 }3 ~9 J2 R& Z7 D% `
( e# Z& y0 v2 f; \6 q# Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) D/ H0 ^# r2 m: O7 Z* W
/* Initialize MCASP1 */
; V: e/ C% c. G+ u; | mcasp = &MCASP_MODULE_1;
- F9 B9 O7 R. d* @% O mcasp->regs->GBLCTL = 0; // Reset
, r; @ n3 v( a; U mcasp->regs->RGBLCTL = 0; // Reset RX0 | X B& Y; o4 q3 Y
mcasp->regs->XGBLCTL = 0; // Reset TX
1 q( M! v i( I mcasp->regs->PWRDEMU = 1; // Free-running& ]* T% r9 C! m# Z5 z* B
// configure McASP0 receive registers
, N9 C3 a% O/ X4 h7 A mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used1 W& h1 g" o* S1 \! ?! b4 M
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 e% D+ ^* Q5 _4 z$ N mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 F: e$ W2 F( y& n mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 W5 d ]2 A/ N4 s( `7 g5 j mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 B: h; k: p0 \& p3 q* }: p( B! t mcasp->regs->RTDM = 0x00000003; // Slots 0,1
b* {$ ^- d* O' d4 k |0 T9 @ mcasp->regs->RINTCTL = 0x00000000; // Not used
: U1 @: e) f0 m) ] mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 A- w: n- b' T" ` ?, V
: w- i% \( }3 a$ `* x mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) o j! T# ~ f9 h mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 F- g* z" w! ] V( D mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, U5 K, U3 C( G; d
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. b7 [3 |. R* q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; d5 q& E3 B& f1 v mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 [# g9 I5 Z2 N0 B$ M% m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( O, y2 `: T7 a4 N( T1 C& a1 c/ ^ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 W+ {8 {; W* c4 l
( Y$ B% @3 M- P0 Q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN$ i+ Q5 y1 R8 |$ c: \9 N: w% B# `
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 V! z' c4 ]9 g( ]0 m x
mcasp->regs->PFUNC = 0; // All MCASPs
$ k3 A) `9 \# t8 q+ C" ?( w P mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( [; X, W1 g! E6 P
( A' `- V+ `' z, e5 Q3 [' E* S mcasp->regs->DITCTL = 0x00000000; // Not used* @( z( C W7 f# i1 o$ N
mcasp->regs->DLBCTL = 0x00000000; // Not used
" E3 U7 v8 F' h! k. |& W2 X mcasp->regs->AMUTE = 0x00000000; // Not used/ \( m, ^/ v" ^
j3 {( L" S$ }( R& {4 x9 [
/* Starting sections of the McASP*/
1 \3 I, {+ N7 L8 c9 s5 q2 o- ~( V mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 y6 l- ~, H- q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
% B/ D4 Q6 v5 Z7 I3 [) a! @7 C mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 R- m V! c0 P" d$ T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 i4 V9 w) @0 J
4 d$ H. l) t; f! i) Y; b: L, C- \ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 ~) z4 R3 l; ^8 _- X6 o) W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 `7 v7 j7 q8 X+ }
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " V5 Y [4 g5 g( n4 j( Z! P1 ~# W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; }9 f- P! |1 J1 t) C3 z3 [, x% b+ }" ~: x
mcasp->regs->XSTAT = 0x0000ffff; ( m- a: E3 E5 }) _; q+ ?+ R
mcasp->regs->RSTAT = 0x0000ffff;
, a2 S3 z) t$ t2 V+ u! z1 s; c6 ?! n. t
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- i) o$ i9 j2 n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; I/ }( o* J3 T mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, X t1 P4 |( Q5 }) j& K3 p; V3 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 t4 X2 @" X. p! u! q8 A
0 R7 l6 m9 Z' F: w$ J- e4 v w* Y
/* Write a 0, so that no underrun occurs after releasing the state machine */
% z$ @" Z8 u. \) @ mcasp->regs->XBUF5 = 0;
5 p$ P9 s$ Q; [! u1 p7 R6 k mcasp->regs->RBUF0 = 0;: M: O( a) K* h- J2 r& g% q
6 q( w+ }9 V; a' p# W
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) Y# [( d8 W" @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" V- d7 ~% c; D0 T' h mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & K7 y/ D1 {$ I+ ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
l: n9 G$ ?, [4 m, J8 @
% O9 Y3 T+ |& A' o1 B2 q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 n: J) h% v8 A4 {" C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 a8 ?" G: h! b6 I0 s
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' n( f6 H3 S8 ]# b' ~5 b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 A5 s$ x, P& [9 W
8 |& U( V7 ^! Q* d CSR = 0x0000;
4 [7 `7 D' Q* j( M) w INTC_INTMUX1 = 0x3d;
# n$ ^. s: Z5 [7 M& E7 a; V ISTP = (unsigned int)vectors;1 C6 Y/ y( z) p/ v1 {* Y
ICR = 0xFFF0;
' c: ~3 k* v4 G IER |= 0x12; % ~3 z: `/ S. n8 J' V* a# \$ O
CSR |= 0x01; ) Q1 ^6 [; g; S: z" B; p# ?
) \! h4 n8 L1 }* r& q% ~0 ?
9 |( X Y- Y" ?& Y& H7 W: W6 x7 G3 [% ?) [0 F7 p9 w
还有就是两个输入输出函数:( Z' P; ?4 r7 |0 e' L' P+ d
void output_sample(Int32 out_data)
* ^9 C% v4 m" P7 A$ ]{
% k K8 d, M( x) T' Q. a AIC31_data.uint = out_data;
- h k( F$ p. N! ?. J, i' F; D# R MCASP1_XBUF5_32BIT = AIC31_data.uint;+ t- X% y0 i4 p% q2 a) S" y: J% f1 e
}! I1 a. E2 x1 ^$ J0 Y3 P }' m( \( |
Q/ v- h. L! B0 f4 K
Int32 input_sample(void)
" U1 m6 W, E* u+ C4 S# Y; ^{ - D! \$ w; Y0 n, u
AIC31_data.uint = MCASP1_RBUF0_32BIT;# [. s. Y3 J# }; d6 T) k" S( `) y
return (AIC31_data.uint);3 Z; p- |- h. P6 a( P1 {* ^( H
}
8 r. W3 J! [( F2 a4 }3 b2 o) P9 u+ U( B$ p; G
|
|