|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 Y$ C3 e- Q! c5 }8 M
main文件:
! h* e- B' k0 ^interrupt void interrupt4(void) ' N# Z& C0 t0 q. {1 z& I
{" {7 v$ X0 D3 P) B3 P
Uint32 sample;6 f' u9 t7 l" k: M, P7 c6 W$ [9 k
4 K* k; C: v' f& t0 N' t
sample = input_sample(); // read L + R samples from ADC
3 l# P# }# J5 p3 x: u( d; `$ M output_sample(sample); // write L + R samples to DAC 2 m5 K9 I# r$ b {* a- k1 \
return;
1 r0 M, L, D; S0 d}/ ~; g, X8 F [+ H0 `( d
' ]1 E% t5 {8 A6 ]# [" | {int main( void )
$ N! d% k: W/ E! W2 o5 A3 L% b" t{
0 T$ e n% |% g/ W, w) X9 r) r6 q \
/* Initialize BSL */" I' O! _0 k8 Y
EVMC6747_init( );
3 o7 W; |# `7 c6 m: ~/ ]) X& ? /* Call evmc6747_intr function */$ B" N U3 x2 f; I: y
aic3106_init( );
1 b7 Q/ t4 c9 i2 [ S0 L while(1);( ~+ I( G5 F# _. V7 ?0 K
}
4 q( x3 R! i- G' ]* V# x" n- I! ?- v) K2 N# ` j2 K
9 E7 Z0 Y6 s! y4 f9 R r4 Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( b; H/ I, m* X/* Initialize MCASP1 */
: k* Z1 N( [& `# g mcasp = &MCASP_MODULE_1;
1 s s2 |) B9 x- E mcasp->regs->GBLCTL = 0; // Reset" j; D3 T$ j: M% |) a* r2 i
mcasp->regs->RGBLCTL = 0; // Reset RX' h" O/ N/ H/ M9 ~
mcasp->regs->XGBLCTL = 0; // Reset TX: e: }+ e- g; A% _
mcasp->regs->PWRDEMU = 1; // Free-running& L2 {5 A1 E7 C
// configure McASP0 receive registers
! V, `+ k- V0 v* [' b mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: ?5 v( _( t+ ?. S T. h; k. P. L
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% ~0 p) V, x0 e4 O: e1 d- U/ a! } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ }, X- X# G9 v- q% \; }; `
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
L' G# ]. k4 }8 M: C; Z mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% I7 P3 W0 a5 X0 x6 r8 I1 ?5 y+ ] mcasp->regs->RTDM = 0x00000003; // Slots 0,15 x/ a) n. o9 k# f% X
mcasp->regs->RINTCTL = 0x00000000; // Not used, _, t( [7 ^" t0 L9 Y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 }; w. B- e1 i% \. m5 W1 H1 ?& e
X' W" W+ K/ J% ^) R+ v( g
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
4 L7 g/ X& |8 D* F+ G mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 u+ }. G8 }6 x. p F1 a: y! s* h mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! C4 h- ^; L" y* `% H& Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, G- D; k$ ]0 X mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( ~5 G! v W# Y" f mcasp->regs->XTDM = 0x00000003; // Slots 0,19 e& ]" ^+ t# I. Y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 J9 I: b9 F, S% W mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. s" T( z# Y, B0 q( ~
% ^# Y2 N. B8 _/ i6 ~ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN! M5 e) w3 P' b1 R6 S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT! r3 N) t7 ?7 T
mcasp->regs->PFUNC = 0; // All MCASPs
: _) \2 Y( _. e( n mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 D% m4 C; `& _5 l D% T2 D5 s
. Y& c8 W6 k7 p
mcasp->regs->DITCTL = 0x00000000; // Not used
; {$ H2 H( A9 f% L; ] mcasp->regs->DLBCTL = 0x00000000; // Not used' c3 n- V! {. L( u$ z
mcasp->regs->AMUTE = 0x00000000; // Not used
6 P2 }. |' a1 w" ]( Z% @& K
: y5 }7 V5 _* g/ x5 W/ k/* Starting sections of the McASP*/7 N$ ~! l1 q c# J1 L" ?% e& S
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 Q4 @5 f3 H7 P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 3 W7 g( G% l2 Q& ~( {# d
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 f2 n- i% @6 E3 r4 ?) |7 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 E6 v0 `5 X! N! p' }" {% }6 U! c! g* \+ T$ }5 P- T1 w
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( O1 q8 W1 y2 H. z* z( c, L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 w' R+ V$ N: P) f6 Z" E
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ G u+ C( E- z# l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 t" c. O+ Y Q2 o
: X: n/ D5 W, h3 r8 ^& K
mcasp->regs->XSTAT = 0x0000ffff;
3 _1 w+ R' Y3 n- y9 Y9 }" _' p! A mcasp->regs->RSTAT = 0x0000ffff;
1 T0 J1 V5 y5 T2 x- F% J& P: V8 w3 N1 W/ y: J$ q [
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. S( C, H u- M' z9 T; |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" r% e% n2 ~5 w) ^ R mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* _. E+ P3 z! }) q2 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 D$ n7 u. L' j: u( y; ^) e) A/ z0 e" k) [
/* Write a 0, so that no underrun occurs after releasing the state machine */
/ q+ c! c* V( c: i' n mcasp->regs->XBUF5 = 0;' d v) J+ j A9 V6 T
mcasp->regs->RBUF0 = 0;
- a% E. l7 \* c5 Z" ?( [
' E' Z% P: I( C9 c: {+ X mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + ?! n$ |% v, s$ P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& e4 a$ B. O* \/ O
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! U0 _& E6 u; I! W8 a# {. S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 S3 Q9 ]( k0 V& k5 V% M
/ L" D' D2 Z- z% L$ f' k/ P
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * M' o2 z6 S; ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 U: L$ Y9 U+ t7 h
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 S3 u+ N6 x6 n. Q3 |) [& M# b P2 U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 N2 ]2 n1 e t
; v. k0 t: Z" L" i3 E K3 H CSR = 0x0000;
4 E* V+ a$ M; l) s' U. I INTC_INTMUX1 = 0x3d;
0 O; p' x, i, F. F, \: g8 L, B0 W0 A ISTP = (unsigned int)vectors;
) {* O. h) g& T( f! k0 V' i5 h ICR = 0xFFF0; 4 [) r5 j" J0 S+ \; \1 t7 H0 T
IER |= 0x12;
4 Q, E# t4 s& X7 y CSR |= 0x01; ' r3 S2 t9 }: g+ R" C
9 i8 }, M+ Z: n6 C, Q2 _. j- A: _- y2 o
5 W* F2 i+ Z0 _7 E! S还有就是两个输入输出函数:9 {5 K) m+ O* T$ n2 f# H
void output_sample(Int32 out_data)! N; d* Y3 [( z2 ]& U
{! a8 v. R9 k/ v$ o
AIC31_data.uint = out_data; 1 J$ x+ K( a+ t) h/ b& R
MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 u: x- P" Z- F" b' f}; d( F. Y) {4 M- L$ o0 [ Q. i
, c4 J1 X; M$ N7 ?, HInt32 input_sample(void)
0 T3 b! V; X& i- W{ ) b _5 T2 j0 W- H4 s+ m- C
AIC31_data.uint = MCASP1_RBUF0_32BIT;( l |4 P, P1 [3 n2 P) T7 {
return (AIC31_data.uint);# v" c' y. K$ ]8 W- U0 z
}4 j- m, P' M) W E) B, B
* F+ U! P X% C+ |
|
|