|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 r, Z- L; F6 _8 B9 ]6 m! p5 lmain文件:) w. j9 J6 M5 H4 O* N/ [2 E
interrupt void interrupt4(void)
6 j4 D/ s/ g5 t. J, i) Q9 B{* h9 J- B5 V" X) {3 z$ W8 g6 t
Uint32 sample;4 C) { p( _# W5 j# X% J) {
7 }$ F) f1 J' u; Y4 ?6 z/ X
sample = input_sample(); // read L + R samples from ADC
& Z! d p x- {- a; U \ output_sample(sample); // write L + R samples to DAC
* v+ |# t% ^7 C( [, a2 R return;
" n- K# q; R( ~}
% N4 v& `0 ]; I" S& Y9 N1 R/ G9 K% E
int main( void )3 w( N7 D* l% q4 |( O/ |7 z5 g
{
1 o( T }( {2 E( K: J) v- v
J# K/ b& \$ H; S /* Initialize BSL */3 s" o) N6 t4 G) l( L- g
EVMC6747_init( );! V* @- U1 i, w# G6 P
/* Call evmc6747_intr function */) o: g, k9 a6 Z7 |
aic3106_init( );# Y: \. v! a/ X, E% S
while(1);
6 j; D/ ?2 T% M7 p& ?6 H( H}$ d1 q: f p! D4 o
; E7 Z9 o+ U1 @0 e7 e# K# d. t# i* F% A5 F* j" }
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" H# m; R7 `6 S0 x+ L
/* Initialize MCASP1 */
$ j' q b% z" b0 ?0 ^ mcasp = &MCASP_MODULE_1;* d Q+ E6 a! E" c+ }
mcasp->regs->GBLCTL = 0; // Reset Y. g0 K1 v9 k1 T5 l" s, x
mcasp->regs->RGBLCTL = 0; // Reset RX
! g* Y! W6 ?( C5 B, L mcasp->regs->XGBLCTL = 0; // Reset TX
1 L0 o8 u" y) y* F" Z mcasp->regs->PWRDEMU = 1; // Free-running4 T0 H% \6 x" S, w- `' P: n& q
// configure McASP0 receive registers
+ N: ~( E5 Z# V5 z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
. N& B9 e3 q" Y! F0 K mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; Z4 V1 X. U" Z/ e
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( c3 H! d# Q! F! a2 p# w mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& ?; E9 @* o7 h mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side). c9 e' H% w+ z. ^- k# r
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& S7 N m# A/ \5 t& m) @ mcasp->regs->RINTCTL = 0x00000000; // Not used
+ X# J& ]0 a- D mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: f. h! v& S* k/ \/ C
1 ^$ n; q4 K8 C0 m mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 M5 x3 P! x: E4 [6 I
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% J b' `! j7 r8 @4 u
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
P0 s7 M+ P' O; p2 A/ L- w& x mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ d) |) M) v+ H
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 i# i1 W3 h+ ~) W4 K9 u1 k% C: s6 ~
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ \% s$ B' M7 A1 l9 w: ` mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& {! {6 e* q4 G6 |4 y. m4 q- V7 Y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 s' ]6 f: X' C
# b6 E: ~7 r8 @: Z7 U% k% l w! P7 |5 [ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- H" I4 T- }8 }5 m7 E mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT: u- D& m {; i4 w/ U1 T! x; Y
mcasp->regs->PFUNC = 0; // All MCASPs5 N5 b; W% k' v. Y2 b7 `6 ?$ Q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. Q4 I! F& [( ]8 G, J7 l4 I, B8 D3 L0 ~4 Q
mcasp->regs->DITCTL = 0x00000000; // Not used. a0 l- `" \1 V6 c& u% X% h
mcasp->regs->DLBCTL = 0x00000000; // Not used
' N6 Y8 N: Q2 C1 _8 c0 U( V* Z* o mcasp->regs->AMUTE = 0x00000000; // Not used3 c' Z) I3 e) U! c# y6 T6 I: n9 e
; M7 a6 |9 [2 W- J' _" Y& h* Y
/* Starting sections of the McASP*/: W) I" S0 f( n) z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 `' O" D' I9 s2 v- b g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); + q* R5 E% j' f2 `) G
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' I2 i/ s& r* R6 s% x2 a! Z3 t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ B! A% J6 H8 r1 z# U
- f. m& `4 d* _1 ?6 E2 g% e4 k. B
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 P4 F5 d( G% H- h7 E( w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( E& V! V$ Q7 M$ ^ x' u( S2 M mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( p5 M% C) O/ n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; p5 C( j* i# D6 \, G
1 _; H& L2 t+ M3 |8 x7 Q$ J, B' W mcasp->regs->XSTAT = 0x0000ffff;
! t% \% j: Z" N. P mcasp->regs->RSTAT = 0x0000ffff;
$ d: V3 ]8 x4 N' A" u! Z3 l# l) u
; i8 D; _5 k& f( t mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON; C& t( h& ]+ O6 u! X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# Z* s7 m4 B0 l" \" _9 w
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
n# x; `( }" z, A# Z' g, p( ^& K' G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. e+ t+ {* b9 J& w1 Z0 X
& R. s/ c1 F1 K /* Write a 0, so that no underrun occurs after releasing the state machine */6 m6 k+ Y( ~8 O/ Z2 Q; u
mcasp->regs->XBUF5 = 0;% A2 [2 z6 w* }5 K0 ^% ~7 H# l
mcasp->regs->RBUF0 = 0;6 z" |$ p" j( ?; a" Q: U: n
+ ]/ R) ^, \# j3 [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 j; k3 d& F9 o; V9 v5 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 C6 R9 l: q/ M @: d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) Y/ }, ~. A2 M# T* V" K' {: ]6 C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 `4 c# g5 x1 W8 D( g
# Y. x% y2 ~( Q: L8 {$ ? mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" L$ a: a. V& O# X7 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 X' S! ]& m0 M4 u5 T; ]/ T; x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 _" f( Q0 R& h9 I9 E+ x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 B# _, [1 D1 A' | w. g! K; t2 T
CSR = 0x0000;: k3 h0 O g: R4 n( R1 ]4 v" Z- t2 Q
INTC_INTMUX1 = 0x3d;1 N0 E. w. x& v' f6 D0 i
ISTP = (unsigned int)vectors;
% v& k. ~* u( F2 f/ k2 i. o ICR = 0xFFF0;
K/ p! Z) H. e4 n" | IER |= 0x12;
0 j: f3 m& q% e+ X CSR |= 0x01; 9 ^( V2 o e4 ?2 l
) Z- ^! r% Y: H. N+ r
) Z7 y, y0 ^( o
& W o1 O3 B' z3 R/ [9 }5 Q. o2 H还有就是两个输入输出函数:; o4 E% S* T4 y
void output_sample(Int32 out_data)
4 }: i. ]' i( G3 d( o{
$ s( ^3 S6 v/ _6 F4 x AIC31_data.uint = out_data;
) z# H1 H3 u7 a- W' @ MCASP1_XBUF5_32BIT = AIC31_data.uint;. h" P" q4 ^1 W8 q
}
! ?) W. w+ m+ O" Y5 ^) f" G0 ?" z) T2 Z
Int32 input_sample(void)' c! g" J8 j( g, M! j
{
$ e6 p+ y" n# I$ \% i8 c AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 {; P: `1 m& M return (AIC31_data.uint);
& m: r) ^$ F( F6 Z8 d) V}
6 v6 V( m+ U, d9 N
, k$ O$ b5 c( Q4 {3 |5 K |
|