|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 h8 B8 q5 l( E# c6 |" e" I. v
main文件:6 R r' ` [- w( R
interrupt void interrupt4(void) ! F- a& ]1 P. S
{# I2 d( U" q+ t
Uint32 sample;
+ V2 G+ s# B( p$ `7 X- x% L$ ]) M, r& p u& Q9 g0 ?
sample = input_sample(); // read L + R samples from ADC1 h; k( [* T# y( Z" t2 h$ V; r- `
output_sample(sample); // write L + R samples to DAC ' B, b/ K! M: [0 J% t/ }% ]
return;( C8 f- Z2 d' v
}- J$ W4 F, n. K* q0 @; x: k
* D" A" T" h8 \: C- fint main( void ): s) z; c @' F$ Z/ Y1 c- N/ E1 m
{2 D; _# F* m# `$ o7 s( a
0 a' f& M3 G3 \! Z( `; p /* Initialize BSL */
( M' n8 A4 k5 T2 a: Q- {9 B( p3 | EVMC6747_init( );
* s" t, u( N, S& `+ I /* Call evmc6747_intr function */( L# A+ S" A' w9 h* i: {
aic3106_init( );
; N) {1 e: i! s. W) p. S# [7 c% x ? while(1);
, J* ^3 H) d; b" d9 }/ [}
. C, j, h8 S+ K1 R/ }% [3 j/ P6 V) d3 D* z. O* A2 q
" {1 ^4 h; N- }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) @9 W; n* o( c% ?/* Initialize MCASP1 */- f. R- s& J& {; M& C
mcasp = &MCASP_MODULE_1;
' \' j5 R8 a1 h, A mcasp->regs->GBLCTL = 0; // Reset
3 Z4 B$ ~; x1 ~& H6 L; m/ J mcasp->regs->RGBLCTL = 0; // Reset RX. U7 |' R' v H! w2 i
mcasp->regs->XGBLCTL = 0; // Reset TX* X: R% g. n5 o" u- F
mcasp->regs->PWRDEMU = 1; // Free-running
( P1 J' u4 U7 H8 b# d // configure McASP0 receive registers
% ]7 r1 z" U3 F# j2 X mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 o" N7 W" h T8 `' Z
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ ?$ t! F4 N/ ^- E3 P
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 j3 C3 {: q2 N7 _" t$ I' I mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) T0 x5 n& }& T8 q4 b
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
( x* s' _/ S# k* W. m; I mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* t8 d' T/ r4 V( E1 H mcasp->regs->RINTCTL = 0x00000000; // Not used
! E3 I5 k1 h2 r$ D$ G W mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) S) \. b( k1 j2 M8 T
$ Q3 n1 O4 C' b' Q" Y* Q& D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# }: } w8 j( a6 j" i7 r/ ^' T mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ d8 F& Z5 ?" H) C/ |" m% Y5 R
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) v0 [6 f- }( q+ g
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" M& o7 X2 l* ~3 V0 q+ n, N7 w$ |
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( K8 M+ Q b: L0 Z9 \+ c# l- _# }
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
6 E, f: O8 l% g4 n" Y& F) l mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" [% L8 B& B, v+ T, ? mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- z1 P" a# w2 _1 B! V% m
% [6 @+ p u% c3 @1 O- K' j% [ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( j3 V- a" y" p7 u' P
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 O0 ?; _7 k- G$ @$ w0 W% l4 P8 m
mcasp->regs->PFUNC = 0; // All MCASPs
) Q1 a& [/ o& B3 ^% _. i3 C mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ y& e, U$ |& r( w* ~! ?! W( x H) g1 O/ n
mcasp->regs->DITCTL = 0x00000000; // Not used
/ Y' w2 w( b+ \) b) G# G7 ~( R mcasp->regs->DLBCTL = 0x00000000; // Not used
& X2 O/ N( m: Y5 U) o% `* N) w U mcasp->regs->AMUTE = 0x00000000; // Not used$ v9 T5 H6 G6 H: j- x
7 n. N# K" B" e7 o1 C. j
/* Starting sections of the McASP*/: y5 ^3 [( s- L% u7 P) f5 U
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: r! ~$ I) d) ?+ V" e3 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( O1 k: |. P+ j0 i, N. c" C. o! [ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * I4 k( `/ }: f7 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# P' q7 U+ j: r
' B& x+ k# _' G6 r. W0 e3 I( u0 Z9 j
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 { j$ J9 I/ [/ @/ A$ U) B L' a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ m$ a" A X9 a mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( | S4 d4 _% y6 s1 c! L/ |9 Z2 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* x3 v1 y8 F" q" d
' G4 Y$ w8 i: z mcasp->regs->XSTAT = 0x0000ffff;
* X7 h) q9 _, o S( s mcasp->regs->RSTAT = 0x0000ffff; + t& O9 P2 h/ q$ w0 s% n
I0 ?5 d! }/ r8 d. `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 {0 o- S! \ Q: v3 v: z( R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" {1 B; q+ I6 J6 j$ f9 v
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! |0 e) _; D" k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 E( S$ h' f9 g, ~3 @ {; ?' d
' O, E5 I* G7 R% J. h' \8 V /* Write a 0, so that no underrun occurs after releasing the state machine */
6 E( i6 c, g' d$ q mcasp->regs->XBUF5 = 0;
9 b1 T& F5 o* z7 P mcasp->regs->RBUF0 = 0;
, `8 ^8 X# L& R5 z. Q
1 N1 b; R1 Z& m mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 l) S) A p- M, [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' o8 `4 W" Z$ y
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 z, X# Y, w; L5 `5 Z$ X( d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 s6 |$ k* K% Z$ n6 M) v9 O
2 S: @$ g8 c/ N( |9 f
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& q1 @* }1 H2 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 I) _" d) a/ I" U+ N% ]) e8 u' N0 q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 W/ L* Y- M$ n) q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# ?' r/ F" O, g5 Q9 X
: Z% a4 u; h" |8 i2 z1 t k" z6 O CSR = 0x0000;5 l- N. F- X( ~! v$ I1 p
INTC_INTMUX1 = 0x3d;
( n# L- n6 G0 w) ` ISTP = (unsigned int)vectors;
" y% V: P0 {1 X4 F ICR = 0xFFF0;
4 ] f M: b4 q; V1 @: C7 z- A' ?, \ IER |= 0x12; 5 L& q+ z0 \) I7 ~+ e6 ?8 S
CSR |= 0x01;
5 ~ \9 ], D' K6 v* O4 x; J
( T$ f9 E( h2 b5 i0 w6 _0 {: Y' ~' x3 D K
! p0 P, ^" }. o0 x5 h4 ~还有就是两个输入输出函数:- D ]3 Q/ ]& I4 `0 Y7 U7 R* z
void output_sample(Int32 out_data)
8 @+ E4 r' P$ J{0 d Y9 N7 s, L& r& e7 {
AIC31_data.uint = out_data;
G# x) S& R/ q: a MCASP1_XBUF5_32BIT = AIC31_data.uint;
) j" ~' Y5 P: Z8 s9 F$ s4 n}
- J4 G+ N6 {5 R+ d& W& ]- J9 G# Y" p- D( x3 }: l9 n
Int32 input_sample(void)6 X8 T- t2 J9 y/ H2 d( ~& ?
{ 3 Q, a+ }4 o3 N) i
AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 B& [5 X2 b1 T# A ^ return (AIC31_data.uint);
* L6 @. Y1 R; d& @# I7 r4 c% A}
" x8 [; L* _! X* z7 r# U, v3 E! ?0 \. W1 C# i0 @
|
|