|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( I# K1 R. f7 y( c& `; m: L
main文件:
' b6 O; i& c8 H% I" ^0 uinterrupt void interrupt4(void) 8 L% |! n* |! L+ A
{8 P% x6 M. P* {8 \- v2 D. c# q
Uint32 sample;0 @$ ~% ~, i3 j( W2 T9 [
& K9 t5 i, ]( k: y sample = input_sample(); // read L + R samples from ADC
/ ` f. X! u. a; Z& q output_sample(sample); // write L + R samples to DAC
6 j% m7 h4 }2 x. c% A return;+ r; ?1 { K' d
}' |9 f3 k1 P' K
' W. \9 ?, H. Y3 w2 {
int main( void )1 A7 R/ p; B' m4 ]# ]+ q
{
5 Y$ L1 I8 H* E7 _8 [( ^: a
" ?8 I7 @/ W0 p- G3 B /* Initialize BSL */" A- ~. j. C# m2 D4 N, P
EVMC6747_init( );0 |- f$ ~3 K4 p, V3 |3 e Q: |
/* Call evmc6747_intr function */6 h( O0 G5 ~8 J
aic3106_init( );1 ?- H5 q, H* X6 ]7 K/ J6 F
while(1);
' {1 [9 U5 M+ j2 S9 b}* B6 }9 W/ B' @4 b. _
# Y" o# S. e9 b
5 P& G6 H7 [; y- {" k6 q) ]7 caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 x! ~/ u, ]0 P: I/* Initialize MCASP1 *// _7 Z) t3 r3 q: W0 _; C
mcasp = &MCASP_MODULE_1;7 r3 [' o; f; o( r" u* V
mcasp->regs->GBLCTL = 0; // Reset: J3 @) K" l6 V. f% H
mcasp->regs->RGBLCTL = 0; // Reset RX2 n b8 H: m# E& R/ M1 n: c
mcasp->regs->XGBLCTL = 0; // Reset TX) {5 q7 `/ z6 ~* h8 q( N& V# ~4 c
mcasp->regs->PWRDEMU = 1; // Free-running+ h6 W- b# C/ r; V7 ?% V
// configure McASP0 receive registers
8 P$ r& e3 U0 ]& S% d0 ` mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; U" s( A5 L5 B' r& G$ z3 ^; M
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) h9 z) I6 p, S) D1 R/ ^' O
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
6 V' I/ J2 H( v& E/ j mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 z: \% }8 q' `: L& ` mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' A) B4 _/ U$ @7 G" v
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
( N3 N) r4 G' \. E# o1 S mcasp->regs->RINTCTL = 0x00000000; // Not used
/ d" n) K' H! N mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) T5 V! X7 V7 P# \" e1 n: ~4 x
7 q7 H, I% ^, a- I: S- A+ b: L
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, }/ ?. B1 X, ]+ ^- q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; ^; N* D( i7 ]# q4 W2 u9 { mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 P5 G* ^6 ]% i+ a; o
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' n4 [: c: ^' r0 w2 u4 R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK! a" E: E# g) ?+ }
mcasp->regs->XTDM = 0x00000003; // Slots 0,1# u Q y- `: s/ ]9 h
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. c2 w9 p! @( h+ w
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, _+ P! v5 z J: E$ ]0 q- E% S* f5 b- X) ^
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- p O. h" D0 z/ l! V( r& h6 O
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, V/ g( G" ^3 C) r mcasp->regs->PFUNC = 0; // All MCASPs
$ c" g& Y8 B" B# S mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ z$ ?$ U" w% e, o! s# u, Z
, ` B* W) I! e, e& B0 ]
mcasp->regs->DITCTL = 0x00000000; // Not used
5 N4 | y/ d- r2 ^ A mcasp->regs->DLBCTL = 0x00000000; // Not used
) p% P4 S% ~/ o5 j8 c! }, I6 J, Y mcasp->regs->AMUTE = 0x00000000; // Not used; R* [8 k# r U; a5 F- f7 X
7 f) c% u9 [* A/* Starting sections of the McASP*/
' w! n; @4 [2 L# x$ \) u8 x mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 V4 {, x Z/ p! z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
+ f. y) E# C$ N* t; K* @3 A mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; P. n+ [0 Y/ y$ P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 O9 R; F& O. \
$ B, _0 U* m* K6 H mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 D/ y: d1 @, h# R: e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: s9 K, W7 _7 ^+ B {, i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; m; r: r( Z2 p% T; t% q! L% | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( L/ j' z( h9 M7 }) G
2 w' B3 A, r: h0 Z- C7 c& n mcasp->regs->XSTAT = 0x0000ffff; ; r1 l$ U% I0 F$ _4 z. I
mcasp->regs->RSTAT = 0x0000ffff;
* U9 E7 }; {3 @, O2 F1 X
9 T! g9 M; _$ b mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ R6 Q4 b+ r9 s6 g' }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. l" ?/ s$ D! k B
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 I/ P3 ~7 E' C% I$ [, | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 E% G; ?: t1 T8 }& N+ y0 f
6 t9 p# p, r5 @6 z4 n! c$ I3 ?* v4 d /* Write a 0, so that no underrun occurs after releasing the state machine */' _" q) `- L( x5 N0 m; v: R8 z
mcasp->regs->XBUF5 = 0;
; n% i( A$ e6 A7 G& W- g* U8 p2 } mcasp->regs->RBUF0 = 0;4 ~' D0 r d7 ?! R7 ^1 e
: I! z" ?+ I# U' D- x2 f0 s mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , y& |8 ]! S' ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 E+ U {8 j: j0 `" e
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + h) E4 f" q5 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" W9 q% z L6 _4 K5 L
: g8 a( W0 b1 s& d J# q5 A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 z) N: F3 r! I8 P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 ~. Q: s- a+ D5 b7 B+ P/ u mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 y5 T. Q( k: D! j; o# W" Z" a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 {/ ?$ }" B: C0 g
+ Q+ r7 q3 k% [: {8 \* ]7 ] CSR = 0x0000;; h* i7 J' P0 H \" `% ], S9 O) v
INTC_INTMUX1 = 0x3d;" e1 J9 }, C6 A$ n4 S
ISTP = (unsigned int)vectors;
" X0 j; R, C. U1 e' H6 ~ ICR = 0xFFF0;
9 g) j7 }+ M3 b6 d, @( o IER |= 0x12; + A3 F, M+ d( D5 q* Y7 L3 Q
CSR |= 0x01;
6 `. |# }& r; l: r" g& E' Z2 b# u- ?
' }& T( e' W* u
: Q8 H8 u V! I' X. Y. k& e3 @还有就是两个输入输出函数:
* P( J* A: g! S0 F: svoid output_sample(Int32 out_data)# ~1 N" {* t0 v) ^3 z( L
{' y; M& u4 R: f$ ]! w0 d" w
AIC31_data.uint = out_data; 2 F" H( O5 E0 m
MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 H8 b- }8 N6 J3 U1 s}
' ]* ]+ C: Z4 @( m3 @ G' p6 U; L% D' n
Int32 input_sample(void)6 N4 H: P+ @4 I' W( i6 v
{ & |' W$ E2 ?% u4 ]! t t6 W
AIC31_data.uint = MCASP1_RBUF0_32BIT;
: y# |% s) J% i$ @! @ return (AIC31_data.uint);
w4 {. K: v# t}
7 p; J, u- h# C* w5 _( W1 K% D7 \3 K5 ]) }7 C) L
|
|