|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 D. {2 N" a5 c& I, n1 Fmain文件:
: f4 w! M( s+ ^2 P3 ~interrupt void interrupt4(void) + Q3 v# D1 m: @2 h, X, p
{# Q3 j8 e. s& w" O
Uint32 sample;
6 t$ x! I' b! t4 `4 j9 @. e6 V' N" s! H+ B
sample = input_sample(); // read L + R samples from ADC" v3 q0 }4 D& N$ {5 c8 |
output_sample(sample); // write L + R samples to DAC
. |1 m/ E, H: l C+ O4 ^ return;0 D6 w7 F, y" W/ S; f" V
}
7 o$ @2 `( ? E8 J
1 P0 J+ R1 |) |( ]% u% {5 F- Yint main( void )
+ e4 {0 d( k3 ^* U{. d& x, ]: N" F; o$ k$ d
% r; b; S5 K [# `! K! \ /* Initialize BSL */; I/ f$ {. s4 s( k. A' B
EVMC6747_init( );
, k2 ]% F; k3 l# H3 \; ^2 z- C /* Call evmc6747_intr function */* o. s: S) {+ H+ I! S0 X9 K
aic3106_init( );* N. V- ?6 p3 q
while(1);0 c! n) _. a- x
}$ H6 t) B' s% f5 s# S
+ T" h V6 V% g* F' i2 B. n
) S+ z& z# I9 z& R- zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' X; `' l1 a1 }& s
/* Initialize MCASP1 */" Y( O! q; N( d7 F2 ^" D
mcasp = &MCASP_MODULE_1;* r9 M% x2 r N- h
mcasp->regs->GBLCTL = 0; // Reset( }$ G9 v1 L& b! b
mcasp->regs->RGBLCTL = 0; // Reset RX
4 f/ v6 n$ ?3 X* E mcasp->regs->XGBLCTL = 0; // Reset TX
# N* M: a0 |& F mcasp->regs->PWRDEMU = 1; // Free-running- ~. e4 T1 i) ?1 X x
// configure McASP0 receive registers) s$ h% U7 |! n9 x( V( Q
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used1 C0 L+ b: J* s, }$ u6 z
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- @; Y/ R+ | E" w
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 i( \( Z( j) d- p7 ?! \5 X mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ M* j& @: G2 v4 S8 y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) o( | C( l* @0 L- ?+ n. ~3 Q mcasp->regs->RTDM = 0x00000003; // Slots 0,1
( D/ q" E. h5 F2 G' i- I mcasp->regs->RINTCTL = 0x00000000; // Not used
- R6 y! H3 @0 ^+ X; j3 m mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 W/ i# y& N" J$ K( }! M7 k
y1 k5 h' c: G- g4 N" w mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# ?+ F- ^' y, {/ H( L7 e
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 [' f. D2 s& a% K
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) j6 ~4 G$ t( m2 _. O% F: k
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 a S& D1 E3 i) V: l- |2 @
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; l5 H3 {7 V2 G7 _/ U& o mcasp->regs->XTDM = 0x00000003; // Slots 0,1
6 b. D7 X5 I9 l' M mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 O: O. K1 H* g
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( j0 b; \* ]2 y3 D% l+ z
j4 D& F1 I& F% g' D mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" a1 e5 `/ a( C. J5 h/ v
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# l h! q3 x1 h8 Y
mcasp->regs->PFUNC = 0; // All MCASPs( X( z. \/ m; n
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) u. I) P# [8 O4 K& f" M# `4 `
$ m, C, C' @2 u! h# l6 w' Z1 [
mcasp->regs->DITCTL = 0x00000000; // Not used" ?+ D: _+ B& I" e
mcasp->regs->DLBCTL = 0x00000000; // Not used
2 \( u z$ K( p2 S" [) h! }5 ` mcasp->regs->AMUTE = 0x00000000; // Not used5 ^1 x# N4 |# K- _/ j4 Y
: F5 O2 B0 s0 |: ^1 C4 l
/* Starting sections of the McASP*/$ Q$ I) n2 Y2 H& R
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! Z: W, J, v9 \" Q* E& n" z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ [/ ?' @( f1 h' K" k* g mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, P& e1 y! u1 g/ ?% t- s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* d9 ]# Y- v# O$ C" O- t5 O. Y
$ ]7 Z# N" _% q6 C6 p" y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - b! }1 r( J1 ?( C' L- |( b3 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 S0 M2 D8 p1 T. `4 t mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - S. E0 l' r& S8 d5 C1 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 ^, b- l2 a6 j, s5 }
^. M4 Z& S0 d- T j
mcasp->regs->XSTAT = 0x0000ffff;
- |2 W) [4 ?$ k# h: U mcasp->regs->RSTAT = 0x0000ffff;
9 y$ U1 t0 b0 h/ c3 O1 [& W* J9 ~% ~7 X5 f( }
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& J4 P# f. `- R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- D: f6 t! l, u4 q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& ]! F" W) o: q, z( X& a8 q( G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 [. e S8 u2 K, \' R
/ I9 n' P9 n) ?9 o2 n
/* Write a 0, so that no underrun occurs after releasing the state machine */
+ }8 E# W% y% Y+ c9 ]3 Q- R! N mcasp->regs->XBUF5 = 0;+ X7 n* F; E' j4 d, S& a
mcasp->regs->RBUF0 = 0;
) {6 O9 @1 |: D. z( U5 y1 m, \# X7 j' u/ W
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, ^5 Y5 t# D, b5 J& J7 R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: d& k& r% ^; \
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- u9 Y0 Z- A0 k! f6 U7 u" ^6 c! g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' @1 y5 n! D2 \: i& l) L
5 b4 |8 ?8 E' d mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 y+ m% P, d. {& Y8 _* C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& ?" f0 M4 v! B( c; s" Z* z7 v
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( o7 u# y. k9 _7 ], s8 d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ C( B! l* q3 y& l+ C
8 @0 }7 S; e( b* [. [. J CSR = 0x0000;
; ~' [. @. p1 w2 R; Z INTC_INTMUX1 = 0x3d;
8 ]) d. V7 ], u8 q ISTP = (unsigned int)vectors;
, w2 W2 G: E2 g0 R ICR = 0xFFF0;
* u7 C9 I7 |; g IER |= 0x12;
$ w& P. z) I; B1 W+ e0 W CSR |= 0x01;
! ^$ h0 ?/ @) A6 n
6 s: y' V& q7 t; n0 u; v$ q( B6 K8 p, Q, f. s8 ]+ m# ]: b0 q0 ? [* G
! D( }8 m0 V* l& f还有就是两个输入输出函数:- {- Z" G# v( L+ c8 `0 q1 n4 f
void output_sample(Int32 out_data)
! d+ C1 f5 y. Q0 \{+ H$ w, F! q: L) P; E# Q
AIC31_data.uint = out_data; ( ^& u. b+ ^+ A" g$ ]3 a% d
MCASP1_XBUF5_32BIT = AIC31_data.uint;/ i9 a2 m, D5 Q! t1 z
}9 X* r0 L1 W* J7 y8 n8 J- D; t
/ w3 n3 |! R+ |1 r" FInt32 input_sample(void). I3 N3 I0 d' U$ R9 z7 t; [
{
8 K' u; S& }: P6 e. Y% j$ Z3 u AIC31_data.uint = MCASP1_RBUF0_32BIT;! K: a- m; m+ J$ o4 }3 \3 e0 a
return (AIC31_data.uint);, L: `2 [) C/ K
}( I8 p8 B/ h- Z# B$ r; z" S& s
) E1 d! p/ _4 [7 N% D9 N* H
|
|