|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: K& F3 ^, H$ x: _main文件:4 ]2 Q, n* Y' y
interrupt void interrupt4(void)
4 L: \8 u1 Q4 O" s, R0 b{
3 Z" f9 g4 Y7 K" ?+ V6 {, v Uint32 sample;# K" _# t9 J( p4 ]5 W+ t8 s5 x
. C) ], L/ l; ~% N6 i, a8 `/ j sample = input_sample(); // read L + R samples from ADC' }" }6 v' I1 Z+ C! ~# t0 C
output_sample(sample); // write L + R samples to DAC
7 \* t7 S4 `0 [+ z0 N, `4 J2 H' a return;" Q+ Q( Q8 W5 ~; p- W
}
; u1 C. w( e+ U: Z. `8 r9 R4 B9 E" k( c9 W# \9 i- |. u, c
int main( void )
, U( m/ Y. e$ k8 ^{
: u4 A0 \3 R0 O$ ^# U# r7 R' f: N6 B7 G) Q" C8 q
/* Initialize BSL */
( m$ Y* a5 F9 ]( u7 t/ ~7 h* A EVMC6747_init( );
- E' L0 l7 w6 C/ ?+ J /* Call evmc6747_intr function */
- m/ j' Z$ S) ]1 K. C1 L3 a' T% t' w7 ~ aic3106_init( );
0 o! L1 U% f$ {! _# ~* d/ G. @ while(1);
( L; d. j% |- y# i2 h}" O \# k$ P) a& K9 @
! H5 t; J( _, Z' Z3 v% T; w1 ^! Q2 u2 g* O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( L9 ], B; q2 e9 A2 U: Y6 v& E& N, ?9 v/* Initialize MCASP1 */
; [# |! D( J& j: q+ b$ j mcasp = &MCASP_MODULE_1;
M& u* u: C( f1 L- I0 [ mcasp->regs->GBLCTL = 0; // Reset j6 H) S8 ~6 n! `2 Z' X
mcasp->regs->RGBLCTL = 0; // Reset RX) s, ^* w9 y$ c0 G; A* u
mcasp->regs->XGBLCTL = 0; // Reset TX
& h2 S5 l2 C; J' [9 k6 T mcasp->regs->PWRDEMU = 1; // Free-running! {6 e" ~8 s5 z i
// configure McASP0 receive registers
9 P5 ], ~7 r% n1 c) Y8 \3 c mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used2 s$ M9 T: q: }% C
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* {4 [5 c# Z' a) F3 S/ A
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" n0 T# {1 B# @, E: P2 T7 u mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# r. |, m# @ x" a I1 u, e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ J% M& s7 k" ]- z mcasp->regs->RTDM = 0x00000003; // Slots 0,1
9 E) J0 V+ D- q# [: V- N: d mcasp->regs->RINTCTL = 0x00000000; // Not used
. J; f4 e/ a$ f1 K! X* }$ ], X% { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( _ k& Q( n! x
, ?- l, ]2 C) r* x
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
: h0 x8 H/ y5 b c1 U( F- N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( D: N1 M( q* m/ G3 s7 `8 z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# c4 W6 O( E8 u" J _' z1 I# Y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 A; s* ~" L8 G$ e9 l7 G
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 l( v2 m6 F3 f9 E0 t! {' ?4 [ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
0 W6 l* Q$ u( T* _ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit2 a; F a5 \1 B' O
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 Q+ } o" w; a' k4 E% B. C
1 n. D3 g3 j3 d: e mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 g p- `! b# K( t- }) r, x mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 i q& N" a. ~. t, {
mcasp->regs->PFUNC = 0; // All MCASPs0 q4 m1 L' x1 N% e# I' {" I
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 T, l K3 e7 n4 v# }9 s
@5 }- {/ A4 s9 v7 l7 d mcasp->regs->DITCTL = 0x00000000; // Not used; K, C# X" n. R( B0 b+ f
mcasp->regs->DLBCTL = 0x00000000; // Not used/ `( X3 T+ h/ }+ [) G
mcasp->regs->AMUTE = 0x00000000; // Not used
2 |* p# B2 D" ^- D; W9 @. j8 w
' ]& b" _+ c8 O! c5 I9 `/* Starting sections of the McASP*/5 _& M- J6 X% j# I+ }& i
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; j2 ^2 Z3 a! O. a, g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 N' o8 K" j' K! A! e mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* k. n5 ~% u8 n: @! @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ t* L9 n' W( \% U0 }' O
3 ~* J8 ^, n# D* F T mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 Q, f5 W# S" r0 L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( R8 n, f g' T+ ^' K& y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + z G) Q4 E7 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 s+ [% M2 E& ~8 ^$ Q9 p/ u" D; I* L( `( h0 g: W+ J; b& P
mcasp->regs->XSTAT = 0x0000ffff;
% o6 @0 K0 J+ i4 j mcasp->regs->RSTAT = 0x0000ffff;
9 L) l; \" d5 x
9 J5 s# \$ o0 h# E; I& ?& I mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ I5 e7 J) l, n5 {9 g5 T3 j: P% F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. Y, _8 E6 U- ]8 k; Z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 t( F/ I1 Z5 m' l- f' q- t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 z4 F$ ]7 t' Z3 ^
6 j- f% o0 B+ `& I' o$ \
/* Write a 0, so that no underrun occurs after releasing the state machine */
3 U/ t; K0 J: g u; w mcasp->regs->XBUF5 = 0;4 v/ j. g' C) W6 T5 [
mcasp->regs->RBUF0 = 0;
" Z- g) ]! x+ n6 k+ |; I. U
0 T2 _' f' z, s* B7 d% \* R3 m mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % J2 E8 s4 h% q5 m- N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ {8 O* _' h- F& B" ]- B9 V/ D
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 q' }4 z$ ]% O4 ?* ~) S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 ^! f, o( Z# P8 E z- Z
. \+ D2 y& j# M! @9 q( `
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' K) ~9 X3 t* ]: I P3 y; h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- B5 I( ?' @3 ~" n4 _
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; L! w, n+ u7 V6 m5 X- m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 u7 t! Z' }# Q& Q4 n3 X" v1 ?6 y) G
CSR = 0x0000;5 B! C. A. \& @2 E& u/ n
INTC_INTMUX1 = 0x3d;
9 G( O- a6 Z& |" [! M! e. E. }8 z ISTP = (unsigned int)vectors;- Z( ^- ]) K) I+ X9 J7 m
ICR = 0xFFF0; # C* ~- q0 \+ @0 D9 d! c# [
IER |= 0x12;
/ Y$ z$ P; N+ W& g& I CSR |= 0x01; 6 P: I7 a. t2 p9 m& z6 L
1 O, u. X: p/ I+ U% Q1 h& v- Z7 h/ @1 l0 j
' D. q% e: M' P5 u Y- [ {. e' e
还有就是两个输入输出函数:
+ E9 b" @# [5 n" p4 j# |: Dvoid output_sample(Int32 out_data)7 l" n) E0 Y$ ]
{4 K3 H2 E3 R, h* P
AIC31_data.uint = out_data;
0 j- K0 K. w* w: K- A MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 Z4 |& [: A' X}
* B7 S( T- [/ i2 |( g
6 l# i2 n& T0 U3 `( G( T- g4 hInt32 input_sample(void)9 o6 d! t2 ]& _( Z( \) X* [2 Y" U
{
V& Q6 Y' ~6 o! W+ a5 t( G0 F4 @ AIC31_data.uint = MCASP1_RBUF0_32BIT;# \* V9 G) r8 J i4 C) I
return (AIC31_data.uint);
- K$ D, C0 E- z# R1 J& s3 s3 \}
1 a. D; S# k+ i: h
+ S' g* u2 ?) [- c5 G* @5 o |
|