|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ r- z; x! v: a6 U' y
main文件:- k- m5 l% x0 b4 M2 s
interrupt void interrupt4(void)
8 M$ L6 M" ?! O{" i1 N* [& X: _2 b
Uint32 sample;
+ x( O: ~; `! ]3 M$ _- _! q( A/ S& D) r
$ D- k0 s4 _. A" |; R sample = input_sample(); // read L + R samples from ADC
' ?4 O U6 J4 ]5 h$ K' \9 P output_sample(sample); // write L + R samples to DAC ' n7 B2 h* B% `# X, V0 C
return;) ^- {9 {' s6 h+ d, u. N
}
( T9 l& y. s! I/ s/ V- C; Y
$ V, i, ^1 d( Q2 h9 U2 V1 c1 yint main( void )1 s. R' `$ ~- W6 B
{* `* W1 o$ P! a9 s7 B5 O
9 d6 V5 ^! c: N3 P& _# Y8 R: t
/* Initialize BSL */
8 R/ W8 g% m% M" i# G EVMC6747_init( );4 N+ z" E2 T! \% ^. ]
/* Call evmc6747_intr function */
( ^$ I8 b1 e( _$ S- k aic3106_init( );4 u5 p* v8 Z7 e0 g
while(1);
+ f/ ~! F, D1 F+ k: P}: G/ b. `* t# t2 M' v% B
7 C; K8 G" ~, C3 J8 `& f- _2 y, a4 j0 b/ V' h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 k& D$ T) f; Q2 C# L, V# L/* Initialize MCASP1 */
( B& |' m+ r) [) g mcasp = &MCASP_MODULE_1;0 T1 q3 |1 ~. J0 [- q6 J* k
mcasp->regs->GBLCTL = 0; // Reset( {" {; w% n O4 h# V$ b
mcasp->regs->RGBLCTL = 0; // Reset RX" Q, `8 U1 S" H: B+ W
mcasp->regs->XGBLCTL = 0; // Reset TX
# z# H$ M0 h7 F/ ~& }8 } mcasp->regs->PWRDEMU = 1; // Free-running
6 d" p/ Q9 t) ^0 U) D; A" z2 L! p // configure McASP0 receive registers. h7 }" g& h- R* c3 T4 G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used6 E* m. C8 R% d* {0 J
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* K) v0 y8 w) }6 v Z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ M9 z3 H7 w2 K/ | mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) a0 g) |, M$ \7 Q6 A9 x
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, @% R/ ]! ]/ p mcasp->regs->RTDM = 0x00000003; // Slots 0,1' n5 |% H, r& Z/ J
mcasp->regs->RINTCTL = 0x00000000; // Not used5 d$ k2 q% L4 k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( p) ?! F/ M: o$ m, S
8 n/ \; `7 {0 [ Q5 f mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used' M/ {, b' {" _% u% C2 T' y
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# _5 A; |; B" m- K( t
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ |5 E/ i9 W/ w/ {" g/ ~
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) Y- W3 c4 T& C( d' U mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; ~; }# g) Y3 L2 A. x1 `- p
mcasp->regs->XTDM = 0x00000003; // Slots 0,15 z! V7 p* t& y- g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: C: d6 {; Z$ @( n mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- w7 G E2 m0 l# t+ b2 k5 z, J/ {" X. ~
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ u. h. ^/ b& n5 p) ?% g7 ~6 f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 L: k0 a2 U) W% u mcasp->regs->PFUNC = 0; // All MCASPs- \* B4 }1 ?5 R8 L0 Z' `
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 ]6 ?) e9 |6 X8 o% g
+ W, F2 m* q5 x# r mcasp->regs->DITCTL = 0x00000000; // Not used1 t9 w. @- V# z7 X3 _1 d3 V h
mcasp->regs->DLBCTL = 0x00000000; // Not used, P @/ B5 ^& r5 R2 u
mcasp->regs->AMUTE = 0x00000000; // Not used! _9 `' N r: k* J8 v9 e
1 Y) }4 @2 S7 v8 z* `0 Y/* Starting sections of the McASP*/3 r; h# z' A# M; R0 |6 w. o9 P' x
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 f7 ?8 |- j0 u4 k+ m d- y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
* k7 P& z. |# }4 ^9 }5 t' T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; N) I, S! p, e0 F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- J A# }9 ~6 q/ A/ o3 Q3 v3 {( u! j; ?& R i
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' V* y% W0 N2 Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- X! [1 u' d+ a
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. u8 m7 x& u+ \! p5 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" a3 K B$ w2 }, {9 ] D1 K% G
- A& D: F+ M/ p" j3 R( l0 g6 F mcasp->regs->XSTAT = 0x0000ffff;
- E, J; _7 k2 B mcasp->regs->RSTAT = 0x0000ffff; ' a4 p1 b( ~9 [ E8 h o, X" O
8 O% s, \2 t2 k+ Z1 Q! w0 ` mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) Y: z1 j# E. x' }1 d8 R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" R1 w. O/ g2 a8 m9 K" s9 N mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : P1 @9 Y( G+ L% U- _: G8 l0 L9 A6 q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 v- a. R) E' u. Q" h# x+ h: R* Z0 U0 H8 a) z, y
/* Write a 0, so that no underrun occurs after releasing the state machine */+ [" R4 Q) i& E2 v) W3 W
mcasp->regs->XBUF5 = 0;$ C! @$ k. w# K% J1 c, _1 g0 i
mcasp->regs->RBUF0 = 0;' H. \0 Y& T* l/ g* T3 i& r! h
w2 x3 z/ ^. }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) U: K. p0 f: q$ f' O2 u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 ?. _5 c4 a8 ]+ {' u2 C, M+ P mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ V' e% C& s( ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: L& R( Z w( X$ G! m+ p
5 ^7 f0 t; k/ ?" W$ {2 ]( h( Q* z mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) H- X8 {8 |5 S" I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 o+ b0 F! r \% { mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% a" o0 G1 M! j! C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# x4 c3 P0 m6 q% A0 L# j: N7 G5 ^8 v
CSR = 0x0000;
0 y) X" X. Q9 e4 E. G INTC_INTMUX1 = 0x3d;+ Z2 |' ]9 ?' f- b' l3 f
ISTP = (unsigned int)vectors;8 W. f* g% I" z& P, G
ICR = 0xFFF0; 3 y" e7 R1 G! z) C8 g" I f
IER |= 0x12;
4 i) K4 U1 O! K- z: b CSR |= 0x01;
* i1 c9 s% y1 N. D! z' C
$ a* c" x" H0 ^' N G- R4 X/ r4 S( u! F
; p4 C; d; c8 i- f
还有就是两个输入输出函数:9 {9 P. e1 x- _
void output_sample(Int32 out_data)$ q0 U+ C% U/ j$ n
{
4 s I) P6 L) ^/ ? AIC31_data.uint = out_data;
n6 G8 j! P, n/ ]$ C: P& K: `. g MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ ^/ N5 V' Z M0 N" \' A}
$ R# k3 s# e1 f; ~
% v6 u8 X/ ^7 y$ g: V% B3 T; fInt32 input_sample(void)$ \0 _4 ?% @) b2 n5 Y4 b* n
{ 4 s L% N' l6 u ?, ~
AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 z$ V, }) K5 G return (AIC31_data.uint);% l8 x' A0 i8 n) K* L
}
4 ]- P3 s3 k: B. b. R; h* p4 k7 ~# Y5 V
|
|