|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' ]' p4 U8 `; [% d1 Hmain文件:5 ?. Z/ M/ X7 i2 j7 [
interrupt void interrupt4(void) - F/ M$ n: M# {' W3 g/ B6 l
{
' y- K X2 V7 g4 r Uint32 sample;2 q: H \5 W- x
6 c+ P6 x9 v" T) x5 t sample = input_sample(); // read L + R samples from ADC3 h+ G" B, G, N# R
output_sample(sample); // write L + R samples to DAC
4 s# N: [( L6 q) I& G5 Y" F' W/ T' f# k S return;
$ f6 G9 ?7 Z- ]( k}
6 V8 V' H+ o' T. W! f3 t* _
2 L8 X3 f+ l7 b! z, ^int main( void )
0 ^5 ~9 _9 _. {4 y{
- o3 v& _* e8 f& s' y' {) n
1 k6 n8 U% U" j8 |: C$ z /* Initialize BSL */
0 o; I! c- a( T9 x; S EVMC6747_init( );
4 ^, E1 `1 y6 D /* Call evmc6747_intr function */
* d; R6 U( u; _$ `; j$ t aic3106_init( );$ j; h+ L# E/ j
while(1);( G- `+ n/ t. R0 n! v* e& k- o
}: T. p# R5 b6 t6 c3 l; C- e; K0 Z
. y5 _! O# @: N$ P; D- \
; U" J j' l* U2 N& Xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; f" K7 v7 Q3 l4 V/* Initialize MCASP1 */# j0 ?4 v- g# x& y/ t2 q
mcasp = &MCASP_MODULE_1;! M# L- z2 Y1 h- Y& }
mcasp->regs->GBLCTL = 0; // Reset
" M" v z( P% L5 J( S mcasp->regs->RGBLCTL = 0; // Reset RX
* `+ Q, {& Y1 w- V+ D) V V mcasp->regs->XGBLCTL = 0; // Reset TX
6 e2 P( u2 ?2 n; W mcasp->regs->PWRDEMU = 1; // Free-running
5 V2 p0 ^ q/ J- J/ v6 R& C4 y- b3 Q // configure McASP0 receive registers
7 U$ {: n8 R3 J8 J/ A0 K mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# v: s* x; a% l& M, a6 f) r mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ [/ t2 s- Z* x; d D m mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 z% ] x- F0 a3 Y mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# q- I3 x* k6 M1 b3 W! A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& b% I' Y2 F3 v6 I
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
\( v. C$ M6 y# Z( K* { mcasp->regs->RINTCTL = 0x00000000; // Not used! `4 I: Y* D% _- i: I2 i; J
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% I9 _& l5 h1 d' \+ ], Z. g5 q- [
& j7 E+ M& s% G1 {9 ~ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ o p O0 M0 `3 |! j2 L7 q7 S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ _2 C3 g! n! f3 T0 ~/ X* \9 c
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& Y! Q6 z5 K- j- b8 Z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 R1 _+ V3 s j2 {' e, t, T mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 S) H$ v; [3 C& x mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( ?1 n& z4 K9 p6 v& l mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 @/ [8 `# i9 n mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; }! c2 {% o ~& s
; h+ h2 k% x0 ^8 o3 s mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ j/ S" w2 l) D. D7 q' z! k" e
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 Y! v- g! A# A2 y. v) p7 P3 i
mcasp->regs->PFUNC = 0; // All MCASPs
9 b/ @! V4 G% x( p, }' b# @: ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 l n, J4 _& ]% C+ r4 X
- X! s: f( b" M( A ?: s* `' [* v2 J! n
mcasp->regs->DITCTL = 0x00000000; // Not used
c% P4 M" I6 ^# f$ g6 x mcasp->regs->DLBCTL = 0x00000000; // Not used$ e [4 i: I/ Q$ G& v# ]
mcasp->regs->AMUTE = 0x00000000; // Not used
Q, k- z- I# R% b* B/ u+ |* _; b( E
/* Starting sections of the McASP*/
/ Q5 q: j9 A( k# k% ]; F# i mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ s8 ^4 W8 n! n. }3 w3 L- r! g2 Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 _: ^$ p k# d6 z* ] mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / H( C5 `" A) `( W& P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- Z: K4 x! {2 r/ o, Y
" t1 m; T' q2 s( ?" l! O7 ]' V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- x3 b2 S4 a6 [# m/ z) Q9 h; M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 V3 R/ N0 I" j
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# {- E- R9 c2 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ m* j6 F/ A# C0 i# A# X
. y/ q9 B% R8 ]$ d mcasp->regs->XSTAT = 0x0000ffff;
. ]6 |9 g; X" b3 ?" \ mcasp->regs->RSTAT = 0x0000ffff;
1 @: V* {# @; i4 Q9 J( K
% c' s) \1 h8 s- N# K& [" m mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 c" A+ h! W& [: @( ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 c C* X; O8 o' G2 P
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ b1 J7 `4 f1 j8 w, l8 y5 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 t" R/ P) D1 e) C7 P; q. y* z, C* D$ h
/* Write a 0, so that no underrun occurs after releasing the state machine */, `! k& A* Y7 P" z) u8 p
mcasp->regs->XBUF5 = 0;7 T% J, p7 _( Z. e
mcasp->regs->RBUF0 = 0;
7 R0 l% Y1 }* h( W# [4 m$ V
4 G* B" i; |2 G, ?9 G mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 i- w$ N* u, d# G, R2 _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. V4 R k5 {" L) c$ A+ o" h mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! |+ ]- C- O& S1 Z6 a3 y' I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 e3 h5 j+ \0 A* x
. S) H7 i$ V4 F: N+ W& {( O; b/ H mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 O. Q3 k, C- J; M6 R' g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, E# S* O; M! F/ h' R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# ~8 w& c+ I- ?2 h# T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 u" u" `( ?, G2 _5 q$ \
3 L( m! s8 J: m5 J1 h CSR = 0x0000;" Y2 E7 _: q5 m% H
INTC_INTMUX1 = 0x3d;
: D0 t) x4 i, f. l) p5 z ISTP = (unsigned int)vectors;
0 [" ?5 W* g+ p# T ICR = 0xFFF0; & U6 N" }, D& K1 B3 r1 }
IER |= 0x12; + k/ u7 b n7 w" D+ q% U; \
CSR |= 0x01; 1 a- R" o/ B, L, o
N9 K' E+ Z4 w# t( [6 x% z. b4 M5 j- u3 }
! m# G6 O6 C+ T9 Q) |4 K ~
还有就是两个输入输出函数:7 }9 s7 w; R8 P4 Q
void output_sample(Int32 out_data)
* h2 {! v9 K7 w2 Q2 K{& e! I9 ^9 f$ E& u. q
AIC31_data.uint = out_data; ! J" y, ~& ?* _, F4 z
MCASP1_XBUF5_32BIT = AIC31_data.uint;
# I( l, J \/ y$ C. D6 g}5 _# o+ s# ^: K' e3 N
7 | g$ H# C1 Q% T) @; t; e x
Int32 input_sample(void)
& q* m& |5 t7 A* U+ O$ U2 G: V{
1 @9 q5 R/ w, F9 T+ x; _& _ AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 N7 a" {2 x: a6 M; {' N% Y return (AIC31_data.uint);
4 ~4 ]# t: @4 |9 k}
0 O$ z$ y. N* {
; m: M! G' _( a3 O0 _4 Z |
|