|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 p. q" P# @+ i. \! `# M6 C: Vmain文件:6 L+ y* c9 U, r ^6 N
interrupt void interrupt4(void)
$ I% ~3 d; ]: I, G# k. ]6 U{/ H0 ^, @( q% ~- }5 v
Uint32 sample; ^. b) V5 x2 _2 P, V3 `
8 D& E" Y& t, f& X+ P sample = input_sample(); // read L + R samples from ADC
2 W; Q# h' C# Y* l output_sample(sample); // write L + R samples to DAC
/ J- } K7 u# r return;1 _8 ~% k% q% }4 z- E/ d9 y5 i
}$ _4 x& R0 j( ?4 q
5 W- x, |3 h" W- l- `int main( void )
4 g% |& j x3 c/ w. _$ K* d. P{
! h+ P- Z7 i; u4 n" R* B. C, G, ~. _1 X) K
/* Initialize BSL */
0 x- Y2 C% D! N3 ^' E" g* `3 S EVMC6747_init( );
9 k; x1 O9 E% S K0 w* g$ M /* Call evmc6747_intr function */
! L A' }2 ?3 d' B* w+ Q$ c$ t; X aic3106_init( );9 o( Y$ L( v) B3 [! s
while(1);1 r+ G$ G+ ~; B, m8 d9 ]2 }
}
- \$ N5 N$ B' |8 x6 f
, G* z) E) `2 W& i# O/ ?0 S3 r' [' Y
9 h7 {8 V- X- x/ W2 baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ Z: h, b- t! J" ?/ n0 h/* Initialize MCASP1 */) X0 O) I6 b3 _9 [1 o/ ^" D
mcasp = &MCASP_MODULE_1;# {& |! c7 W. h* |1 e- P
mcasp->regs->GBLCTL = 0; // Reset8 J3 q3 T! d3 B8 N
mcasp->regs->RGBLCTL = 0; // Reset RX i. G+ b' R; S& Y5 _' T) U- `
mcasp->regs->XGBLCTL = 0; // Reset TX$ T# t$ d+ G5 D& D1 O+ B; H/ A& Y6 ]% c
mcasp->regs->PWRDEMU = 1; // Free-running) n3 z( j- I: W1 H, J
// configure McASP0 receive registers
( a. B$ X. I5 u9 n* r mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& G, C+ o; d9 d' Z5 a" d
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 Z- [( W2 ~6 {7 |+ ^! ~3 L
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' U3 H( m- c0 D f mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 ?: W+ ~6 D c) x/ w
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' j1 O9 d5 ?7 M4 w3 `* n
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ H4 ?1 s j* ` mcasp->regs->RINTCTL = 0x00000000; // Not used) I6 O* m9 o2 V) v- y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ ], r5 M$ }/ g: {/ n! r& `9 g; e( p+ n) D% i* A: l( q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- b- B; q3 D* \8 Y4 c% O+ R
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 X9 b3 z* a: A7 p* j! W
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ t; n+ Y7 Z& a6 h0 J$ k# r& k# U mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 j# U0 a) v- ?* V0 G% n mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ W! j4 k4 i) O mcasp->regs->XTDM = 0x00000003; // Slots 0,13 \# N( W3 L! w4 F9 Y2 R( u7 L
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 e: Q. |7 S& C8 H7 J
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 n! [* `9 j9 C# i, E
2 X% T9 c8 f9 H9 `- V5 |. x
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 Y% d) o$ Q: S& J7 [" S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 A' s+ Y# ?0 U& V$ N" J
mcasp->regs->PFUNC = 0; // All MCASPs9 t' ?. P4 v: K# i3 T
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: t5 E7 Y! ~0 R* A8 C- | r# ]* U9 k" P
mcasp->regs->DITCTL = 0x00000000; // Not used9 K! J# H# z+ b* O; j# k
mcasp->regs->DLBCTL = 0x00000000; // Not used0 q+ X2 q: K- k/ |% b4 y' A
mcasp->regs->AMUTE = 0x00000000; // Not used
/ I5 f3 M" f. T4 t Z
6 N' q; m& ~) I0 o1 }( i7 E/* Starting sections of the McASP*/8 k H, n4 i7 W- H* f
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 H/ ?8 g! \ j% Y1 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / \/ z5 k# z0 M; Z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 q. C/ e4 W) L0 W/ F3 x* V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' G/ k; v" F ]; ] K
3 x9 o4 G2 p1 ^" B+ ~ I Z mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 i+ \7 n. p. I5 p$ I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 R$ e8 a7 T" F& t mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . V; h% i4 E4 H8 m1 Q. J6 R+ V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 y! a1 W y! U0 u r; ~; h
" c( b2 c+ i+ ]$ U' P- D$ w mcasp->regs->XSTAT = 0x0000ffff; 8 x4 Y9 q9 p ]& |- |% [
mcasp->regs->RSTAT = 0x0000ffff;
! d! N4 W K0 P- X4 e1 J; w* } D, w7 z
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 K1 c) W7 i- y$ j. ?, W8 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, ?9 M3 n$ z: \' v4 o- j* R9 X- ` mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( ^$ I' G) j" M9 n D* @# \, K, h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 v6 x/ s, z8 G% L S! g" e# z2 m1 w4 \5 s+ e: g1 u
/* Write a 0, so that no underrun occurs after releasing the state machine */
9 {3 ]& x7 ?( K mcasp->regs->XBUF5 = 0;
% U& Z% ^2 g0 p- u3 T% c! K mcasp->regs->RBUF0 = 0;8 ^- ?9 }/ d O+ V5 p$ {( r; L* Z* _
0 r& W2 n2 I& P0 v mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- [# ]3 x! R4 I8 M: K/ c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 l; J! R% G7 G+ w/ } mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* b K5 Z. L0 p( L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 J6 r0 d m8 B- [8 k8 k+ u8 p( y/ ^! C, N0 k1 f" ?2 Q& Y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; L9 x1 O* U' V2 A' I9 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 F/ ~# z# m( a- s0 X/ |8 V mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 ~6 q7 I! c" m0 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. g' P ^" p8 f* [
$ c% I6 e. J( j* A& h/ o, I$ _ CSR = 0x0000;
, Q5 n8 w2 G8 c* _9 c INTC_INTMUX1 = 0x3d;* H7 ?" e- `5 V! B3 I! H$ J
ISTP = (unsigned int)vectors;
( M1 L. i5 w3 d7 w5 b1 k ICR = 0xFFF0; + Q' _9 E3 L% T4 B1 _
IER |= 0x12;
$ ?. u G# j" w1 @/ o9 r9 x. j CSR |= 0x01;
' Y* L* m) p7 O. J2 f4 r0 C( |% |7 r' _
% W6 `8 L: H0 w3 L6 L9 p) m
+ h% H% J4 I/ `" G' d+ y2 I还有就是两个输入输出函数:
|: M' q: z8 qvoid output_sample(Int32 out_data)
, `$ Z k, x4 X( @+ ]+ i! Q1 Z a{
5 A- W3 ]! X: Y5 l& j a' I2 v AIC31_data.uint = out_data;
+ x, G5 }+ I, g$ G MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 V3 I* A; z9 Y3 x* d0 W}
- _5 J! W" {( l* {7 H+ ]) w' p) f& G1 s4 u* K
Int32 input_sample(void)/ h$ a: X5 @, V7 ]) D
{ ) ?- ]. d; f9 i3 u& I- m
AIC31_data.uint = MCASP1_RBUF0_32BIT;1 ?5 y V7 D7 U; Y# P; E( p# v: d$ x
return (AIC31_data.uint);
2 s3 ~' o& p7 q: ~}
, ~, {* b4 ]& w$ x5 @7 F+ W1 @
8 |5 E8 y: R7 a9 u/ |8 M |
|