|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" B, |# s3 X( w* }, p0 u8 H+ R9 d
main文件:
+ j# S5 W. k' Winterrupt void interrupt4(void) : W( @1 h' m3 }& j7 a/ }
{
* x- B6 W/ ] S Uint32 sample;6 D$ H9 X# V& y; @6 ]
: X1 m6 r5 F4 @ sample = input_sample(); // read L + R samples from ADC
3 v1 I4 e+ Y" D output_sample(sample); // write L + R samples to DAC
( C" o3 w2 s9 r* p return;
% d& o' l7 c( i W5 ~: v3 p; e}
8 ]/ w) ]8 g; w& w3 k. Z8 g% I& @6 F6 h/ O8 c& \
int main( void )
& G% ^9 r4 g9 [, ?& t{
9 ~3 f" {9 M# Y$ a# ]
4 ^# `& n: u, ^& D6 M0 K% j /* Initialize BSL */! c1 L# w$ [+ f7 n/ [" D
EVMC6747_init( );
$ R8 `- y3 o- r7 W1 l$ k/ u /* Call evmc6747_intr function */
+ W: ^: W2 C% G: \0 ?. |5 `0 U aic3106_init( );
: A6 H8 t# O7 N2 d5 b1 I; w while(1);
, f* x1 v, n: N) m2 s7 ]}0 J9 U0 H: U) G: ~
3 ?2 b) J+ @/ l1 \1 M- c# T- u) W+ }
! z, ?$ Z% W1 Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" N# D" c. q# d& o& `/* Initialize MCASP1 */: m& t6 l% p0 s: L" h
mcasp = &MCASP_MODULE_1; i* J) W' D2 ~' i. U/ k
mcasp->regs->GBLCTL = 0; // Reset
4 u) u2 }; }+ [ mcasp->regs->RGBLCTL = 0; // Reset RX
0 Z- B/ B0 K. v mcasp->regs->XGBLCTL = 0; // Reset TX
7 [$ n- W \' M, F6 h mcasp->regs->PWRDEMU = 1; // Free-running
+ c) K7 @# I1 ^/ h // configure McASP0 receive registers
5 E- u! b9 v3 F* d/ v3 o mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 m$ o) T9 p" y t7 y7 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 I& b6 S- F2 ~& I5 H mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 S# N$ `/ z5 l% Q# g
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 N C# x1 |" _( P- O mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 ?6 S* l5 |& |0 @* ~, \
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
' R; N: I0 ]) E, |0 Z mcasp->regs->RINTCTL = 0x00000000; // Not used
: l3 @( z: z4 x* f* O mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- q' U, [! [4 P! r8 q& o( o C6 l8 c! y! G! K" n* z$ g
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 U; u' L* t/ N0 F, Z# }2 T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% ?+ T3 ~3 z8 ]; p7 {
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* ^1 X# R. ?% E
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: A. c5 _0 L, c3 y mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* }1 K& K3 h3 b& k mcasp->regs->XTDM = 0x00000003; // Slots 0,1
! H; j1 Q o8 _$ M; a$ n& h mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; w# H+ ]6 G; E' y. e% t4 t
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; ]( p5 N( k2 Q3 r- S/ c3 o4 l% q) O i7 z: D0 s& }
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 R! J0 z; q; {$ @7 G2 s: H2 R: y# W
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 z0 |0 b" j" O3 f5 l o4 j. e1 O
mcasp->regs->PFUNC = 0; // All MCASPs
2 B) h2 O2 D8 O6 _: v _" y mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 z8 M3 u# X5 t, Q* [! J. Y) R) E! ~' k
mcasp->regs->DITCTL = 0x00000000; // Not used
6 l* w2 O+ A$ | mcasp->regs->DLBCTL = 0x00000000; // Not used6 m4 o- w0 C* j3 v6 ]! R
mcasp->regs->AMUTE = 0x00000000; // Not used
7 N$ {9 s6 W; {# @, E8 {7 d# J, B+ w
/* Starting sections of the McASP*/
6 f1 \/ m! M; }& j" I8 h1 Z* s mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ W+ J: S2 t$ _( t+ C k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 V- u N, g. ^- l& t! Y" J mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 x6 A3 d# O. r! J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 ]+ x f/ Z: q; }
. N- A' ~) s$ ?& ~- }( w& P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , p8 X5 G7 e5 |6 A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) _& ^5 u1 e5 i" p, n! D
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * S+ V B1 E3 Y: K6 m/ i! m2 X' c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 K5 s2 ?) v. F/ D4 O
}: Z* Q" `2 K mcasp->regs->XSTAT = 0x0000ffff;
% c& n' e$ G5 n5 h# P mcasp->regs->RSTAT = 0x0000ffff; ( e0 J9 b. E# Y9 j% B5 E- M
6 W, E8 `& P1 f" Y2 l! e6 \
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ |9 Q; j, X4 y+ F; D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 F" I2 U9 r" s mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ P+ q0 Z8 w2 }5 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 x: y* ]; o x5 [. u: W. ?# y; Y. ?5 |
/* Write a 0, so that no underrun occurs after releasing the state machine */
* c. X$ [! F6 f1 J; v mcasp->regs->XBUF5 = 0;) n! X; R0 z1 k9 J* j) `
mcasp->regs->RBUF0 = 0;
4 Q$ R7 j. {* ]" ~: F
( X/ |% Z& H7 U. I0 F! B; s mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , K7 h3 C+ O' k; g2 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 m8 r: ]8 y) J mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 A# _7 k" ]2 L* P4 f# O7 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, ^" e& H; O$ T' n Q M1 t! O" w
* O( f! J9 u* A2 _ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( P; o2 g6 z( z4 ]1 G3 R2 C$ Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% I( ?+ C6 C3 z' Q0 a: h) v; | mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- p v( }6 a1 Y0 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! ^% f8 b. i: A1 v8 c6 V; m1 M8 G. i& r+ e* t9 u
CSR = 0x0000;, {2 Q. q) a) K3 I$ g- k
INTC_INTMUX1 = 0x3d;& P( V3 a( }3 }! \8 y
ISTP = (unsigned int)vectors;7 {1 k' k+ u$ \3 o1 ^# D& A, c4 h9 i# [
ICR = 0xFFF0;
7 ?8 q5 q8 p; ~/ C5 a2 \) _# d. {. f IER |= 0x12; / g1 b* m% }% f: B$ p8 m* Q5 Z- Q
CSR |= 0x01; 9 x$ p# Z G5 {+ I$ m
) @ ~+ A& a/ {! \8 G/ P! P! j) p
) P" L* w U% A9 {+ m( J/ Z
还有就是两个输入输出函数:: k6 O( K0 ?4 m0 p9 w( D8 D- f, q5 D
void output_sample(Int32 out_data)
$ S2 g& P8 r$ @{
4 o B3 j2 M) |7 {) C) O" [ AIC31_data.uint = out_data; 8 a0 y! h3 N6 L4 I
MCASP1_XBUF5_32BIT = AIC31_data.uint;. Y) `. `# G6 A5 C) |3 Z- B
}, Z# W5 y/ o+ _- _
; f& ~8 Y e* e
Int32 input_sample(void)& |4 S" J7 x# l: o
{
5 X) T! B+ k; z& |- l AIC31_data.uint = MCASP1_RBUF0_32BIT;# P& \' R( X" h% S: Q% h! y r
return (AIC31_data.uint);9 L+ {! T8 s% V* b% \2 U
}( `* J" x: E3 ~# G
# M& n" f( w- Y
|
|