|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ v0 o$ \/ k+ r. S: R$ Tmain文件:( X" w- m# L2 z7 a$ J& M
interrupt void interrupt4(void) , W1 t3 V; W5 J% L! H% x* Z2 F
{
; O& h$ D; z+ t+ f4 g" O Uint32 sample;
% N* {' H1 q/ | \" B
) | _4 Z* a3 D) c8 a0 k sample = input_sample(); // read L + R samples from ADC
! F# A% ~" X `, m9 l& j output_sample(sample); // write L + R samples to DAC ; O$ d, T7 }4 n8 y
return;
8 v: t4 F/ [; e O( P}2 h B6 j0 \7 c+ O
! M7 R, t; r% {3 Rint main( void )
$ A w7 m: |) r: B{% d8 a6 l1 y3 m; q+ d; w) D# {) q6 }
) {2 i" o4 W* k4 Y& l
/* Initialize BSL */5 C+ L) a* P2 B
EVMC6747_init( );6 N8 n9 m' f) b( M! C& U
/* Call evmc6747_intr function */& e, O# a7 Y) l8 C+ @
aic3106_init( );, I8 J* J9 Y1 q2 a( G2 z
while(1);
' s# U. |3 i: N, v8 Z- C}
0 k( d" J! _# v+ v2 r( [% V* [+ Q$ v$ j, `1 N0 Z" G& M
1 a( P, f; [8 {7 l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 P: H; z+ A! M' R0 u/ `. v
/* Initialize MCASP1 */, M) F/ X# T& k$ d* E
mcasp = &MCASP_MODULE_1;* }& ?1 C8 y4 N& l, @
mcasp->regs->GBLCTL = 0; // Reset& k! u+ [( C' M0 O+ ]
mcasp->regs->RGBLCTL = 0; // Reset RX1 i- F9 `- u& ]- b. ^
mcasp->regs->XGBLCTL = 0; // Reset TX
- [' I$ D# {3 ~9 y/ g, ] mcasp->regs->PWRDEMU = 1; // Free-running
8 F' x! V# Z5 ?% J9 o U& K( a // configure McASP0 receive registers, k: L' V/ \* H. w6 O) L5 o2 I+ z x
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
h/ q' z' K# D* m0 L mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 \5 E' a7 [: V4 o
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, `, J. q5 ?6 ?8 z8 J& o$ E6 J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" q6 [4 `# K2 L% _+ B
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 h/ f1 I U' {" i9 N
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ `4 n& u6 [ ]& e# @
mcasp->regs->RINTCTL = 0x00000000; // Not used
) F7 M, `) ~, _# n# P mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 J$ u7 H, O8 n( ?# V
' {4 ?; l7 v7 ]9 w" c mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 w* y% }" T6 S; \! Y1 P mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* ~$ g |$ q% N% M
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) S D8 F6 |. s6 d3 J& p
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) m& B7 @; Q: e8 R' s( _+ ?/ I0 a
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 e' D. Z7 f) ~1 H2 E6 ^1 c mcasp->regs->XTDM = 0x00000003; // Slots 0,14 e! N# a8 e4 l4 ]* N" Y0 I
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 I L: m* s; y& m6 ]
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ h# V' x b% W, _" i
4 o$ L6 f% p, W$ N0 W mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, g9 m7 p. [" O. @5 a6 O7 Z7 \) b1 m
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 g* @5 t: [) i6 ]" M' X# F mcasp->regs->PFUNC = 0; // All MCASPs
* ]2 J/ v+ e3 ^3 S3 X& P0 p* F mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( X- d# R$ K0 O! J$ k0 S8 a
9 B" e+ n1 ~$ p( [ mcasp->regs->DITCTL = 0x00000000; // Not used& p) `. b) z- u- M5 x
mcasp->regs->DLBCTL = 0x00000000; // Not used
; U3 D. j# Y% m% y) y mcasp->regs->AMUTE = 0x00000000; // Not used
8 P8 G, s* q) C7 F( b5 ?6 d- L1 ?+ ^, d' D# H& {
/* Starting sections of the McASP*/1 N+ g5 t5 k4 N) v3 \
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( |7 J1 z7 @( A" Q2 @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
) n$ [2 J. J( W* ~0 E/ s mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 M. ] B+ \0 f( n1 D6 e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, T% M0 t' A/ H: C* x1 s! k
# T; F: O7 [4 E! M mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 P( C4 U* f6 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( m( D$ w m4 ^6 J0 J* i6 L7 o/ K
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 M) |- S! s# T* C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" ^* V# ?+ c' r
$ |5 a9 V' U, x3 H: m; g0 M mcasp->regs->XSTAT = 0x0000ffff;
% T' n1 l; i* s. P mcasp->regs->RSTAT = 0x0000ffff; ; x0 ]2 P S# w/ m/ Z
$ t& f, m- U- |3 Q8 B
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! K& V' E# j( p0 }) w1 k/ v. L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 p/ }0 Z7 G+ ^0 d# T( v! J' i
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - U% W5 _5 [# N; z" g& b, V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( H6 S6 k- d: o' o. X0 Y+ j
: p2 R9 x# u; u9 y9 a /* Write a 0, so that no underrun occurs after releasing the state machine */
4 g& y6 C, h6 H+ r K4 I0 F mcasp->regs->XBUF5 = 0;
0 j1 X J9 `4 P# \, q0 k mcasp->regs->RBUF0 = 0;+ U% B9 F- |2 K2 U7 u' G& x
- l2 k" r p- a) W& d% D4 e) Y
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 N3 ^; [+ ^& @- `2 ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& {) L' p: C$ m
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ n" f* v# A- e# N1 ]# z6 w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ }( c: L& U- U4 f8 v- P4 I- ]) r7 ?& E, c; U3 K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) c2 v8 ?0 K) N# T0 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ E) v9 |* d& `5 m4 ^
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # n V; g7 _( D) X: X! Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 m7 ^# d% y' Y# j8 l$ ^1 c7 N4 \
5 Z( v* U* b- [. v( G7 I" D" w
CSR = 0x0000;
( D: @, q0 C! J- b6 M2 r$ T8 [7 H: G INTC_INTMUX1 = 0x3d;: [6 D- j6 c. z! S9 g- U* _
ISTP = (unsigned int)vectors;: d/ G' B& I8 G& k0 B L4 a/ R9 k( W
ICR = 0xFFF0; 8 x$ V: [- V8 p) V; v8 d( _
IER |= 0x12; / z6 e5 `% H: x/ i
CSR |= 0x01; & `5 b0 V: I, |1 i& ~
. y. }- U4 [1 j5 P K5 n! i1 O. a
! n' I- L5 @& w* x
0 T4 A9 `% j+ z$ H @: v; Q还有就是两个输入输出函数:
8 i" v2 @" r7 C2 J g1 j/ ovoid output_sample(Int32 out_data)) l+ a! W3 x; c& M* O3 V1 W3 S
{
' r6 P: h) c5 b: c AIC31_data.uint = out_data;
% _* ]# r5 v3 f8 U0 M MCASP1_XBUF5_32BIT = AIC31_data.uint;5 d' W, y" |; X! O
}
- D# j7 B" K! d2 x, J+ L" z2 V* u5 R( n
Int32 input_sample(void)- i, r2 p s6 y8 v" a" c1 K
{
# q1 i% |; O8 g* ~4 X$ O' m AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 Y( S" E+ u7 n5 F4 j: n return (AIC31_data.uint);& p- \+ g2 N T" M2 N
}
' O; q% d- c2 O1 e) t- {7 ]+ f5 Z _, d" T8 B6 K% F% Y
|
|