|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 X$ d6 I8 ?. Tmain文件:
+ R& p# t0 n1 N' O* Q# j, S/ y" q1 Ninterrupt void interrupt4(void) S! ^; x6 t y$ }8 p+ R, A
{9 Y# V# a# C7 {) C. H4 \0 f" T0 E
Uint32 sample;) D. e8 V" R" o+ E
+ |1 o" L: W: [* @% _- N sample = input_sample(); // read L + R samples from ADC8 B, c9 L1 R2 B2 Q, X, t
output_sample(sample); // write L + R samples to DAC 4 n* Y2 h+ B8 }
return;
3 Q2 O7 C4 ^. K# Y# X}
. m. q8 ^/ |+ \. ~2 U* a0 o3 _; ^0 G1 {' c" g
int main( void )" c* V+ v+ U. C) w. b& V4 x
{
5 Z" H6 A3 H0 G4 m# W
/ B# E" f" E5 s/ y0 J1 { /* Initialize BSL */
; A% K$ ~; K( s% z8 V0 _ EVMC6747_init( );
, A' s: J9 M8 y /* Call evmc6747_intr function */
9 W/ N6 ]2 X7 u6 s8 i; P5 r: B+ o aic3106_init( );
' K* J/ j) v* f3 j( Q. z while(1);, [$ U2 u5 q6 I' d/ K1 O/ t4 K
}/ z+ c& F2 E! O' A& l) f
- \) s. ?$ W2 Q4 i2 ?6 \2 s
" ]4 G- K+ l2 _# @0 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 l9 e9 V7 ?" H% A% Y
/* Initialize MCASP1 */
! y( _( @6 _3 g+ d3 i8 n mcasp = &MCASP_MODULE_1;" D+ z; {3 B( ~, g$ j" C/ H
mcasp->regs->GBLCTL = 0; // Reset( Q5 f1 C: Z$ E; u
mcasp->regs->RGBLCTL = 0; // Reset RX
6 F+ F' y! _8 V/ B; y& O mcasp->regs->XGBLCTL = 0; // Reset TX! I. U% z/ X# s6 ^! m% T
mcasp->regs->PWRDEMU = 1; // Free-running
% \1 [5 ^/ ~3 b% ~8 i& ~7 O // configure McASP0 receive registers
7 w, B4 P' F, ]1 V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
+ o. M; D6 E5 y3 ~ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; ~, I( N: q4 q5 S9 ?! f+ F mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* v6 f" f3 U9 d0 p% S7 J" C6 M S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ e6 y9 v+ I) _" z4 a1 a( N mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 ?$ G: F6 o2 z
mcasp->regs->RTDM = 0x00000003; // Slots 0,16 N/ n9 a' Q9 m9 |+ v* m' O
mcasp->regs->RINTCTL = 0x00000000; // Not used! {# l/ D& D# a* m& _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, F) {" |. Q* z% ]; J
" P3 z2 U* \+ |, @' e5 | mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
- Y G, y& r5 R9 }7 D. w! H mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 `/ g4 A4 @4 p# G h& b9 r mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- T& ~% a! X5 N; j0 o& M mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. [% h C- T& R, s mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 z: G/ j& }! X% V: @4 ? mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 G' P: X% Z2 B5 n* ^4 } mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
' m& {" @0 q9 c4 H2 R/ z4 _ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, J) O2 Z5 T" M$ [4 X5 z; X& ]2 s1 b- w
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: `( d; x1 l- Q0 l. E) S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ E$ Z* ^$ \$ k mcasp->regs->PFUNC = 0; // All MCASPs
1 _' L5 p# f3 M8 \* X" y+ Q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ R% ]& d; F$ k1 I" ] l, ]# z3 a! Y& I* c
mcasp->regs->DITCTL = 0x00000000; // Not used
; K! p5 @% S; b) ]9 y: n mcasp->regs->DLBCTL = 0x00000000; // Not used j7 ^( x+ ~" j2 ~; W6 u2 ?' |: z
mcasp->regs->AMUTE = 0x00000000; // Not used
) x, ~% {7 ^. ~% e. Y$ x, _; C# t3 k$ G. j, R7 W& d
/* Starting sections of the McASP*/
. Y9 `# f; l$ a- u# a mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. o- a z. ] L4 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . I: b! Z# o5 G. c: O8 l4 a. s8 x
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! H9 H2 C5 o1 M& ~% H& l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. L" \7 z/ t9 I
. u4 G, \) N3 ^9 ]7 C0 T mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ ~9 W6 \" p; _% v5 V" L7 f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! E# K, E! K% r5 J- b. e) ]" f
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( F. j0 a0 ]$ T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& M5 u6 ]6 A( g. a! v0 _
1 p4 T* V: d" u8 Q
mcasp->regs->XSTAT = 0x0000ffff;
* {1 r1 Y* Z( |0 i0 _ mcasp->regs->RSTAT = 0x0000ffff;
# `) B/ { D- r& D% r1 o" m& j; p+ L$ E
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- M9 b# R, O, w# j0 g3 ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 o6 P& m; y; k; m
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 w3 w0 m9 Q, E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 a4 \* E5 ]! C: X/ V5 U! H* E3 B
( b$ q0 u: N0 F* _5 u; G
/* Write a 0, so that no underrun occurs after releasing the state machine */
3 J+ l( {8 N' x! w# X7 Z: J* R mcasp->regs->XBUF5 = 0;) c* d) L! Z0 u: |+ q; k
mcasp->regs->RBUF0 = 0;
$ ?8 f) H6 Q" T! j+ O3 ~! d, |* a1 l4 D
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 D8 b$ o1 v' c" A1 Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ [) B2 @, f1 S! r, a: o! `# f mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + G+ h' j8 y4 E3 f' w! f( ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" [: r8 J% @) F7 a2 z; z
' [6 _7 ]; W/ z: Y3 J8 Z6 N mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 q4 Z9 ^/ p* h- X8 g q% U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! z! v" @7 W. X7 ^2 ~
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - G3 ?0 w/ N4 Z- z+ @# c/ T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# F* m; J+ ] k# t4 y& |. V" @2 O1 {: i
CSR = 0x0000;& q* r5 V( n* A, d0 p2 u
INTC_INTMUX1 = 0x3d;
) U* P3 C) ~/ I$ [& m ISTP = (unsigned int)vectors;
. O, g/ i; E4 m& N% }: j) Z' g- c+ S ICR = 0xFFF0; d4 s% Q5 g# X1 P. O- u9 d" \
IER |= 0x12;
: B( V% \4 m3 N% |& G CSR |= 0x01; 8 H; S" A) E0 S
+ ]4 ~2 v: T2 L! F# R) c
/ e& Q+ X- b- I( X( S- @5 i$ j# J. A8 b
还有就是两个输入输出函数:3 \+ {, h8 H4 R6 U7 k6 O/ ~1 g
void output_sample(Int32 out_data)1 M% o. s( [+ s9 U0 {( O: m9 ^7 R) Q+ T
{' Z% I# \) Z# k) N- {
AIC31_data.uint = out_data;
3 m; @4 O3 c' u" x MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 {! N' l+ D q# R& ?0 V; O}) c( T/ O% Y8 Y6 x* H s
% n" R* b: E( \Int32 input_sample(void): [( Z( {2 {" E
{ " @$ m5 \% Z, `1 ^4 v V- }) l. d
AIC31_data.uint = MCASP1_RBUF0_32BIT;
" J/ a r0 E- d7 p/ D9 q% z& s return (AIC31_data.uint);2 G$ F# `4 k" I, j
}
3 O( F }# ?, b2 ?/ z1 n# k W b* n' e6 ]
|
|