|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ f7 W/ C$ M4 Z5 G Tmain文件:
- l) s: L4 E2 z2 n2 g2 yinterrupt void interrupt4(void)
( @! x; m4 `! c) n! ?{
- ~5 g( a8 Q4 N2 h4 y/ |5 @% j Uint32 sample;
/ _" l) z4 k# k! h8 I$ _' w" j' B; r& U* d3 d p& F) P( O& j
sample = input_sample(); // read L + R samples from ADC
; T6 I9 i$ \ u: G3 J- s) A8 ] [ output_sample(sample); // write L + R samples to DAC : s6 T5 i. {6 ^2 a' [
return;6 S3 E. B- T- r' D* f
}8 m, @. h' p0 E+ w4 Q3 d* R
2 C, z/ F! {9 \, `5 mint main( void )
- Z& ~; J7 X! d$ F{
( C. C# {+ o( h( Q( G/ Q0 A: g! D: X1 {4 p9 F
/* Initialize BSL */) N* A8 w# \) g6 `! ^
EVMC6747_init( );' l$ G& \7 V6 O0 l+ K
/* Call evmc6747_intr function */; P3 u8 I. _# }$ C. X2 u+ f0 J4 z
aic3106_init( );; b2 L( W! U6 H
while(1);% U8 ]4 L$ N: t) x5 Y
}) Y3 M8 {" j ^$ G/ V3 j
& k4 P- ?8 G9 a$ }
: F4 g/ q# ]. [# a: c! ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 _7 E: s0 H& J# a
/* Initialize MCASP1 */4 w; u# k$ z L- Q1 T2 Z& w: d
mcasp = &MCASP_MODULE_1;: C: w" K3 N5 |* m- G$ c" l( |4 ]
mcasp->regs->GBLCTL = 0; // Reset0 Q- z% \$ ], C- }5 ^* Y
mcasp->regs->RGBLCTL = 0; // Reset RX2 [7 l' F7 {+ g8 }/ u
mcasp->regs->XGBLCTL = 0; // Reset TX
. ^# h3 c5 e7 k/ z mcasp->regs->PWRDEMU = 1; // Free-running
6 N& s' ]. Y! S% N // configure McASP0 receive registers
, P$ s- V/ W8 D: I4 D6 e* |; p7 h mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( t4 X3 R. _9 @0 v" C4 P
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: R7 N. _( [( H; L4 P( J
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 u% u, ~. B& F* j1 P2 K) l
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). V, m7 D3 u, b2 K/ ?; i$ o' r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% q4 J% {3 v, a3 `" [" f3 J
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
: R: l& J2 _ V# q1 n4 _) }7 O$ L mcasp->regs->RINTCTL = 0x00000000; // Not used1 I/ s3 A% `. e' w
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 t" T. A6 f" H* r
+ ?! Q. s' B) D9 U
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# G4 q1 g0 N9 P: _. \! b) {
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 \) o8 U8 z4 m7 Y3 ]* S, J# y. M mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. f. I! Q5 Y) [& K. z f5 K mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. G) J1 V% q5 G* ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, G" m! {8 U* ?% r# D& t9 J( n n- K6 P
mcasp->regs->XTDM = 0x00000003; // Slots 0,19 s# T' a7 w% Q- n
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, P3 J4 K9 H' E; i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* o$ b( R+ `3 P m2 [+ s# D. {3 o6 k( t2 O" h; T& Y5 [! I
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( Q1 [) e! t) H" Y3 O mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: m" U0 I0 D& i/ I% B& U mcasp->regs->PFUNC = 0; // All MCASPs
; d7 s; ~- W0 w3 s3 }+ |' q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 [6 R* z1 h# e, {* {2 E
~/ S% k- {3 p8 `4 B9 o4 o- a( a
mcasp->regs->DITCTL = 0x00000000; // Not used
& R& E9 ^ i; j+ X; G( y mcasp->regs->DLBCTL = 0x00000000; // Not used
# F$ T/ S$ r z: _ mcasp->regs->AMUTE = 0x00000000; // Not used
9 O1 {. B4 B, s7 j3 O' z; V8 p6 X$ A
* R9 o! T! S* |/* Starting sections of the McASP*/
/ I0 H( \* b" \0 [& f9 p& T( ^ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 R$ X$ @* L, d( e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 Z* ^( _3 Y3 I+ p& i O, Q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 x* d: i5 l q, J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# h. n! @. M f% y8 h8 _. D! G+ Y
8 f" |/ e; Y& o$ b mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
N! R7 {1 z y. e7 I" Y/ e- \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 G( V" F/ i! c/ n H0 e
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* l g! |1 W( q) L- [$ u0 P$ U; d/ _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! Y5 H+ J" i+ B( `5 k. T7 m8 K/ h
- V; n$ I- x, K0 L; ~7 k mcasp->regs->XSTAT = 0x0000ffff; $ k. V1 Y; S5 {% |6 v
mcasp->regs->RSTAT = 0x0000ffff;
r; x8 J, g8 w* |$ i6 @4 y
6 K* ` {, h( m; J" ]- j; V9 D mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! L+ w- b4 z1 b0 ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* h" w5 s& h# a
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ W4 x9 r0 w: }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 W$ @: t# l, ?; u5 @. k7 M
6 x/ X; P6 d. C8 X1 {8 g4 v5 K /* Write a 0, so that no underrun occurs after releasing the state machine */2 N4 R4 {" ]8 Y; r2 D" {2 J7 Y1 g; N
mcasp->regs->XBUF5 = 0;
+ G. E+ V% O2 w% g. V+ { mcasp->regs->RBUF0 = 0;& n9 F! q a1 J" s1 N* t' p* [1 X
/ r( n- {- e( n- u; D2 x7 k mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " [; ~3 _9 h* B3 t- g0 V- T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& z7 f2 [( H% B4 _ Q
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % X5 E6 @. L. \) g q; H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, p0 e6 G/ `8 }+ | W. S8 f6 x R1 ?5 J% ~7 v
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) r7 I& P. p H+ d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ s" T' N/ Z2 R; T# ]9 Z) |, j: }. ` mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# c. ^* e7 \4 s0 y# Z# B4 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 o: J/ b% m, K3 w: w
_* ~0 |: G' I/ ]) G3 Z CSR = 0x0000;# N) e# X W, R. }8 B( C
INTC_INTMUX1 = 0x3d;4 h6 X) ^: w: d r! b" P: _4 W
ISTP = (unsigned int)vectors;4 W4 ]+ ~! Q% J i( c" Y% w
ICR = 0xFFF0; * R2 d+ c1 X& b5 s" q
IER |= 0x12;
) y- H J! [1 b CSR |= 0x01;
; i* O& S# |# M, S+ K' x
4 w* \/ z2 B: N1 f) x. H3 k h9 [: B/ J; b& F1 M1 ]1 p4 L7 J
1 |# y/ U; E2 F, m还有就是两个输入输出函数:
* \3 m6 _) \* |- B. o5 fvoid output_sample(Int32 out_data)
) E1 W! u C0 |0 H: |' a{! D' D- `; u, C+ A3 a ?
AIC31_data.uint = out_data; & I$ d* o- o! A. x
MCASP1_XBUF5_32BIT = AIC31_data.uint;
% |( D* z' w8 L& A}, y4 h8 a1 | X
5 Y$ M P0 S; Y s' |. P
Int32 input_sample(void)' c( g% E* w9 f8 ?. D5 S9 S/ c* m- B
{
' F* u+ {7 u/ d' s+ H AIC31_data.uint = MCASP1_RBUF0_32BIT;* I' z. V6 \! \* G
return (AIC31_data.uint);
5 f' h0 _) }- ?2 S( V}
" m X# m# ~: v# i4 T4 D8 ?$ _0 j' _, N$ x( k; v
|
|