|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! u% B8 ?; Z- o! _( D% D! f3 X, ?
main文件:
. r8 a) Z% A6 _9 H6 ?- Hinterrupt void interrupt4(void)
3 j2 q7 ]- H, r2 k5 D! i{$ r. X6 [; p9 k/ e
Uint32 sample;
' \6 V+ W/ y# Y* U, K* J* p$ {" e2 a2 r# I: I/ R# u2 C. g+ c
sample = input_sample(); // read L + R samples from ADC
0 ?/ m( d/ z, y3 E* k output_sample(sample); // write L + R samples to DAC
7 o! Q- z0 o' ], F9 \0 _& t return;
/ t {( K% S& ]0 }/ S}
& T" `7 V9 T$ t* ?% N( M
# _% e$ s- F/ K' v( T7 ~+ t) _2 wint main( void )
2 A2 ]7 _$ k: }0 d z{' F2 [; i H+ x+ E1 V# k
, i$ t7 B3 B' d! _9 I/ F
/* Initialize BSL */: w8 C3 R/ I' N5 B
EVMC6747_init( );: {$ n9 L* C( t
/* Call evmc6747_intr function */
( u4 Q. l" ]% i E aic3106_init( );
. ~- ~" ?' o& ~- p5 N1 ^ while(1);* V! \3 s+ S* e& s
}5 t" z" h' R' L/ @9 _. [$ K o
5 s" e. {' l- z' e
" `/ |! r" Z2 i* X8 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ U; {5 g' u: q) Z Z/* Initialize MCASP1 */
% l4 X: e5 n6 I1 S' O mcasp = &MCASP_MODULE_1;% W0 p0 y+ s8 a4 N+ m& c
mcasp->regs->GBLCTL = 0; // Reset
: i2 l1 X3 ~7 s* M0 p- @5 b% X mcasp->regs->RGBLCTL = 0; // Reset RX( V+ s7 P1 W$ W" h2 p/ J+ \( \
mcasp->regs->XGBLCTL = 0; // Reset TX3 g# ?, M" X% X( n' z8 n; E
mcasp->regs->PWRDEMU = 1; // Free-running
3 F" c; M- H5 |" W+ j3 A // configure McASP0 receive registers$ D& J& K* q$ g5 p% C' s" y, `
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) j9 |4 Z" h" k, @
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! c N0 _0 }: G' x6 Y3 W$ _. o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# x, D g0 @/ \. g3 L
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! ~: h: {' |, n+ {
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
. h! Y; P6 g$ m1 r9 |5 g mcasp->regs->RTDM = 0x00000003; // Slots 0,18 w. S4 v3 v$ d" ?
mcasp->regs->RINTCTL = 0x00000000; // Not used
1 U& I$ i" {: q( M | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" }$ B k- s+ ?8 Z e
" S' K) I K& N/ z: n$ K5 U mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
: S/ W- T r W! l) E mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ Y6 S P% R* g8 f( p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word c& i5 k& U+ K
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ J# S. S+ {/ m; T# M. f mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ ^- w, e3 K: ?- x/ D: e4 N' u
mcasp->regs->XTDM = 0x00000003; // Slots 0,1( [) T( G) _/ s
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: g" v4 i. v( F3 {- k# u, U
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! K3 h; m9 X& @3 O; G
# v5 Q+ c, m O) n' k, h- p mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 Z! o" a9 G% I' _+ B5 ]7 }' f2 u A
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ m+ e, c1 A8 [1 F8 o; A
mcasp->regs->PFUNC = 0; // All MCASPs
4 F6 B5 @ a. F; } mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' d& d5 U: H0 P, l' `, z% Z1 _
" x" h1 _1 u9 t1 v) s, o( `
mcasp->regs->DITCTL = 0x00000000; // Not used
1 D7 U7 n2 s, W3 ?1 Q$ x mcasp->regs->DLBCTL = 0x00000000; // Not used" g" Q3 N& |' l9 E
mcasp->regs->AMUTE = 0x00000000; // Not used# w/ I. F2 @; |* t" N3 H8 A0 c! T
2 {- w3 D% R; ~0 |
/* Starting sections of the McASP*/5 Y7 f: a" w" ~- _/ }! w3 \- A# _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % }8 o3 c' U: h1 |2 w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. H7 S6 Q" W, B* [) p mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; a; ]4 O4 J" ]7 F! P. T2 N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; B9 S- M3 b5 ^ W. r; d4 K( b/ M
# c4 D4 U' G, L: K e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. ^9 W* C) G% z$ @7 U% b4 ^) m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" p, B2 D. C3 `! Q: a, O, y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " X& l y+ R; @2 K/ [5 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# ]2 w* }! U3 n8 J: r1 n0 B2 n/ l5 z4 ^" h
mcasp->regs->XSTAT = 0x0000ffff;
7 l* \- t( ]$ i! E; m* @ mcasp->regs->RSTAT = 0x0000ffff; % D: x& ^( [# {1 E1 @+ c, Z
1 v/ l# |' ?" D. H. a& L1 @7 t mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 V L. X1 q( v2 }- e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 B! Q' z, W* f; ?: D: k
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - g$ s% N8 }+ v _8 R d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ [7 d1 `( U7 H# K: G
4 x7 x- L3 h+ z8 l4 _8 M /* Write a 0, so that no underrun occurs after releasing the state machine */
* i& N; [" a8 w! j" ^% b8 L mcasp->regs->XBUF5 = 0;
0 u) {! f, F3 o8 v mcasp->regs->RBUF0 = 0;/ \1 P* }* Q( t, k8 \2 H
6 e, e E$ U8 E; F; G
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' M7 p! P" J4 u/ x7 i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 s* d2 W& ]+ ?. d8 M, [
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! W. O: f) A" f" P$ V$ B: {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ]5 k, O% q2 v o5 M9 I* O- K
1 J2 D) f1 I# Y) q! d2 y mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# {5 X& C' w1 t# Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 x/ ]) K4 g. ^0 u' {
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
g2 e4 q. v( K( D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) ~& B2 q/ i3 W y( d3 S
1 Y6 W; o3 F$ ~) { ? CSR = 0x0000;
0 E* }6 d* M: N! C" m% @ INTC_INTMUX1 = 0x3d;
; n* \$ k3 B1 J5 R7 a2 o2 | ISTP = (unsigned int)vectors;, t' l& Z+ s$ W5 S8 o3 u
ICR = 0xFFF0; , i9 k- Z0 o4 L2 p1 u2 ^
IER |= 0x12;
* D% a6 p# z3 s* a! E( [ CSR |= 0x01; . S6 D x" s4 u6 A) H- m
& ?2 ^$ _6 J: P+ v+ y3 o) `! V& N; P% D9 p7 X, v, x
& T O- q9 s" C
还有就是两个输入输出函数:6 A4 g F0 V- @9 l
void output_sample(Int32 out_data)8 l) Y4 k4 J" ?* p6 q$ |4 H4 S
{) c2 a5 v' F' i3 u2 \
AIC31_data.uint = out_data; $ ^- X2 k, y6 d& W. b( a
MCASP1_XBUF5_32BIT = AIC31_data.uint;* ^0 v6 j! M, K! e- V2 h0 G& d9 [
}- r* h# P" [. H
3 I, J6 K3 Q+ w h
Int32 input_sample(void)
$ B: s4 G- d6 i/ o{
) @9 Y! \' r; L AIC31_data.uint = MCASP1_RBUF0_32BIT;5 y7 x0 b& W3 K( v9 j! @; A
return (AIC31_data.uint);3 }! ]$ q( z5 S! G' V
}
a4 K% l% }" W" f$ ?/ d+ X& s0 h l' a( l
|
|