|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ M, y* X7 v2 p' P7 p# w
main文件:8 g% D# E. o9 J9 G5 x
interrupt void interrupt4(void) ) n' \: m- o. y3 S+ S
{
- i; |- f/ \4 r. S4 ?9 l& ?# R3 @ Uint32 sample;
' v) p9 q) K% ^# M2 v! N, i3 R" M! Y) G1 t+ g6 F
sample = input_sample(); // read L + R samples from ADC, b1 s3 [* U3 p1 m$ {2 y& d- D
output_sample(sample); // write L + R samples to DAC 3 i" q! ?% k8 U+ \+ p5 m
return;; [" @: ?! d# I$ N
}
! E: c, n& A- [8 D# n+ ^: R( j+ g9 B8 Q7 H/ H! ]0 W$ U
int main( void )+ p1 n( F1 @+ U$ v
{
; f1 ]: u$ k' G" j4 J/ d$ |- I! L6 K4 V4 T- S
/* Initialize BSL */
7 a$ ~3 _' L' o3 W5 j; x2 B EVMC6747_init( );0 U- @+ i6 x& C% G* C5 O
/* Call evmc6747_intr function */
7 F% u' E" u3 Z+ J5 h9 {5 P% T ? aic3106_init( );
( D4 S2 B7 m! R, M/ h while(1);
, i% B8 J9 {& f8 B8 H" O4 y2 X* w- K}
4 _4 h% G- i2 O K2 j
8 p8 w: G* E1 S7 [& K. p8 ?* Z- i8 n6 B1 R# U O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 ~) Q' o# N, L7 p/* Initialize MCASP1 */! S& v/ T: S6 {6 h& n1 d
mcasp = &MCASP_MODULE_1;: Q7 O( i+ N* `7 t# A
mcasp->regs->GBLCTL = 0; // Reset/ z c2 g, Z" R! ~# P
mcasp->regs->RGBLCTL = 0; // Reset RX. j; {" H5 L3 U. p$ X9 z
mcasp->regs->XGBLCTL = 0; // Reset TX; I( a( i t1 q6 \9 x: @
mcasp->regs->PWRDEMU = 1; // Free-running6 l: p8 L. x+ v+ e
// configure McASP0 receive registers
2 y# W! t, o( K4 e3 Y4 X* d: t mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ o& ^1 O* }! C' x mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 v3 ]- u& B+ I7 F, S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' q: _' K8 Y8 b' e mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 e# d7 h9 D2 C c& ^ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side): g8 v J. _# U/ N( M4 H4 Y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, ~6 S: U# }! l4 U( e mcasp->regs->RINTCTL = 0x00000000; // Not used
+ V) T+ f4 i. {8 b8 ?% k0 m" v+ P mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" g; \) E# D; N, v; c9 y) Z$ I- I8 R5 ]: M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* a% o5 @) r$ ]1 L' N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" M% {& h p6 O: } mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 J2 |) y) W4 P# V; h
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. O. h% p% ]& _+ ? mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 X+ \7 D; L+ D/ v' p J7 N* M
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ h# p+ m: i: n2 H2 L7 ^# Q mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit t) ]: k* P Q( y+ O9 n
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) j8 U" N$ K% K+ p
! h5 b- G( O& j mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ ]( y: Y4 S7 V& r3 a* j# L mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& r" }6 ]/ n) B- G3 [1 i1 h
mcasp->regs->PFUNC = 0; // All MCASPs
# i8 i* M" v+ M7 Z* L mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 n" K4 X# m d5 Z+ o$ e
4 d: W$ j. G- f mcasp->regs->DITCTL = 0x00000000; // Not used8 R% Q7 ]7 b J* c
mcasp->regs->DLBCTL = 0x00000000; // Not used
$ J$ M: X- n5 y1 [$ K. ?8 h' f mcasp->regs->AMUTE = 0x00000000; // Not used. l9 ]3 V) P; j8 n
# h2 g+ y, G3 Q" d
/* Starting sections of the McASP*/- t- V3 P' i6 W& V
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* X7 R, A' ~" I% ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # ?* d( I9 g1 c) t
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" i- v! t: n- D& T ~+ C! h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! i3 h/ z: i' W. o
+ {" ^: Q# V' [7 y0 d5 m
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 l3 r. V) Q: g: v4 x0 m* Y- ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); s6 t8 n) W. W5 [% v6 u1 L; D0 {5 Z' O
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) ^: n+ ]* S# o. L0 |. N W1 Y) \8 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; g: N! o0 W( |8 T Z$ z' B
1 D5 s. | {) [) E% J- x mcasp->regs->XSTAT = 0x0000ffff;
. S! q H( }' Q9 n. y h7 S! K mcasp->regs->RSTAT = 0x0000ffff; 7 F5 p! r$ h/ B1 j3 Z. x
7 z% _2 s1 H7 b- } mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 n- I- s% M4 e; B9 Z1 o- D/ ^% m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% k& L( h) s7 P, h) L mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 ^9 w2 i% b. q4 ^) q& z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ K5 H* t, n. [( E' L
! K8 x( l. [3 v% J9 N3 S /* Write a 0, so that no underrun occurs after releasing the state machine */' D2 _8 r, v* V
mcasp->regs->XBUF5 = 0;
+ ~1 Z9 H8 \2 X* t# ~1 q4 H0 r5 N mcasp->regs->RBUF0 = 0; L7 A, W3 t y
& y& k+ t% S( ~2 e8 ] B( U! Q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
{! r& H7 T. R3 M6 Q4 _% Y* u, E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ e0 Q4 P2 w* g' k* D3 g1 M
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 o/ H3 D/ {& s' ~4 l9 ~5 Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ `) L* i+ X6 [( ^$ v: G$ V3 Q- P6 z* N" a! B
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ }& ?6 t9 \7 z( T) ^/ e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 p' M5 x' a8 J9 ^2 S! Z' l) I' z* ?
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 h+ `2 w$ [5 K( [5 F- p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 h: |6 Q8 p" x* O, X& d# J( ]
5 [* O# I S# k CSR = 0x0000;) y' L% @$ L+ ^$ g
INTC_INTMUX1 = 0x3d;' w9 O& n/ h4 }" R. `4 j
ISTP = (unsigned int)vectors;6 q3 [( G5 y5 x% o
ICR = 0xFFF0;
- y& R* u* P0 \8 r0 n/ {7 z ~" Q& [ IER |= 0x12;
: s. K3 A1 b. z- E/ } CSR |= 0x01;
$ P4 j% a7 j0 I7 ~* B2 }; @8 ` u# ~1 p; L( m
: \' R$ d: B2 K$ @! Z# l; _" z# z% c# I6 E+ s
还有就是两个输入输出函数:
7 b" ~% C* W* R7 f7 zvoid output_sample(Int32 out_data)" P+ g5 H- j1 w
{
7 s' }! @& g; M$ B# x AIC31_data.uint = out_data;
0 z$ x4 U$ b: L6 w MCASP1_XBUF5_32BIT = AIC31_data.uint;2 C6 g% u- X# }, P" G- X+ p# b! O
}
|( ?8 n! g; d6 Y- m3 y) J
: m# ^- ^; P$ v, b) Y7 v: ]- m# I- X# }Int32 input_sample(void)( a ~* A+ z. C/ T* |9 ?, n
{ # `9 u: v: w) y- V
AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 {2 g5 e* K* \& n5 i return (AIC31_data.uint);
! s1 o- M3 ~# x: ]}
' n3 d/ x. D' L: J y* R8 j4 M) C3 d% q( c
|
|