|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: R+ P. ^3 E( K2 d/ B$ imain文件:
" v& E9 o2 k/ e$ T% e+ Qinterrupt void interrupt4(void) , t1 X' e' @8 {1 |( Q& p% Y- \% g1 B$ }8 G
{2 s, M$ N. V! V' n( v* j
Uint32 sample;
* l9 Y, T# T* B1 `, n9 V! k: u
3 W4 B3 G+ ]. {. d$ x5 y+ W$ c; R sample = input_sample(); // read L + R samples from ADC# m. ?. E6 n6 O# C! b y& ]& [% V
output_sample(sample); // write L + R samples to DAC ; B2 L) |# Y" ~% e+ m# H/ H
return;
: m5 C% }; Z2 b* I7 ~& R}
- I' z! ~8 w( C" y1 m6 {; E+ u! j' {0 O
int main( void ): X/ r7 y- ^9 J" D& Q$ W
{
! B! K. G/ f. J# @# I- K& y5 {& x y2 v- O2 P9 ]: U
/* Initialize BSL *// b% [3 M$ o. B. ~- l
EVMC6747_init( );
( W- `$ d8 o O8 ? /* Call evmc6747_intr function */
]' |% u) g$ ?( b0 o" o. b aic3106_init( );2 M4 C1 Q! n2 `8 s
while(1);* h6 F+ Y6 ?, z0 m. }; T* q
}3 E* l U0 d9 H* I: T) s
* `4 P: h. ^& j ? l4 s9 p# X7 @. N" F. J5 |3 a: [0 ~5 Q2 V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 m. {) Z4 t$ S. ]/* Initialize MCASP1 */1 _/ G" Y% y8 Z' z
mcasp = &MCASP_MODULE_1;: ~ v' h6 @1 i7 u% l. n, @( R
mcasp->regs->GBLCTL = 0; // Reset
3 @9 Z3 W3 |9 N8 z2 G: ~ mcasp->regs->RGBLCTL = 0; // Reset RX
/ }$ d( {% ]$ l& p mcasp->regs->XGBLCTL = 0; // Reset TX% ~* q- U1 @: ?& w
mcasp->regs->PWRDEMU = 1; // Free-running
$ N' h: k5 T& Z# I7 b/ S) ]0 U // configure McASP0 receive registers
1 H& d7 k* @% i, h Z2 m( T% q! F- N mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, E/ v# B9 Q. \9 z! |3 Q3 S
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; _$ t6 s# Y+ z% \' @2 R9 ~. t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) w2 \- S# ]: c, P mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, }: \# Q$ v, u' z$ Y4 n4 P mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 a- N# t9 L" T' [ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
: R5 \: _* C( X/ C; H8 A+ _$ i6 Y mcasp->regs->RINTCTL = 0x00000000; // Not used
2 _/ S2 a% Q# g- I6 x3 ? mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 d. T5 h. V3 o( S0 ?' ]7 S
- a6 ?; h6 Q" T& E9 h mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, _; _ f0 m) ]# i
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 B5 Z# ^- r z) o/ n$ S* ^
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ o4 r, o; Q. H4 l1 |5 v mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 T9 D7 b4 }4 V! O/ I( M mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK4 F3 S% K& D0 e( r K
mcasp->regs->XTDM = 0x00000003; // Slots 0,1' k, O6 L5 d* \, D4 ]; e* X
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, ]7 G+ s$ K" M+ }6 I0 z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 [ v8 U- a. y8 i. [5 v8 u! f) `
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 }3 T6 l/ `; a) t- c1 C' F4 w! G' X, F
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT% S8 ?" y3 d2 q: F* O6 ^) v
mcasp->regs->PFUNC = 0; // All MCASPs
: W% M, k! p) _ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 h2 E7 C8 ?: a- }' b
- A" v( E$ w, t7 h* C2 H, N; u mcasp->regs->DITCTL = 0x00000000; // Not used" \: [3 ?/ u: [! H$ t
mcasp->regs->DLBCTL = 0x00000000; // Not used
$ a) k8 u) ~1 e- | mcasp->regs->AMUTE = 0x00000000; // Not used
# Z9 N) C& J. s8 W1 i& w8 Y. q$ q8 \) A& }
/* Starting sections of the McASP*/
# A" c" K' i4 y3 u mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( |8 P: W5 Z' u0 @1 h' M/ \2 O7 V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , g% _, Y' e5 |+ z0 v" F: `
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 ]% {, F% `; Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 D0 Y* s1 k( h8 V% p; e
+ q4 F/ g) t5 a+ Y. F mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- m% O/ T @3 O; j) h% B0 ^3 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ L- K6 c& [" O7 m7 F, A4 _" r; y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! p8 o/ n" }6 s/ k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 O, d' J1 S# r6 h% Q; S
4 X" u! X6 B4 a, }8 g* e mcasp->regs->XSTAT = 0x0000ffff; 0 [: S; o- N7 ]
mcasp->regs->RSTAT = 0x0000ffff; ! T& F7 X6 l: ~1 \ V2 J5 \
7 J; X' Z; K8 x5 l7 K( G3 I3 q+ j
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 i9 d% D+ i$ Q8 ^+ j" E* j y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) [" l! w2 X3 k: {6 q8 F" ]' j
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . y% j" M/ ?( u6 P! |- t# [1 F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 Z" Y& V* J/ V" Z, a& S- X, q3 A; }- ^8 O) w6 @
/* Write a 0, so that no underrun occurs after releasing the state machine */
+ x4 Q4 e7 Y7 j8 ?- D. O9 m) R mcasp->regs->XBUF5 = 0;! R6 D |% J0 v- ?! Y5 j
mcasp->regs->RBUF0 = 0;
3 i. E5 C' G: Q: S8 q* d/ g9 Z; ?$ F, v+ k( }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * u0 I! ^/ m7 c# |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- F7 r8 c- a9 {: ]+ s. w! G R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* k2 A9 T" w$ C% a; M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 t7 G* M* W; M( d# y, H
4 @2 x0 x4 v T/ i' Z- E
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 p$ P" ]) ~7 c2 ?4 f' j3 X$ ]& ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( C; l j8 F; t
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 d& T& w: M/ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: R) }$ V. ^& U& Z& K5 a
& E0 D9 ^9 \" C f9 B CSR = 0x0000;
- g2 A3 ]" ~& x6 E m6 v INTC_INTMUX1 = 0x3d;
Q1 D/ t: a. m, o8 @ ISTP = (unsigned int)vectors;
& B8 R1 @4 n& b5 J' y8 B+ f. z5 e% h ICR = 0xFFF0; 0 w1 }; A. {% F l
IER |= 0x12; ; u' s: f) q( `' F+ S( y# \1 m
CSR |= 0x01; . y7 J! i! S1 ]$ P P
% R( O' e9 e# ~7 K5 a$ O7 ^
' x6 Z- O+ D$ m0 r* d
6 _: C: `# @0 _# K还有就是两个输入输出函数:
3 r% z5 d6 |+ l; ]1 Rvoid output_sample(Int32 out_data)
: N+ C- g! ?( Q# S! W" S5 V{
- Y; ?' q7 x; j" l AIC31_data.uint = out_data;
. O/ p! \ f; d) o& q5 X/ I MCASP1_XBUF5_32BIT = AIC31_data.uint;
. p9 y" d' _/ s2 ]}' f( D2 j$ P( s( j
0 F% J J- B$ ?$ Y+ o! j& P9 z6 W
Int32 input_sample(void)
" f" Q" ^; E- T: u$ G{
! v! V2 s# E9 H' G AIC31_data.uint = MCASP1_RBUF0_32BIT;) k. r' A4 e d& x
return (AIC31_data.uint);* |6 H5 X3 q4 Z; l
}2 V6 @6 w8 C" R8 L6 q
`& c1 m( t. E( \ E0 }" ^ |
|