|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: ~6 e) x% J9 N9 q8 f% {9 v9 ]- H
main文件:
& {2 x) ~1 }% C Tinterrupt void interrupt4(void)
& P% K9 N/ e/ E2 F# `{: P- F1 f4 ]+ C" Y& x
Uint32 sample;
+ D$ m2 f7 |! W& z9 ~$ S. m* ?% n/ q6 s3 X
sample = input_sample(); // read L + R samples from ADC) `, \, _4 ?5 D4 I/ k
output_sample(sample); // write L + R samples to DAC . n E8 b* v3 ~: A, w3 n3 i
return;
: ]: |; f9 E& p3 v$ J1 |, O}7 t" R. ]0 l$ n; B- m/ K# S
6 B) _9 n$ p3 Q' ?2 `
int main( void ), }( v4 \9 }2 ~ E$ g2 o Q
{% B- }: E. g5 A8 K' S4 w7 `" O1 d
# Y$ @+ M+ L8 F" N; p
/* Initialize BSL */
2 {6 l1 K$ ?9 y5 R EVMC6747_init( );! Z# c& A+ y# U" Y0 |' @! L X
/* Call evmc6747_intr function */
" s. ?1 C# O! M U2 d) N" W) m! @ aic3106_init( );5 A6 w9 q3 h7 l
while(1);
4 P: j* q7 l0 P7 |1 n, D, t}! f9 K/ y: p* M7 A+ J! J/ f ?" K
& t% ]( [2 ^6 U+ o7 i! D6 V
# C' J' D7 f: E& Z2 j; y: c4 a
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# F$ b" P8 z9 ~# O/* Initialize MCASP1 */3 D9 @0 {# i( [% F2 P5 |" u/ \
mcasp = &MCASP_MODULE_1;) L2 u, |9 @/ N3 e3 m
mcasp->regs->GBLCTL = 0; // Reset
! B0 ^% p! [) ^8 E1 m0 S mcasp->regs->RGBLCTL = 0; // Reset RX2 l8 m! d3 K/ r$ {, \8 ~
mcasp->regs->XGBLCTL = 0; // Reset TX
5 w' J1 g8 R# `; q mcasp->regs->PWRDEMU = 1; // Free-running: j: M, \+ `# }* h$ u s8 f# ^
// configure McASP0 receive registers: [5 v- H9 Z9 C: P, M
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 ]. u( Y% U+ A) w mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, j1 ]- V0 X _( s mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- r" f( W. A. d5 h8 ^
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ X7 ^7 r5 H% d5 W( i8 v
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- r. c9 t5 S& e% y: e mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 l% h, V5 P6 ^) j2 v9 o4 o# A mcasp->regs->RINTCTL = 0x00000000; // Not used5 P. Z/ i+ ~& Q. }4 l4 r
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- {4 J: v# i3 [- Y3 W
4 G. n) ]( w2 z' t! N. } mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. X7 ]: v. W5 H, W9 U9 q! N1 B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" d% f/ E: B0 `( `5 u) [ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 u& ^. R& |) ^3 Y9 b- L" u# p" M
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" F: G/ h9 `/ ?4 q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: a) J, B4 [# I* R mcasp->regs->XTDM = 0x00000003; // Slots 0,1; C# I V5 K# e
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) Y7 h. v! i5 V3 B8 q# @' }* [1 w
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ O2 B. z) |& m; a, C; e1 f
r8 B3 m0 }! d& Y3 z mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ y# k. z$ ?; _5 x mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 C7 f. P' ~& Y( @
mcasp->regs->PFUNC = 0; // All MCASPs. K! y s5 D8 d/ Q. O, ~
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" G' o8 d/ @. N' a: T
7 Y' ^6 _7 g9 }/ f! G- d/ m
mcasp->regs->DITCTL = 0x00000000; // Not used
! G C. `: {8 y mcasp->regs->DLBCTL = 0x00000000; // Not used
& b# k6 w1 q. e7 O5 a2 m: Y mcasp->regs->AMUTE = 0x00000000; // Not used: X- j0 S4 P. K4 D3 a
& J3 _/ _/ {+ }0 A6 R6 L3 L
/* Starting sections of the McASP*/
$ m3 W3 G% P5 H+ i! v2 I mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 g8 `2 r/ y ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ) V4 C, b% C; A1 S" m' u
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 U9 j2 G/ v2 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ V$ e' C" z' @( C: b
; a5 x( I& n& o6 ~7 ?" y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 l. E- K7 M' s, m- y1 O; { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 [+ ~! _' M4 L: h" K8 @' ~ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 i2 K1 {; ]6 F% _' Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% d9 \% I* Z# f9 W" G% K
# J; [0 V5 ^; ]0 m. w: [" V9 s0 m mcasp->regs->XSTAT = 0x0000ffff;
6 b% b. ^6 I2 ?% v mcasp->regs->RSTAT = 0x0000ffff;
/ @( Y& d7 t9 {- g( O8 m( _. Z4 }! `
) S7 Z" |& W1 d8 J1 o- P mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 ?3 W; C7 ?+ h( u6 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, L5 n+ r6 n5 `/ E* ^
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , k/ J' c6 S3 \3 J4 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 W! v) Q% W. W/ M$ }3 L! ^5 U! A: ]2 _, N% M" e$ x: w
/* Write a 0, so that no underrun occurs after releasing the state machine */% x3 p5 `3 ~) K% G
mcasp->regs->XBUF5 = 0;3 [) G; C" i0 _: I6 U% N! T" Q
mcasp->regs->RBUF0 = 0;" y6 }6 t# ` d( Q/ o" ^+ L: o8 a
; h, t$ S7 J6 X0 y7 `" a- q1 l mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 t3 y. y d4 O4 P4 |8 d( y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) H2 ]5 x, Y: a c, X+ s+ V mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' a! R/ ]" K' M: v/ N* q! P0 J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 K+ B$ S0 P$ F% x
9 K$ o6 \' \! L9 G mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & c. T5 |! q# d: g1 @9 U) _3 z: @. L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 u5 t& R! z& V& f* {: a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : E2 x- @, H1 Y1 A$ V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 W* ]" W5 \: P2 V7 f/ U _
! `0 A0 b! j; G. G CSR = 0x0000;; ^0 S2 b1 u0 m1 H7 o$ H
INTC_INTMUX1 = 0x3d;. i |) M+ |, }. o' B( P4 O
ISTP = (unsigned int)vectors;
r( m7 i3 T# s# Q" G5 f ICR = 0xFFF0; 9 Y. W" H5 y1 R% q8 Q. A
IER |= 0x12; 8 m( m a! Y& A! E
CSR |= 0x01; 3 h' A6 I6 Z# Y) H4 I
9 G( n9 M1 I7 D( I$ L
! f" m8 q: J& K5 a, K% e" G, W- w
% U& \3 @6 a& c) d& s
还有就是两个输入输出函数:- i9 ^9 D9 C+ r) a8 K
void output_sample(Int32 out_data)0 G+ T+ p8 C3 u, |) }
{3 Z8 T7 }# Y9 q$ v8 G$ T2 n6 l
AIC31_data.uint = out_data; S9 f+ P) c% }9 h8 N
MCASP1_XBUF5_32BIT = AIC31_data.uint;: J2 J* H+ T1 u9 E/ X5 T
}" E" V" H. f r4 M# Y, G* `& S; S
9 w7 c$ d; B1 S6 Z9 O, jInt32 input_sample(void)
/ Z/ S$ o9 T4 j, {% @- D{ - b$ w2 d1 {7 T4 b' L+ X: u
AIC31_data.uint = MCASP1_RBUF0_32BIT;
: d8 X3 e' I, e4 A2 K7 J return (AIC31_data.uint);
, g' I6 n6 y1 @, Q/ m}% v- m/ v. b$ D! P, n V& [+ u
9 \: k7 ^+ @; _0 M& X
|
|