|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ u! J& V+ A: wmain文件:6 d+ _0 _# n3 W; ]# k5 `8 p% T
interrupt void interrupt4(void) ; q( g3 p* C9 C# \
{: j! Q: P/ M& B" Z8 Z I
Uint32 sample;* K! E& a# r6 L. ?, {: ?* Z, V
8 c, J5 X e5 I5 |6 @! \2 e
sample = input_sample(); // read L + R samples from ADC1 M0 v( \" L! H) q% o. z. b5 n
output_sample(sample); // write L + R samples to DAC
]# y& a* k; Z: k return;
3 A$ U9 r, L( I}1 d6 _( d9 Y, g* X9 H% a2 K
- t* E+ T7 p+ O7 E
int main( void )
* A: O1 B% z1 K+ X, W{* b9 ]) q% V' h! S+ n
8 z2 _& {2 K3 l8 n( A9 t
/* Initialize BSL */# L! h5 S7 o, b
EVMC6747_init( );
% @. U3 P) Y' ` /* Call evmc6747_intr function */
" l8 I7 M# }, q aic3106_init( );
1 H* f1 f* M% V5 i3 w while(1);3 @) K% p8 a$ @6 \* [
}
6 ]2 f Q8 z- A; B' K5 A2 @% v$ Q& _( c
, x9 w7 u5 v! c3 d0 ]6 kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. A+ Y' B2 N; d! N
/* Initialize MCASP1 */
3 u) b9 {# V2 e" {; h& J& o1 R5 c mcasp = &MCASP_MODULE_1;( A9 ]& v! j Z! c8 B+ o* j0 ?2 v
mcasp->regs->GBLCTL = 0; // Reset
* e4 e7 t; T2 ]: B: _ Z! T7 t& Y mcasp->regs->RGBLCTL = 0; // Reset RX! b w+ \) T$ L4 T7 V0 }
mcasp->regs->XGBLCTL = 0; // Reset TX
6 |( o9 }; G7 H/ v3 S mcasp->regs->PWRDEMU = 1; // Free-running
* }; G5 X5 x7 ?8 M% A5 q4 _) y // configure McASP0 receive registers
3 [9 Z! h8 w' T mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used m, s6 l7 B* s. W/ m
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. M, Q' d. {: s* U7 w
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 a& n m; {& v4 O
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 f6 X9 A# i4 Q4 u" x9 \ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 ^5 N8 @' Y5 l7 J. a
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
3 `: w- D, v* p2 H mcasp->regs->RINTCTL = 0x00000000; // Not used9 q, n: Y0 n. R
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: [$ D8 Q ^+ Q, o+ I6 ?8 m/ f* M" |2 {
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
5 n! S8 L# F9 ?. N* o: _# u4 k mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 A& [- n* t) ?( ~, I mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ e5 Z9 w, k2 b6 r mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; u1 B1 d5 h! {' m mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- D0 w/ |' M- B4 L& K$ c
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' z0 g0 a4 q$ W- ^ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; i x: }9 G/ P9 x/ r' y mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 o4 n; R# _+ Z( {
% W/ \( H) T/ Z5 s" i2 w mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
# {% a* z6 b7 R% K: b- R mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- l& c. t& Q4 k z# M) l" A: F
mcasp->regs->PFUNC = 0; // All MCASPs5 E- M0 ]' E/ b. r, f
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; `" C5 G5 `, l, @- \
" }- B- o& B3 d
mcasp->regs->DITCTL = 0x00000000; // Not used& t) p* F! W9 r. @8 O
mcasp->regs->DLBCTL = 0x00000000; // Not used
. c1 J, f$ e$ p' [+ l& v( H mcasp->regs->AMUTE = 0x00000000; // Not used
, k4 U& G0 ]) z* k" ~3 a
# C% a- i1 v8 c, e: J& S" d9 I; q" Q/* Starting sections of the McASP*/
; p. y0 g9 P2 }% e" V; |6 |7 |5 d mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 y9 o$ u5 I: P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
p+ z0 {# A: t mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; ~5 l6 Y, D x/ i# c2 O1 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ E& y3 B8 I: W1 a# J7 L/ X g. k' a
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 T/ _+ Y0 u8 x4 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( [9 d T# S* W mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * J! j4 y% P: U/ h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 w: F9 v V$ ~' ^7 m
' x3 h$ o# l$ \9 w; J5 A( L mcasp->regs->XSTAT = 0x0000ffff;
8 B: z* b, O' P9 A6 F% P3 C- c! s mcasp->regs->RSTAT = 0x0000ffff;
; J7 g+ R" `2 c3 B! u
2 i% G+ a8 F" I+ X6 g mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& l3 E3 C1 Q: b" _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( h, U9 c% ^. n4 {! `$ @4 I. h mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 Y- V; X: }, f' r$ E# q* Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 ~. w( X4 d. X% O, H
! n- [; S7 L6 {- `. S9 H /* Write a 0, so that no underrun occurs after releasing the state machine */& M' g( j( |% d8 k8 t; G6 l; p
mcasp->regs->XBUF5 = 0;
6 R. U. I/ j8 y/ h mcasp->regs->RBUF0 = 0;+ W. G* n0 {1 O8 D& ?3 Q* `% m- P
' J4 f2 A4 \! I$ I, j$ S mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . ]/ Y5 k; B; L2 i' {; j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ d \. F! g0 D. _5 R mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . g& _! V- ~& n& m6 T2 ?1 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, X% Q9 c6 \& P0 Q; T" h
. ]- \( i* n5 {8 p1 g- s mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 J7 a; p3 ?, N' M6 E. A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 [6 }5 L" {: }$ Y% z+ f
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 R; Q: o5 }( Q7 G* o' x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; {. B% G7 o! i$ ?3 w( K) y& w1 ^' a/ R
CSR = 0x0000; z1 @. m7 W' r/ n+ [0 s2 @) T
INTC_INTMUX1 = 0x3d;
4 `# ~* U. p7 g3 B4 W* \$ F) g# a4 {* M ISTP = (unsigned int)vectors;
4 L6 H9 h- M' ] ICR = 0xFFF0;
7 U3 L4 q7 E' Z* c9 \6 u- D' J IER |= 0x12;
: w5 J% t9 J8 k! r+ L# V+ | CSR |= 0x01;
4 A/ n1 p* U5 o: R0 _! Q& B6 J
% k7 t* p% m9 T: o9 a# ~0 U) \
/ K8 n" j# f5 `& Q9 J, z" ^! N0 R9 W" K0 T8 x5 P
还有就是两个输入输出函数:
7 i) a! f; c5 G8 {$ L( t4 W7 \void output_sample(Int32 out_data)
. c5 g6 h6 K% [) c3 y* G/ I7 a{
8 I7 M# p) q& _& b* [2 \& D) k' z AIC31_data.uint = out_data;
( F' f/ M: N c( M7 c MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 t; K) h5 i& o9 h# ~6 D0 Q}
I9 s8 R. P& s( e' V# O/ g* c9 v0 {9 L2 ~
Int32 input_sample(void)
5 `& X7 ^ I, f& V9 @2 J1 Y{
0 X' @3 D9 L- c- A4 h AIC31_data.uint = MCASP1_RBUF0_32BIT;# n+ u& t* }& R! R4 S2 k
return (AIC31_data.uint);
& l' t5 W9 J2 N7 y* ?5 _/ R9 \}8 Q& f$ ~. R' q. \- l
0 H; K( C" I5 E# ] |
|