|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! z2 L* `5 [' E/ U# y' z1 B# c' @
main文件:
+ Z9 x% ` S w6 j" B% uinterrupt void interrupt4(void)
+ z: Q8 b% H# `8 i{
G* U( e3 _; i) Q9 W g$ O Uint32 sample;% W. v: J6 @) M3 D0 ~, D6 K, b
+ w. x% i, l% h- i. R. ^* ^
sample = input_sample(); // read L + R samples from ADC1 ]- T1 `5 L. q) D$ ?8 {7 z
output_sample(sample); // write L + R samples to DAC
( t( F8 ` C: ~' Q return;2 a. l0 J. a" h( a
}6 Q6 \7 A2 Y; J3 C; G( }
5 p3 q& W+ ?+ w' |* ^0 |
int main( void )
E- o6 X( Q! r+ Y" t{
4 r( `: U$ u: i% R! G7 N" ?3 w( E( W
/* Initialize BSL */, a# {- g c) P" k
EVMC6747_init( );
5 v+ a3 F- }8 h /* Call evmc6747_intr function */- @2 @/ j) ?+ q+ w7 b. G! i
aic3106_init( ); a8 `9 B4 l* \
while(1);3 s" x9 w" K8 P+ p0 u* K/ I8 M5 E1 X
}
% k# s$ y- P# }6 Y: `. Z4 R! P- d8 \; W1 Y- w# [
% z3 a6 Q) o/ ?: O4 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 G a Z5 f# t
/* Initialize MCASP1 */
7 B. z0 V7 k f6 t mcasp = &MCASP_MODULE_1;
8 f. o0 w7 N `! i mcasp->regs->GBLCTL = 0; // Reset
( i% Q. n/ ?& {( X mcasp->regs->RGBLCTL = 0; // Reset RX
; @# Q, ]. n$ z mcasp->regs->XGBLCTL = 0; // Reset TX
+ `, u9 w9 v8 z+ V' i: j mcasp->regs->PWRDEMU = 1; // Free-running" ?0 z) A `8 r& S8 m
// configure McASP0 receive registers
( b" H L7 C; E mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
$ ], \; c) L4 }. \1 n$ r7 K5 z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ U8 I" T/ c' s6 P8 s mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& A- T, z6 M' e3 k2 J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 a H" Y/ l) c+ `+ e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
6 C; c- F+ _) B' [3 `4 h% K mcasp->regs->RTDM = 0x00000003; // Slots 0,15 a/ F+ G6 W9 w6 v( Q2 B
mcasp->regs->RINTCTL = 0x00000000; // Not used; c7 `5 J# `6 ^2 x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 o1 r/ t. N3 {5 }& T9 D( h: Z
& [" v5 ]% @: ~. f/ [
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: O8 ^: H) s; |! }; L! Z
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ ?# }* ` l; S M4 m. ]: n
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& {* _# }5 I. Q2 y, @9 N mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, M$ F8 O2 K1 f, \( B mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 I4 _6 X$ d4 `. }, _+ \ mcasp->regs->XTDM = 0x00000003; // Slots 0,1# [- U* K! I% }6 I8 B5 w0 F- z, x
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- T+ f3 X- F+ l" Z% t mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 a, X3 r$ o8 C0 n' x
" }$ A' l4 d2 [+ _* U mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* A q u+ _$ S5 ~
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
& }8 r! V' H! F* X& _& t: N! ^8 Y mcasp->regs->PFUNC = 0; // All MCASPs
* I3 b* c2 }9 U2 t7 K" N5 G* S mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; y& J1 D' h7 z
; n; g0 ~* Z. H' a# v
mcasp->regs->DITCTL = 0x00000000; // Not used6 [) m5 Q1 w/ J+ P* G5 J
mcasp->regs->DLBCTL = 0x00000000; // Not used
- m& m: h( R. R( F9 B, g mcasp->regs->AMUTE = 0x00000000; // Not used
0 h) x% e! _ H4 c( C( U7 a% J2 [0 J& I% b b) r1 S1 \) A
/* Starting sections of the McASP*/
* c" c K- j' r5 O$ P# `' o9 [ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% R) b0 x4 z, K1 `" V% ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
* w- Y, @2 C' R0 x8 q1 [+ } mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" \. ~$ C" E) x# Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# W% c& {9 t& @4 K
) S* H5 D) d5 I4 H! x
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 l) u v4 A3 p! A* F. B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) _4 h! a' _' J+ K/ I% S
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ b, |# ?* Y" ?' n% M1 {4 {! ~+ Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 e7 d& }! G6 X' V- O8 j: {" L$ s+ y) f5 t
mcasp->regs->XSTAT = 0x0000ffff; ) [) @* f, g. l( S6 u/ l' X( D
mcasp->regs->RSTAT = 0x0000ffff;
3 S) {+ O( Z% P7 ^" g: f, x( d$ @% |0 k" x. ]
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- V: u% ~) ^' x' \- c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ o, L) [5 R1 \3 N mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' `) D2 V r# W+ n8 Y2 {% A( j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 V& h2 V$ w% }4 g# ]
( X+ _' A6 ~3 c. h9 L1 { /* Write a 0, so that no underrun occurs after releasing the state machine */
: |: I# h# ~, X/ ^3 d$ A1 g- p# D mcasp->regs->XBUF5 = 0;
. h9 a* s$ n, o5 v5 d5 g mcasp->regs->RBUF0 = 0;
* x7 M( l$ I) g# s* Q4 L2 ` r: K- d3 W% \& B+ q/ o7 c
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- Q/ O. R9 W, y9 I+ Q- l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 d: }% }2 q! k4 U0 ]6 d6 p
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ Q. T) \/ Z9 v* h8 z' L! M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* M6 c" G' b S9 o) ^# g9 |& ^4 y& f h% C/ Q5 l- `( b
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - q) w3 \6 a: }/ j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, f4 ]0 V4 ^/ N% ], O8 G; @4 g6 |/ D mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 |0 a! N, D/ ?- Z9 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ L! {1 r/ G7 ^) e% x3 u
+ Y G9 ~& w. F! {% H- @ CSR = 0x0000;- k. ^5 H, |7 N& Y# ^
INTC_INTMUX1 = 0x3d;
1 r3 v1 q( Y- Q' _$ z+ X ISTP = (unsigned int)vectors;$ ]% L. Y" K, j- v# x5 X5 t' s2 x0 Y
ICR = 0xFFF0; ' _3 X' a* i. w7 R) J y/ S8 K
IER |= 0x12;
& w% U: t2 D3 V( m/ A CSR |= 0x01;
3 l# @8 L5 v; S* Y6 t! I
, K) ^3 \. e. i q+ E& c+ m) l2 b3 @* N9 X4 c E
/ g* z3 I2 x) B0 Q6 G9 F
还有就是两个输入输出函数:
0 x1 `) S/ g$ Lvoid output_sample(Int32 out_data)
! e2 J9 ^' }4 W' K# ~- [{$ ]: R% j! U+ \* b+ J. [6 r
AIC31_data.uint = out_data;
8 T q8 o/ w! |* | MCASP1_XBUF5_32BIT = AIC31_data.uint;9 R0 i# s( a( M4 f( Z2 n( y
}2 }' K3 l. S* z$ ?
' L4 q |" ]3 t9 j+ A8 V* t) `- p3 c
Int32 input_sample(void)
/ R) z; P3 |4 k L3 P{ 5 g7 ?; [7 b. W( M/ ^3 T
AIC31_data.uint = MCASP1_RBUF0_32BIT;1 P8 x1 w" F5 M4 b
return (AIC31_data.uint);
5 V# ]$ m- x H) x5 v: Y6 A}
4 Y$ |0 K$ D1 }" z4 W- |
( f0 r$ }. ^' y( k; j |
|