|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: X$ H: z! T4 ]; W7 ~, ]
main文件:
0 ~8 p$ X4 Y7 G/ K& }0 x4 kinterrupt void interrupt4(void)
: {% |/ [8 P: G. W6 Q$ Z- L{4 E6 y6 W$ x4 ]! k
Uint32 sample;! e# A$ U1 G% r7 U H
9 C" z- J s+ q0 W( D0 _ sample = input_sample(); // read L + R samples from ADC
* B5 G9 L3 j1 b. h output_sample(sample); // write L + R samples to DAC
# Q. R6 m8 M r& S7 t return;8 N. m+ B7 L# f: ]+ p$ C* K5 ]0 g6 g
}# A: [. G7 f: m. w/ z- G
9 ?8 p: M3 ^1 O. g8 Y
int main( void )* M, a0 n* @0 \0 G0 D
{
: o3 n3 R4 c/ d! T q
! ^+ J: U) o) f; y% c9 ? f /* Initialize BSL */: t. H- |' x7 N0 m X9 U) P! T$ F
EVMC6747_init( );
q/ f/ z5 Z% k /* Call evmc6747_intr function */. Y! ~; W% ?& u" J) F
aic3106_init( );* N2 c7 m% t& S, `
while(1);7 z' Z% i# a7 Y
}3 z$ [+ C3 G$ g" f) E
- B! m) T0 `9 M% q4 D+ u6 K, u- e) ~! n- q, g. x; _8 R& y8 v N
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 d" w9 A. c; c; t% M$ V' b, b
/* Initialize MCASP1 */
8 o1 ?- h6 v% b. K- |/ o mcasp = &MCASP_MODULE_1;
, m1 K/ B! ^& u# r. I# {2 m mcasp->regs->GBLCTL = 0; // Reset, q) P3 i1 v- P
mcasp->regs->RGBLCTL = 0; // Reset RX
* z1 U: E% g) S. ~ mcasp->regs->XGBLCTL = 0; // Reset TX5 s5 [9 z9 c& J! V& I3 d! z3 E
mcasp->regs->PWRDEMU = 1; // Free-running7 q% V0 K- ?' w
// configure McASP0 receive registers
: U5 C& v# U) H: j9 ~ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: _6 ^+ g" X0 n- f; R
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 V/ w4 P9 `/ o, x9 ^2 U) d mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. R8 G; V+ v' |- n mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& r+ D; g* ~+ ]
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( M: y1 P6 t4 v9 v5 o
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
: @* Y* a% c- ^) w mcasp->regs->RINTCTL = 0x00000000; // Not used6 v/ y. O) `. |+ Q% O* R8 |2 l
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 G# }; n4 |- o1 S, Q5 e) S- ~% n# y/ b! i3 C) j; f+ F9 p9 Z
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( _" @2 ~3 {2 z7 |( g! ]% _ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& t3 G" j* }: Z1 G( M
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" u5 ^. ^3 d/ ^1 ~/ w mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& u# S/ Q1 Q2 Y) N mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& p( N( d U' g, `2 n6 X
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" e2 N( Q5 |+ J: n. T8 l& I mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit t5 F! H+ a9 D# \/ x, ^" _- a$ W
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
@' F- G% J% S! @
g" b/ G% i Y, o$ ?) j- I4 L# ^ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* ~& b6 Z* o5 x7 v/ H1 D$ M4 h4 E
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ [) [9 T6 Z# \3 h- t: Y mcasp->regs->PFUNC = 0; // All MCASPs
3 [ h2 ^# h3 A2 P mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! H% E5 [: W9 Z. v
% C- c2 \* I8 P0 J2 a: ^ mcasp->regs->DITCTL = 0x00000000; // Not used1 X, [/ R# @! |& I( s5 `( x s
mcasp->regs->DLBCTL = 0x00000000; // Not used6 |$ Q3 B4 W7 l3 ?6 O+ Y, w, q
mcasp->regs->AMUTE = 0x00000000; // Not used/ L2 ^! T1 z+ [, Q* M5 w
5 w5 k: x0 n# J2 S- o' z6 f/* Starting sections of the McASP*/. y, y% ~: c4 R$ m( F
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( I b+ K Q" F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 v- u3 T/ {1 e* I0 O! J/ { mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' ?7 q& y/ r& q3 Y1 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- g0 _' {0 N" a* K4 n4 A% I* E' o# q0 u% t ]+ E( ^: `
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; S C- K/ l: `9 K3 B$ c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 G3 l! _2 y' D mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 R# J' a5 i3 P9 T$ N- Y/ [/ p) c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" o! T# a' Q3 j
' x1 q4 e, a* h4 E
mcasp->regs->XSTAT = 0x0000ffff; - h; r5 j4 Z {
mcasp->regs->RSTAT = 0x0000ffff;
6 g9 O- z; j- \$ y
% b( }4 I4 V: o mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 r7 f: R. s! ]; |9 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" O8 m) b/ m" I; d
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & ^. ^! s/ ^; J& q0 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ W/ M0 [3 v/ F: J% i! ]* D2 `6 Q7 Z5 U: l
/* Write a 0, so that no underrun occurs after releasing the state machine */
& a8 ^% L8 z" |8 ~* J5 u- i mcasp->regs->XBUF5 = 0;
7 a0 {2 j( G: f% ^- i6 r mcasp->regs->RBUF0 = 0;; b4 t) P- Y1 Q4 `9 x
8 w3 i& c( P/ S mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 u! q0 A, Q; c; q- K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" J5 _7 r% |: T5 B; n! i
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 [" Z C. Y j- |3 \( [8 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
R4 x9 t: B2 L% a" W& s
% m6 s/ W: O, B0 ~8 E$ H# R& T mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . A Y `7 W" U6 V/ A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 M( Y' E% x/ ]: |# a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' T1 J Z0 W6 y$ H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' v k& r& j! d" E! T6 e) B/ k# P# I7 C5 R
CSR = 0x0000;
; j0 Y1 J8 Z2 o6 J INTC_INTMUX1 = 0x3d;; a6 D. @- H- l' X$ I( u# Z
ISTP = (unsigned int)vectors;
. b" w6 D7 i. ?) b0 [ ICR = 0xFFF0;
* G% |4 ?5 y, S/ R: O+ Q. G IER |= 0x12;
/ a/ f8 Z9 D, L2 G CSR |= 0x01;
8 M- u3 ?& y9 r+ p, G2 x" A& p$ d1 U! n2 |
( u; @: b3 a7 p1 |$ k
8 L& i5 N @8 O5 c7 J- |1 e/ p- z: ?6 }- C
还有就是两个输入输出函数:
! M8 Q" u0 h0 d Z4 m# ?) D' y' C9 T1 n4 svoid output_sample(Int32 out_data)
6 j, ?4 m2 x& S7 D; [9 P( n- V{
* q! o6 p, E7 y9 F9 g AIC31_data.uint = out_data; $ x# y+ h2 w3 k+ y; m
MCASP1_XBUF5_32BIT = AIC31_data.uint;
. q- l# C8 o% }( E% ]. Z/ X! ^' r}% Q! n; ?5 A' K- i6 Z* l. c
. n2 D. `5 j. F2 MInt32 input_sample(void)
8 v! k8 y: @3 n. }, @0 O2 {{ % y+ |6 m8 X |7 D9 U
AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 C. M7 ^6 S( i2 P return (AIC31_data.uint);" p: u5 S6 a7 v0 B, }+ c& f! R, R
}9 ^- E1 s" ? Y& o, f4 m
# i3 x' u O$ X, E. y. f
|
|