|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& I" f0 k {- V, P4 ^! Fmain文件:1 k' B' n( n+ b( D
interrupt void interrupt4(void) . K/ Y. [" M( |7 i. z$ ?
{
0 i: Z" { U9 G Uint32 sample;) |( W. d1 Z% A, Q" ?
6 [4 J! v/ @; X2 |
sample = input_sample(); // read L + R samples from ADC& a& Y% y7 r t( A) c. I, f
output_sample(sample); // write L + R samples to DAC
; T( \+ s& g3 _. w8 g return;
! _" W: O9 o; J3 k4 V# U}4 w8 `6 O+ @% b% o; G. t( J
; r/ b" |0 p' x- q; L7 b9 e. `int main( void )
6 \' y' ~- b/ j{
: S/ v' L& {4 u: T- C3 h I- Z- M1 r7 ^5 X
/* Initialize BSL */
8 L$ F4 s! c0 n( f. Z7 V7 P EVMC6747_init( );6 Z1 n) J- R# [
/* Call evmc6747_intr function */8 H6 J3 y9 ~6 ^1 Z9 o) T
aic3106_init( );, t# z: h1 F7 |4 J( X
while(1);
1 ^) `6 t7 Y6 ^}/ D) W# L, v- _2 t
' z9 t$ ], I1 I) t
1 D! c- X1 c- I: r% q) e- @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 x$ l+ y2 L7 ?% ]. y5 \; f/* Initialize MCASP1 */* B# Q W) B& O9 h/ R) Q
mcasp = &MCASP_MODULE_1;
, A; \0 w+ r1 q mcasp->regs->GBLCTL = 0; // Reset
/ y' g3 V$ A2 b8 v; M1 t( X" h mcasp->regs->RGBLCTL = 0; // Reset RX9 N+ O; U- T5 F; x
mcasp->regs->XGBLCTL = 0; // Reset TX
8 l9 X+ r/ ?( m mcasp->regs->PWRDEMU = 1; // Free-running M, `4 L: t" S# f
// configure McASP0 receive registers
1 c( k/ I; W0 f V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' `) m" _; V: ?3 ]2 k, `* p0 \' @ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 l: k- m9 v$ w# U mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" L+ r: H2 v2 w* w3 p. C mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) Z' U1 t7 a% A9 u5 O0 A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 r( t1 A' m; ^! c0 L mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ s8 a% @# V, M: V/ Q5 [
mcasp->regs->RINTCTL = 0x00000000; // Not used
" |; j0 s/ U) Z5 G! K' ]5 y, H mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 I0 \- P( W; k3 u+ K) U9 v6 ]' }0 y- X1 `$ B- G3 q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 g$ E) s+ Z6 U% s: V3 R" O mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 B6 I: C: d# N' f: u mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' Q4 D! C& v9 A. [0 Q0 W9 e2 D/ ^
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 B9 A! C6 d: Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 t6 h3 l2 X C# j/ e" \
mcasp->regs->XTDM = 0x00000003; // Slots 0,1# ]6 S9 L! r. @2 N6 ^% U( |7 x
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" G7 Y' a4 t$ A4 H; d7 Y mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* ~, [% ?" V# Z: ~+ D1 z9 b0 [9 C8 ]! E+ n
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 _$ ^/ @# y! S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( O% T4 E5 u# g- ^" m
mcasp->regs->PFUNC = 0; // All MCASPs
- ~8 x y0 e- K- g mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' \1 }) u. Z4 r/ s- b
4 B1 m! _& R* {0 U mcasp->regs->DITCTL = 0x00000000; // Not used
) f) t! D9 N. ^' V. b mcasp->regs->DLBCTL = 0x00000000; // Not used4 n! z9 A; {" E( U1 X& w G
mcasp->regs->AMUTE = 0x00000000; // Not used
& x8 E' C1 J2 `* L0 \- B$ u7 i( n/ I2 t' P( p+ f
/* Starting sections of the McASP*/
/ x" V5 [: t6 `- g7 s- M6 N* t* Z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 \" j, y7 I+ _% j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- z7 F; C) t# a3 z mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; e8 d& I- S9 W+ Z( z& E9 N) |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ E3 z8 B. v w# b0 t7 Y
( `! A& S; k) u" ~9 u0 ] mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ b2 V g% l' x4 z0 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ v+ }) k0 }% N4 o
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 w0 ]0 M# D' B$ g$ k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* w- R/ `/ ~! j: n: t
: }& P/ u; {: w$ I mcasp->regs->XSTAT = 0x0000ffff; 4 i9 r7 J: e4 x2 C
mcasp->regs->RSTAT = 0x0000ffff;
% j, i6 Q' B, _& o% b8 t2 V/ J* X
# k, o( F+ p v4 r mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) V; [9 Z8 S% J. e+ g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& Y' D, j K3 [! c, h mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " z- e( |9 L% D* |" q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 x, n8 N1 i2 i7 k1 V( W* P
: F! T) C0 F. H' Z5 j /* Write a 0, so that no underrun occurs after releasing the state machine */0 W4 q+ ~/ L( w. N
mcasp->regs->XBUF5 = 0;
7 t8 a0 p% \: ?# y7 c mcasp->regs->RBUF0 = 0;% ~1 V/ h# X/ i6 ?( c
9 t( }; z3 W4 N9 h/ |7 [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 S# n* E D3 g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, c5 L3 y' s- Z8 g3 S: W7 n" u
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# y: H% u& w& O6 S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( e* q8 A+ V6 t* Z4 }2 R1 Z5 l9 ?' r! @" x. D: i
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 H' O! T: {6 j4 ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 d/ Z# a0 I, r J mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 K& I5 Y+ Z/ n W% K: @6 y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# J2 [; H' z! k$ v1 b/ u1 s4 t, T, T- C7 l4 |
CSR = 0x0000;+ \7 \! r8 c8 Y9 I3 f0 C
INTC_INTMUX1 = 0x3d;0 o- _. Z+ m4 i( h$ A) D' y
ISTP = (unsigned int)vectors;
+ a, D [/ K/ `1 M8 C% j ICR = 0xFFF0;
( p" c2 \* e9 z; Z& _ IER |= 0x12;
Y6 h; t% G" J4 K0 S CSR |= 0x01; ! b2 i3 \" t; w. N
7 @$ }8 ]9 v4 w
9 [/ p' S% h3 o% \+ s/ n, U* E7 R# u
还有就是两个输入输出函数:/ u Z* M" |: Q
void output_sample(Int32 out_data)
; \# n3 ]' ?/ ]{' z& A6 |( E" z6 J$ j
AIC31_data.uint = out_data; - ]3 Z$ n' r, k4 H& B) m9 x7 ~+ {
MCASP1_XBUF5_32BIT = AIC31_data.uint;
; S% \* L- Y5 V; r1 m" R}
9 q0 T! N* {) s# [1 N& H
7 z1 K% ~1 G9 a. P$ Z5 jInt32 input_sample(void)
) r% u2 ]3 A i6 w( @" F/ w{ ' Y: ^/ {4 f! U; k5 L
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 N4 s" R+ Y8 d: w" Z: Y' X+ m
return (AIC31_data.uint);
! S) H( u/ k) L}
! i- k& \& G0 K4 J. ]; U" N; u) J G. |* e
|
|