|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 L& s. I: b7 [8 R. ~" O8 ` J, t
main文件:
! k& X$ I, A) j. J' v1 L; ]& }8 Ginterrupt void interrupt4(void) ) c( ~$ I" t- P, V$ j* |" t' J
{+ U. m# o2 L6 a- w, L
Uint32 sample;0 m" Q; w; j1 z* ~2 S6 P
( Z' A$ D' J) I3 w7 O
sample = input_sample(); // read L + R samples from ADC
" @ M, v8 Z$ i! S output_sample(sample); // write L + R samples to DAC & e! j9 J+ _* U% P n& u
return;- g ^6 t# { j" K5 Z" N( i
}
7 O& O6 i0 E- M( T7 N' M0 m* ^% n4 a) A) J0 D q& n# p- b
int main( void )3 B; \$ ?4 Q! }, `( Y. ^- n9 P
{4 t/ P1 |: v8 S8 Z* g* K
$ a$ X$ X0 ?- b% t2 Q& q" ]2 A* t /* Initialize BSL */
/ i. O+ X. y& q4 p EVMC6747_init( );6 N, I1 @# K! d/ g+ F1 r5 l. k5 k# X
/* Call evmc6747_intr function */
$ p# [2 L2 j9 B& h/ x2 H aic3106_init( );
1 u% q' O* |& D' I# C while(1);
: z1 E% o0 `: _6 t}& U5 D- R, P# X8 ^
" \. [( R$ `/ c) |" f- `6 |8 o
% l$ {0 C$ E! i" X6 b9 [6 e% saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 F. S! z7 G2 x' i$ H/* Initialize MCASP1 */
) @+ x9 r) l `4 Q mcasp = &MCASP_MODULE_1;
# o1 G* |- A% `( |% c- x mcasp->regs->GBLCTL = 0; // Reset
. z, G5 ]! k& Y1 B' q O2 ~ mcasp->regs->RGBLCTL = 0; // Reset RX# @; b$ A5 ~' A1 W
mcasp->regs->XGBLCTL = 0; // Reset TX
1 H1 Y0 a4 C$ g& y mcasp->regs->PWRDEMU = 1; // Free-running
( k+ [9 C! D, `7 G2 d3 n3 C // configure McASP0 receive registers
& k# e4 Q8 Z7 ]# K5 R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used+ B6 z# V* }* o! t
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 r6 @, G d3 j- P; z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! s4 l5 u: [6 E mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 |% n5 n+ \ ^" v) m7 O: V, c mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 T3 n- B2 n$ U4 V mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 ?) [) r# q, Q' o u mcasp->regs->RINTCTL = 0x00000000; // Not used
]! S0 u- n. s8 C mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 I5 d- {+ h1 A
! s2 _* Z" }% ^$ q- r: w6 I) `, A mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; L3 ]) h1 x2 x5 S- \ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" S6 r. C2 ?% @9 L: T! n: i
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! S. E2 Z. M; \6 Z; L mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 o6 R- H" g! S9 f/ N: s- L
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK3 p9 P7 W2 Z6 G
mcasp->regs->XTDM = 0x00000003; // Slots 0,1 |. h! [ g, o; M
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 g) k7 o+ r% g! P& {* E mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& p* M4 ?0 R& U. W7 b% T2 g& d% k1 ~* S% h) p( G
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! m; ^7 P9 j$ } mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT% q8 M0 h# r$ \
mcasp->regs->PFUNC = 0; // All MCASPs8 `" \9 q* k# m4 ?* `- W8 j
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 a4 H8 i! \; U s
! y7 e4 S- F5 N$ I: N mcasp->regs->DITCTL = 0x00000000; // Not used
" B' Z$ V: K, @2 i( w mcasp->regs->DLBCTL = 0x00000000; // Not used
) v! ?5 j' b7 n! k& |- f3 Q1 J" f mcasp->regs->AMUTE = 0x00000000; // Not used
0 }- `% r9 W3 \% r% A' ~5 T" l. k! n; f& R! x
/* Starting sections of the McASP*/' Y: A+ h+ }0 m! p4 @: W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 k0 ^3 M6 U/ r8 ?* m) X5 Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 2 k5 s+ @! v( ^5 [% h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( Z( Q8 h4 p* R% \# {0 l' g: X; U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 N1 X! I6 @7 c
" h0 F4 B$ l: s% \ r
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# t6 d0 \8 I1 r3 r N" x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% P2 M9 H- x$ m8 w/ i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 w* t* K% T4 g' P* n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 V% w1 ^- _: @, ~' k
F; m& c5 q: E- ?+ {% z mcasp->regs->XSTAT = 0x0000ffff;
; Z6 ~: D; j3 Q mcasp->regs->RSTAT = 0x0000ffff; 8 D4 N4 a8 V5 W. J: _# V
1 [" l z$ g0 g( B- f1 f& K1 n* J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( P0 G: {6 g- }1 b1 c( C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, w7 E+ R( |& D
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % @5 S) u4 u6 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- m6 Z$ U2 e! @2 }/ m& i7 S! V# }9 F8 ^
$ \" N* Z3 ~1 u; ^5 b- [% ?5 S /* Write a 0, so that no underrun occurs after releasing the state machine */3 l8 `( M, j% w3 ]) q) ^; F/ g
mcasp->regs->XBUF5 = 0;8 n) Z4 ]; A/ y6 c
mcasp->regs->RBUF0 = 0;+ S+ H! z! {6 U' r7 j
. J1 c* r J; V/ ?7 Z mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 d- c2 `( v0 y3 w' B. H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ v; N; k g. d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 L0 m9 b( N9 I. l; O. z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 t, Q; t, ^+ g) B2 X# X6 g) U
0 e3 Z5 s7 J4 E2 N# o/ k; \- e# `0 \ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 @0 ?) |) r* H$ t0 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% n- E* j. z& R2 K2 R mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 B0 D7 y9 s7 K7 L7 w2 o! g2 L4 R$ e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 w/ C+ L: s, i1 q q- ]+ a+ Q, T8 x( x8 f' b- H
CSR = 0x0000;' `6 c3 j4 ~ U/ o
INTC_INTMUX1 = 0x3d;
6 b% s0 f9 \8 P( ?% q1 R4 o& j ISTP = (unsigned int)vectors;9 f: O; l( {/ s4 Y& ?5 `) U
ICR = 0xFFF0; 8 f% L3 @# C% V7 e. E: {
IER |= 0x12; ( M* \4 g7 i. o2 R
CSR |= 0x01;
: S4 {0 H. h6 s6 K0 m
$ x% u: F' X9 ?- M: _! M
4 A! Y4 r$ v! p. n) g4 O2 E# j: { Z5 v( a E
还有就是两个输入输出函数:
5 u. A P8 h9 |' G$ }void output_sample(Int32 out_data)
+ R. V0 j& b2 E{
7 a3 |8 N3 n1 K; U7 q3 ]1 g AIC31_data.uint = out_data;
$ F2 H0 P6 w% u; d, C/ L MCASP1_XBUF5_32BIT = AIC31_data.uint;: T$ t9 j- b3 U; c3 f
}3 D! a$ |2 z' F9 Z
7 n9 E F' L: e* v9 P- H& ^Int32 input_sample(void)
* Q4 }: c: z( D( R: |{ # N& W3 k6 Q; Z# d; B3 \
AIC31_data.uint = MCASP1_RBUF0_32BIT;
" ~/ k2 ?9 M( z7 ^- q return (AIC31_data.uint);
/ N* J, S- u# Z/ b& x}& `7 b- p$ E* {: }1 A
* l5 e/ m! E. P) J& u |
|