|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) [* l( @% B. gmain文件:. |9 T6 r) S: S+ R7 n& m/ M, z
interrupt void interrupt4(void)
* H8 F- P& s0 ?- u; q. |3 y$ V) {) W{
1 ^0 i6 A, S! M5 g N Uint32 sample;0 \! }& B7 S. m: T( p
|) Q4 U( U! [% s2 H. H) i0 g; V
sample = input_sample(); // read L + R samples from ADC$ \+ o+ Z4 d) P% ?2 x+ [4 s6 E
output_sample(sample); // write L + R samples to DAC " t: j3 o* T; O; G b6 \( i" G
return;& b$ q: \1 I4 \% B" t7 l
}
7 m3 J( A+ c1 j4 v& k/ u4 C
2 _ G1 t$ Z4 q4 w) b; |' Yint main( void )+ `9 H. i2 t5 G* K) Q7 g7 b0 E
{1 }7 b+ D; I8 u; s
" G, a( Q( h% p& Y9 R /* Initialize BSL */9 z8 G/ E% Y+ X ~. i
EVMC6747_init( );
4 e/ Y0 O4 [, i8 d /* Call evmc6747_intr function */3 d% W( H0 V1 q5 y/ `+ m
aic3106_init( );! M& v9 Q# i( K8 J/ x6 }
while(1);
5 f: o1 U: R m% i4 B; A}
7 K: O; f. s1 Z6 M+ |& g
6 G. V3 c0 [. y7 X& a: s) [) H( H9 |3 N: o' x9 B8 j( ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 [3 [: ~$ f$ R1 C& ?5 X e6 ]; U
/* Initialize MCASP1 */
6 Q6 T; o. n1 a0 F, v* K mcasp = &MCASP_MODULE_1;6 Z7 M: t( q3 C
mcasp->regs->GBLCTL = 0; // Reset3 f, n- z! P( f4 g
mcasp->regs->RGBLCTL = 0; // Reset RX
/ } a' z4 k/ v3 m9 D$ ]! O mcasp->regs->XGBLCTL = 0; // Reset TX0 v) y u3 X* S3 @6 T
mcasp->regs->PWRDEMU = 1; // Free-running& `/ a& ~7 b1 Z8 n k5 u
// configure McASP0 receive registers
% [- H& k' @ H' a mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 R2 I% s2 u9 q" r9 n$ [" N mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ t( _$ T. y: O) E mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 a) V* }4 _: u: {. ] mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 X8 G5 i8 q1 n8 G& ?+ e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
C! \! k8 O0 f t& E V8 e& Z mcasp->regs->RTDM = 0x00000003; // Slots 0,1# e6 z$ F$ P+ g- i# B5 c- g, t$ c' L. n
mcasp->regs->RINTCTL = 0x00000000; // Not used) m! o$ r+ t( b/ t( _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ v( P. ]7 C' { F( y% A* V0 r: e( }* E+ [6 ^
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
q0 t. G, l2 {5 h& ? mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 c. f$ M# T4 D2 [3 |( w/ S ~
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! G: E! _& N7 I/ y1 P) e3 D mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& ^9 S. L7 [9 V. O mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK8 l- X. M) X8 [) P9 ^" W( q
mcasp->regs->XTDM = 0x00000003; // Slots 0,1( [2 s# G* t7 q" H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 I A& J, D3 I- j
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 A! T$ }1 `: ~4 R, i7 s
1 s9 ^: L2 g: B8 O$ D$ T mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
9 f2 g9 E& F ]+ v) _, x mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* y0 r4 k+ N) L7 ]( j" T s mcasp->regs->PFUNC = 0; // All MCASPs# ^$ m" [! n: X# D% N& q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 J; X* ^: R# A2 z1 y2 B ~
, D/ E/ @- h U7 S; T5 | mcasp->regs->DITCTL = 0x00000000; // Not used
6 f" T6 N) Z: q mcasp->regs->DLBCTL = 0x00000000; // Not used9 L! T. v2 d2 \
mcasp->regs->AMUTE = 0x00000000; // Not used
( t/ t/ z* b! o" z1 H; ^, v, q% s
/ \: R/ Q, z: \! ?# [6 G H/* Starting sections of the McASP*/6 z* r4 E. f1 I; ?+ e6 H! _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# i: @1 _3 s0 d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# J l6 s% J% w. J4 ^! E% a mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 {& I( w( E' {7 z) Y) j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( {0 Z% m" s$ F
4 s8 D; G! o. }. X# a) s8 w5 U
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; u7 U. K, c: @; n2 M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 w% f+ o) `! H) t: _7 O mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 c5 m) N& T9 t" W+ B" L! ]3 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ a; ^+ P4 g0 Y
j. T7 q! u: f0 L/ r! m# K mcasp->regs->XSTAT = 0x0000ffff; 8 y# O) z Q$ I* \7 C6 Y) m% y% H
mcasp->regs->RSTAT = 0x0000ffff;
, E! N0 ]7 G. y1 r: M
% k/ M0 _. D( i mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: p$ k9 U4 ~2 E/ f4 _2 m% S- ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 m: y' A8 o8 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 m7 O! n* e# u. L9 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' {( c/ l& {8 \& _6 V
$ D7 Z) s. V8 t% M0 S% X) ]5 k
/* Write a 0, so that no underrun occurs after releasing the state machine */
$ r9 f1 z. S7 P mcasp->regs->XBUF5 = 0;
) ~/ n. a+ m. S mcasp->regs->RBUF0 = 0;: j. x% |! x9 _
1 Z {- S3 ]1 X, g7 ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 L* A' U- d! W5 M/ S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% t! V. ~& |& w. m2 F mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: \, k* Q! w& H* }& l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
y8 I8 m1 E& }- \! s
2 I* o. S) R) ~( G* l$ X* m mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 N* B* }& ~5 h; g8 S9 K5 ?3 P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' r; m: n! e4 j
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + x, b8 d3 c w% P+ ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 h8 q/ { h0 x( o/ L/ p1 |0 D
3 B9 t1 H, L: d+ x4 J+ \
CSR = 0x0000;; D: t+ M! p3 ^
INTC_INTMUX1 = 0x3d;
- k, A% p$ P. ?) L' }# f4 k9 ^ ISTP = (unsigned int)vectors;
, ]( I" T3 Z3 ^% t8 F- O, |2 i ICR = 0xFFF0; 0 q+ x* m* T& n6 r
IER |= 0x12;
" i) v1 U& i5 F* C CSR |= 0x01; : r! V: v/ a2 P( U
. M2 x3 a% _2 C! t" {, i0 S
' W$ ^ f! F- r7 E5 {0 D2 \1 C
/ G6 I* ?7 ^6 p- h/ {2 l A+ `还有就是两个输入输出函数:
- J/ b+ E3 G. M& Xvoid output_sample(Int32 out_data)
( j& N# x% q8 d7 L, v# Q% w: L{
6 K6 @9 f& r5 v- u8 m AIC31_data.uint = out_data;
# J/ ?& F8 ]$ }' ^; M8 S) j2 v MCASP1_XBUF5_32BIT = AIC31_data.uint;# ^' h$ H" @4 h$ }0 K2 c/ t* ]
}$ U7 |& s! K8 L5 s7 i
' b! Y T" |2 P' D2 n& l8 m* ] u
Int32 input_sample(void)5 R! }4 o+ c0 l8 ^% Y. t
{
- C2 \" |; G. m AIC31_data.uint = MCASP1_RBUF0_32BIT; C6 r1 L" o) k% |. U! V
return (AIC31_data.uint);3 Q4 @0 K: v& W3 p4 R
}7 r' E3 \+ s$ p) Y$ `2 j( C
4 m, Y O) w) C
|
|