|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 l* ^, L! L& y3 Lmain文件:3 U" \& V/ }" ~4 J
interrupt void interrupt4(void) ' I, I+ s* J7 C1 u
{' j0 N& c8 H+ }( U, v6 B
Uint32 sample;
* O1 r" A- d& R6 h0 Y3 t& `5 |8 {7 g' |& k' I2 n) O- g/ l7 L: m: l/ c
sample = input_sample(); // read L + R samples from ADC0 C1 a, F) Z2 \1 l8 |* b# x4 n) P
output_sample(sample); // write L + R samples to DAC
$ L0 ?" g& Z6 m: `: G return;, g0 u! w$ M! b2 W5 C% Z" A% {- g
}% k! D7 _/ [5 @* h8 p, }% v$ h
! r2 |+ ?0 w1 u* A, W8 S) W3 Gint main( void )1 C; T* w- N# N, i, v9 ^; x
{
; v9 D0 Z L: d! l# p; B. w9 V8 Q2 m @5 \ K' {
/* Initialize BSL */- t* E! p. M Z5 C6 v Z) M
EVMC6747_init( );. Y9 Z' {, v2 `4 c! G! j! [
/* Call evmc6747_intr function */ W" ^$ L( L- W# z6 a5 u, ^
aic3106_init( );
" S+ Y4 f0 P3 X6 D w( u while(1);
! o; K2 q* ~) i! U$ Y}" B A: A- j c
/ G. @/ O3 Y$ r9 l$ N, [/ e
' e4 U( W0 h2 E; haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 [, V7 ~0 }' B* v! z/* Initialize MCASP1 */
' }( m4 y+ }. A, ^0 ^% d! o9 M mcasp = &MCASP_MODULE_1;# A9 K8 k- w4 ]
mcasp->regs->GBLCTL = 0; // Reset
3 f! I |/ s: J! s/ N1 }+ L mcasp->regs->RGBLCTL = 0; // Reset RX
0 I" q% M. f. L2 f mcasp->regs->XGBLCTL = 0; // Reset TX
. o! k7 m0 c% a' E* @ mcasp->regs->PWRDEMU = 1; // Free-running
' a5 Z# e. G5 k: \ // configure McASP0 receive registers3 O( n5 `. K1 j! @
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used* p# \9 n$ a8 V- z" }" f) [
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 X/ ~5 m3 E/ v, S3 R mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, Y4 o' Z: w& }. S/ U' ? mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) ~+ d& C9 H. Z, [, d
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 E! r! j! N% F9 s. c mcasp->regs->RTDM = 0x00000003; // Slots 0,1, C: e) e5 w6 K X
mcasp->regs->RINTCTL = 0x00000000; // Not used% @" m7 p$ R+ q% G
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 E% y2 s( o$ G
3 N6 C, F5 L" p: E4 ~ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 ^8 ?% {' W! g0 ~! f mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 a) {; Y7 H6 n9 \9 A' D
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, V, V1 A1 S9 n3 v2 u1 c) z! |+ K. ^
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 [& `* l9 Z: i4 n- l6 m# ] mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 s/ \" Y/ x( A E3 y( q+ [& v! z" j+ L mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. ]. K2 g3 b4 D8 ?6 T/ e mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. m: g! v! T8 Q6 X) O
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
B7 [) W6 L0 h9 l q! T9 W7 Y1 `# }! f- T7 A1 \; o- k% @7 u" b" e
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
/ Q# R9 i8 e" @* R/ Q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
5 h9 s6 K7 F* }# b# l mcasp->regs->PFUNC = 0; // All MCASPs) z+ t1 X3 P T2 o3 G
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& \0 ?3 d% @$ V0 f9 F0 O7 N: U& I& T0 e* M2 I3 l' T
mcasp->regs->DITCTL = 0x00000000; // Not used/ l; N/ [9 n+ c) k
mcasp->regs->DLBCTL = 0x00000000; // Not used
/ t1 ~4 m( D* C& a8 G0 m. V mcasp->regs->AMUTE = 0x00000000; // Not used' u1 G- A6 E$ ?/ s4 f
% E( U9 a! d9 ~2 C: H. g$ x% C' e* A/* Starting sections of the McASP*/
( ?( W, k2 W) o# _ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; j; H% Z4 E2 [" m, t; t3 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); + E, Q6 ] @3 u+ v4 A% p8 A
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 U& Z# W3 L4 K1 s8 o, u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 U) _' q/ T& |" [
+ A6 q6 b' u& F! K- j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) v* n4 A+ n: i" d6 g( a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, Z3 V4 k2 F5 N4 e9 {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * H# X2 J0 T/ s- E( {* t' P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, H2 ^/ p; m6 r& h; l3 {
: R2 r' B$ q- N6 O mcasp->regs->XSTAT = 0x0000ffff; 2 e% Q" N5 X: E" j
mcasp->regs->RSTAT = 0x0000ffff;
. S5 h9 \5 `3 I3 _$ n: f0 |8 W8 {: D) x) H! ?" M
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 v( Q- I' N3 B- i9 A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( W3 ?- z9 d, u& w, K
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ }( W* I @/ s# @' o3 k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 R) }" |9 ^# N8 ?
4 e. M- |- o+ } /* Write a 0, so that no underrun occurs after releasing the state machine */" h# G6 Z7 L4 t$ P! T. L+ J% n
mcasp->regs->XBUF5 = 0;$ o- L4 w0 n- f) ?
mcasp->regs->RBUF0 = 0;
7 Q3 @' Q7 Z; G( t4 N' p; J
! [6 X+ L6 T; v5 t% S O: ~! { mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 b) z! L4 Z% t% U' ~9 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 r8 r( H9 H# b" h$ e4 V0 {
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, T+ i$ j/ A Y9 }0 A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 d/ l$ ?0 M! n
! P0 r; H+ J, Y& D. v& ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 g' o/ y- G6 B7 g8 E+ d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ s% O) g9 d9 x. _
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / I8 A& e5 w" _4 e1 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- h! t5 R7 ?* X6 m- b' d+ u) u
8 V0 }% Q6 e+ }- F8 G, @
CSR = 0x0000;
) W- s- H/ z* e, C INTC_INTMUX1 = 0x3d;
4 l, j- u. o2 b* x ISTP = (unsigned int)vectors;' X: T# ~8 _6 j/ D4 B' v6 h
ICR = 0xFFF0;
9 q* U& m+ v8 J/ d& v' n) Z IER |= 0x12; x3 l/ w7 I3 ]& a0 a! w
CSR |= 0x01;
, d7 f1 g, d& J- C7 A& S) n/ G# h1 R& H! j. i6 `
$ k! ?# G1 p) g8 l
' T: y6 e9 A2 H& E) t还有就是两个输入输出函数:
/ U, G; A. G1 ? N5 C" u! Nvoid output_sample(Int32 out_data)
8 ]$ y' e, F3 V; y' C( A8 c{
7 ~; \# s0 T2 D# y, E AIC31_data.uint = out_data; 1 G$ X9 i5 U& ]4 Q/ q
MCASP1_XBUF5_32BIT = AIC31_data.uint;, W6 {: Q! `# V6 h. U _
}
3 ?2 {- w2 a; h% d+ c3 c/ x/ f& i, w+ k, i. H r) K
Int32 input_sample(void)
! U3 m! \9 r9 m: i" }0 |{ ! O( |9 O) }. P$ D8 k8 }
AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 d6 F# r4 Q' C! l. Z- W& c9 u return (AIC31_data.uint);2 S! B5 s% m1 ~/ H* v, I; a
}
% O* V, @. @( [$ |' F, p+ J* w" W" B/ ~8 J/ d0 d* a; W& N, t2 p
|
|