|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 W9 O6 G" |. _# n* e H9 h
main文件:# g0 e; H2 G7 |, f4 @
interrupt void interrupt4(void)
+ j( W1 w. `1 e* I{. Z( F5 ^. ^4 O' J. _: ^: W
Uint32 sample;
& ~ y7 q M% `. t* n
0 k) Z% k( F& R$ p% k1 F sample = input_sample(); // read L + R samples from ADC
# T9 H# s/ W9 O, K. L output_sample(sample); // write L + R samples to DAC x$ R7 }, q# Z6 {
return;% Z$ @: r; y" [. A* M
}
& v. T0 k# O4 Z- K d" l' G* K8 v, Y' k" f4 P$ f8 t7 [
int main( void )
1 d) w. f2 h4 ?* A6 X- Y6 w{
8 k$ R3 `( e3 U9 M. Q" h, x; b2 Y% V( E* P+ L( {$ \
/* Initialize BSL */
" ^8 {7 \& W7 v; X2 O7 j EVMC6747_init( );3 `/ ?" j5 @7 K, E3 F1 F
/* Call evmc6747_intr function */
% G2 v; }! m m1 Y aic3106_init( );
! ^6 e" N' y& }1 l5 r# X* Y. D6 B _ while(1);, r& V3 ^/ i K3 s
}
0 U) M! L; K$ s0 e' K
' }2 A5 C* O6 M" W- B# X- |6 o* C! U* e2 U9 K% ~1 x8 g( I$ {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; S" v6 ~) }) E+ `, Q$ N
/* Initialize MCASP1 */* {- h6 ]- ]8 B' U8 }
mcasp = &MCASP_MODULE_1;
# j) W5 C" U' F. { mcasp->regs->GBLCTL = 0; // Reset4 I4 W: u% m& \8 `' z$ R5 {
mcasp->regs->RGBLCTL = 0; // Reset RX* c! X/ E) P( G, X* s- I6 s; Y
mcasp->regs->XGBLCTL = 0; // Reset TX9 ~6 O- T+ l, h8 n! T
mcasp->regs->PWRDEMU = 1; // Free-running
7 |" }4 C4 T- n! D // configure McASP0 receive registers1 A5 D% i. }4 {4 l) Q9 G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# s$ v7 H5 K7 `1 w. W* S mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- `, M8 m: c! ?6 W4 ~% z5 j mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 J7 \0 p6 e; C mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) J: ^/ K+ v- r' q8 f/ y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- P& |. H6 s( x" F mcasp->regs->RTDM = 0x00000003; // Slots 0,1 \( J- v6 ?* h* O
mcasp->regs->RINTCTL = 0x00000000; // Not used
! ]% A' t7 [. u8 ]6 H9 X mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* U+ v- ?2 g. Z" l1 P, p
" w3 q3 L3 w% @. Z( Q6 Y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 K$ {5 l5 E! f8 R0 D mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' e1 R2 b% X/ o- M
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 x/ ?; o! m! ?4 G- @
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ X7 B6 f1 [' v) ]* J2 Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* x2 Z/ Z8 Z6 j mcasp->regs->XTDM = 0x00000003; // Slots 0,19 s* H- j- _! G, [: _1 H; s
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; u, L; N* _3 v' o
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 L: S- G& q/ b6 {( U2 ?9 _- b
4 Y0 F$ m/ D& f mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" p n$ q$ [, }) I+ g q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: ^4 d' G% f, {7 z q mcasp->regs->PFUNC = 0; // All MCASPs
: A- ` e9 Z N/ U! _) Y# I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! J8 _$ x! V, R0 ~' p: G
' q7 O6 [! L+ O8 N. A) i/ Z6 u
mcasp->regs->DITCTL = 0x00000000; // Not used0 ]) V2 [: c3 ^! c+ x S
mcasp->regs->DLBCTL = 0x00000000; // Not used, i: N- K3 _; V2 C7 [1 P( Y. T! Y
mcasp->regs->AMUTE = 0x00000000; // Not used6 M7 i) a! v# i) i) ?5 [
) X y& W2 U& Q5 ^0 g& R! O/* Starting sections of the McASP*/8 I$ x0 h! M+ v( T G ?* l' l' E
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: H8 Q# \0 u% { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ k/ E, L; e# e mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & A" ~% ]( C( \ j/ W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); H3 o+ J$ K6 g1 K
/ L+ W' P. e' E. V* x% L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 o$ h/ ^! `: k& A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" c7 m1 Q4 X( t! x9 C8 m8 S mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 n) E/ [3 l% g$ C& |! ?7 V, T5 V! y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* {7 @+ p3 l, x; g: p0 D: F+ p' v& G1 k, K( v1 f
mcasp->regs->XSTAT = 0x0000ffff; , \7 P+ g& G/ U. E9 l- l
mcasp->regs->RSTAT = 0x0000ffff;
3 ~* F) p5 `5 j3 E7 ?3 O, m% e7 X; I2 z7 c# r
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- ^$ W P3 B- | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 j# \, O' m: y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 q4 b8 p8 A4 [) N, s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
F$ E# k _7 k- V2 L* g1 N1 U! z: c4 C
/* Write a 0, so that no underrun occurs after releasing the state machine */* z; I) \/ f0 e3 {
mcasp->regs->XBUF5 = 0;' H6 D4 {7 Y8 r2 [3 ^
mcasp->regs->RBUF0 = 0;3 j, B( e. Q* |1 Y! H
- |8 V/ X6 D, j/ R& z7 I# G mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 s6 d/ ]* z) ?' c Z9 S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); L! M! K9 }; D
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 U4 J: K5 p9 |+ r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 n! D) ]9 c0 K* Q
c2 [+ O# `, v# @7 a mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * B- r2 q% t3 ]1 V l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! [3 k( w- c- J/ Y( @' v. G
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 ]% T- {7 X' \9 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 S! A& }( L/ o
: h+ K# j& L: @" @6 w9 g CSR = 0x0000;
( s& V; b h; J$ p' l INTC_INTMUX1 = 0x3d;
y6 n. [9 Y. ~5 S" R ISTP = (unsigned int)vectors;
( x; Q' ~3 g, i; c5 d9 o8 W ICR = 0xFFF0;
- P- U7 J5 V, V" |# C+ l IER |= 0x12;
4 A6 j4 k9 E6 Q& G U CSR |= 0x01; * z& t4 R4 S: |1 J4 @( q
' R1 A7 `( z( `% J& n
8 {% J; z, j, b$ U3 x
% w8 K" i8 I! k0 _0 {+ e6 w还有就是两个输入输出函数:
/ Q. k% G( ?% N/ J. ~& s4 r9 tvoid output_sample(Int32 out_data)
# ]: z+ t# b% k% o/ }{
& E- {) V' L0 I1 U+ P5 _; T6 f AIC31_data.uint = out_data;
, t6 X* [0 m" `: v MCASP1_XBUF5_32BIT = AIC31_data.uint;! [8 W# P- ^, _& a
}
" [! C5 L( u% Y0 [0 A( M+ T* w, Q5 _) M0 W1 F3 j
Int32 input_sample(void)
+ r# w4 Z$ N0 W" M" s' S{
) L6 H- s4 S* A2 p AIC31_data.uint = MCASP1_RBUF0_32BIT;
; G! o! a Y8 U0 [ e) X return (AIC31_data.uint);
. K- ^! b, j& `! R3 ^ I}2 i; B0 A7 k3 |: \+ V9 z
, ^8 t$ H: [9 X6 e
|
|