|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 P1 E' p- d. n0 n9 F! Cmain文件:
. {* l4 F. h& g5 B0 T& l7 U* E# [6 yinterrupt void interrupt4(void) + a; i! }) j6 S7 o; _# B+ i0 f" Z
{
6 I9 u E# {* z8 |+ E0 t Uint32 sample;
) j y* i3 E% V/ J
& n+ o1 a% K* }$ I' m! e sample = input_sample(); // read L + R samples from ADC6 V/ {( `5 T9 i5 ~6 q/ T# L
output_sample(sample); // write L + R samples to DAC
/ {& l, F3 [- I* Q4 z. m+ o" ~ return;
9 a4 ]$ c! s( K" p3 ?, Y}; t; k% L4 {7 l* _ _8 r
' n. t: V, `) N: A# Z) Dint main( void )
+ C5 X: ?- z! Y$ F( m0 P4 v{& I: Y' j. {3 `& [! U4 A8 D! n
4 d/ e! z. W7 @9 y5 \% O
/* Initialize BSL */7 ^% U. W9 K. o1 {* P
EVMC6747_init( );0 M4 i' Y$ k0 H$ m1 N
/* Call evmc6747_intr function */0 b) Q* t5 o* I- v- U1 x
aic3106_init( );% t4 v: l7 x1 e2 Y( m
while(1);
+ p5 L: {+ {. N( x, `8 Q, F} O0 d7 [+ p3 X# D, D; P
- ~) [0 O$ Q' o+ [" u5 L
( {4 {0 f' Q6 {9 eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 M( v3 M* e( T& j: X& {5 e' K/* Initialize MCASP1 */
! F5 J {. P4 |" z; J) {. E mcasp = &MCASP_MODULE_1;' w$ A9 ~; L' r& H, y, a3 \
mcasp->regs->GBLCTL = 0; // Reset
% x. d! l7 ^! T! U+ J% C mcasp->regs->RGBLCTL = 0; // Reset RX' o; i' P4 W& b
mcasp->regs->XGBLCTL = 0; // Reset TX
3 I$ V7 W0 j7 r7 c/ |! ? mcasp->regs->PWRDEMU = 1; // Free-running, J( R- B- o" L0 j
// configure McASP0 receive registers
/ s0 O; y% E1 K" L8 ~/ Y9 _( u3 ^ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# ^& X; P/ h: Q- F mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 @/ a; b: b9 l& S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# I6 A% z6 {/ _5 l# v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 D" t6 u: z0 H# i1 e2 W# @! _ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 s H2 b. B9 \ mcasp->regs->RTDM = 0x00000003; // Slots 0,1" C( e1 E" u7 l/ @# P( X4 E$ a
mcasp->regs->RINTCTL = 0x00000000; // Not used9 [; C j: q6 `+ ~2 |1 X
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- s7 F! ?( p6 _, g7 J, R2 w
: S# @- [7 i; g; B" C
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 @ s( a; I+ P5 G5 M
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: v- t1 A1 e) L# p( T: J
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& {: n& C& }$ m mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- r& ~* T+ w; _6 z( t mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 }: z H. m; l8 A" a( I
mcasp->regs->XTDM = 0x00000003; // Slots 0,14 k4 L- L1 b R
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
& M$ \, c6 R& W mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 u" v9 B2 s: @6 o. w) `
# O- Z/ b& B5 [: Q0 ~' r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN3 Y9 N' G' q) P% P6 Y0 x% U( D1 R, U
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 K- C8 V- X- Q1 p mcasp->regs->PFUNC = 0; // All MCASPs2 P8 t( P- j9 }, }( X E. o
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% J6 W" ^# c; L! g8 A# W
$ t; q6 f1 P# Q% T* `; [
mcasp->regs->DITCTL = 0x00000000; // Not used
' v9 j- M; W$ W9 @, l3 a# v7 \ mcasp->regs->DLBCTL = 0x00000000; // Not used2 k9 y4 @4 V5 S* m/ W
mcasp->regs->AMUTE = 0x00000000; // Not used
% D% O1 K* w/ a( i1 C
4 b) _" `: G" u) A! s/* Starting sections of the McASP*/" M7 S0 l* _! X
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * c1 S1 B: S9 t# I: X$ c: u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 H( v; V, f3 O mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. {0 a: {% i% F+ R4 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 E. |+ s) D' u6 t4 ]
5 B Q! g( N( H9 P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 f+ ]5 ]( w' R/ y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# \; M* S/ y1 H7 r mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 m( \6 o3 y+ \9 |: d5 c2 t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; U# N5 a* b; t) R1 q* i2 i4 M, Y& q& b9 o! G' ~ l: |; |
mcasp->regs->XSTAT = 0x0000ffff; : e+ F% {* Q' I+ O2 T: M4 R8 i7 M
mcasp->regs->RSTAT = 0x0000ffff;
' T X* n" X8 r! X0 B/ y$ [* V9 Y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" K/ t$ G: Q# o) d: {& H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* J1 C4 {# j6 I2 k# |# E mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ k; I g; Q. A! D" g: \& i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 X* ~+ M9 [( K$ e$ |! V
! c; o9 w. n/ J* F /* Write a 0, so that no underrun occurs after releasing the state machine */8 A9 r% G3 i$ Q. y2 T- e; O% E
mcasp->regs->XBUF5 = 0;
* k/ m$ H# O4 ]' [ mcasp->regs->RBUF0 = 0;
D, `% b# w2 A2 h8 I; s
- ?: d' y8 o# Z' p: b9 d) z mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 ~& @! r) Z- U6 b; T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 q2 S$ W4 N: i# M2 X2 x
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( Y" j( e) ^3 C; B4 H ~9 `- n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( {2 ?3 p5 c$ A6 k: S0 T
! D1 T$ P u- b0 F J3 O6 \ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 I: {5 |* }) v. h' Z5 m2 @" f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# t. s# w( B, U; p) `# e: c
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! g3 L3 E( O! C! ^; m. Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( i h) d* d9 j4 G8 }
) U! j/ S& F [: ]$ d CSR = 0x0000;
. ~: r+ {% F' p' ^" J$ h/ ]* E INTC_INTMUX1 = 0x3d;
2 o7 W Q0 X6 M4 R! u$ u, j ISTP = (unsigned int)vectors;1 I) `3 j( G, m8 ?+ W" h
ICR = 0xFFF0; 7 s i* g# k! j! d' }% ^
IER |= 0x12;
7 G6 m$ q2 s* t# i' @4 ?4 g: f CSR |= 0x01;
" o% l1 C( O1 W6 Z, N" U
: J" b3 C6 R( g0 H0 o; y# d: E+ `- F5 m3 C5 u( b( Y
/ ]9 G" |; U1 e
还有就是两个输入输出函数:2 M7 u8 h: u: }& {8 q3 M/ T
void output_sample(Int32 out_data)$ U& ~, c: o6 A7 I
{2 h7 x* F8 Y, K, n% \! G
AIC31_data.uint = out_data; - J5 N, R# A: Z& i4 d7 l
MCASP1_XBUF5_32BIT = AIC31_data.uint;9 c" X/ I8 } @" r: [
}
9 R: ~( Y% ]2 W U7 D
$ `8 j1 V( v* q9 R. z9 G' E. E2 ZInt32 input_sample(void)1 L$ M E5 \5 L3 o# z0 D' J8 A; f$ `
{ E _* X& D! y/ n- }& k7 E! Y$ \3 Q
AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ K' ~: ~6 A( \! j9 u return (AIC31_data.uint);
8 b8 \- e6 s* N5 m% n% ^}
6 A0 W9 ^. s2 c+ q% R% z5 u# C) _& _/ e6 [# z8 E
|
|