|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 {& M. Y8 ^8 t* B% w7 d- k+ }. C& |
main文件:
( H% L, `5 N5 N* W# W" R9 iinterrupt void interrupt4(void)
2 \. Y: z3 Q( f( U0 w, I8 ^{. p% z9 U) v/ }2 H% n8 w! O( O
Uint32 sample;
5 @+ q9 ~' c/ V. i5 ]6 W3 U8 U) N4 [
sample = input_sample(); // read L + R samples from ADC
6 ]) M- M2 W, A$ h2 N* A8 q output_sample(sample); // write L + R samples to DAC
/ L6 G% }( A/ Q% }) @8 j1 T return;/ H) V+ i. G2 V4 |1 z g- R
}; _- H3 P6 o) u! I7 s; |) {
: v N. ]8 u$ g) K! c. _, g
int main( void )5 E+ f" }* O3 l7 W3 S) Q2 I
{
3 \9 C/ d% z2 Q2 x9 N: v* a
9 I5 [1 r, B* B' k /* Initialize BSL */
7 z$ x, B; C, ]! y EVMC6747_init( );
: g- a c+ L8 T /* Call evmc6747_intr function *// L+ D, j$ j5 e: S6 x
aic3106_init( );
0 Y# p0 j+ E3 C, o! m2 J9 o while(1);; @$ I* K1 H5 C, \6 u$ v
}. M+ n2 t: O; x
+ [; \, I4 c! L1 p" ~" T @! @
0 v$ e! F# d5 V$ Q! }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 Q, K2 {0 o7 Q) B1 s/* Initialize MCASP1 */
% J2 U6 J S3 I0 m2 b5 |5 Y0 r3 B mcasp = &MCASP_MODULE_1;
% H* C6 M3 N" s, j mcasp->regs->GBLCTL = 0; // Reset
' `8 C9 Y( i' Y8 }8 x" @$ [8 a, f+ i mcasp->regs->RGBLCTL = 0; // Reset RX
' P$ z1 r: v8 _* k; \: e' O2 t" P mcasp->regs->XGBLCTL = 0; // Reset TX! ~) V4 M! i$ u' G* d$ S
mcasp->regs->PWRDEMU = 1; // Free-running
3 p3 ]' I( w* Y V$ G // configure McASP0 receive registers B' S$ P) l. p# V
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
2 A5 C9 H V8 n j mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( [& y1 P$ }6 t+ z1 ^' L$ o+ G, z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; x8 P8 a- B4 w
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 l {4 Q8 U$ T1 O
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
& D$ f2 s* B: A/ l& V mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 R) [) I* A) P3 @* v mcasp->regs->RINTCTL = 0x00000000; // Not used7 W: u" a V$ a& U4 j7 S& k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 G0 q4 o; |$ k
2 ^) w Y4 t! n mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 r, [7 C: B6 S' ^; ^
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ ]7 e! Z; P1 L3 M mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. c6 a9 N. B4 r0 z, S
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) X. {: m# P% q+ A
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' c% E! D4 R2 j( C0 V N3 F mcasp->regs->XTDM = 0x00000003; // Slots 0,1) | n0 Z4 ~- ]( R7 i: X) k: s
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit2 }, [! B% ^: h) i5 n* Q {
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. k/ U8 \1 v$ [$ E
- b) B" D- L0 g3 O mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. C& g/ t0 F! O3 H1 N mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; p' z2 o9 `7 _- S
mcasp->regs->PFUNC = 0; // All MCASPs
# s0 j* Y1 U0 l8 b6 W- ?+ g mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 i0 ]) m% u' g2 X; h& w( @* S
7 f: t- ?6 T% Z" S% t$ {: T$ q# o
mcasp->regs->DITCTL = 0x00000000; // Not used
6 ?& Y( X* U% v. m) ], U. ^ mcasp->regs->DLBCTL = 0x00000000; // Not used$ t4 {% K4 p- {1 X3 r* b
mcasp->regs->AMUTE = 0x00000000; // Not used
+ v2 U' k* Q6 h9 M8 }+ Q
% {, [) g& J# u5 _) }8 l7 B, v/* Starting sections of the McASP*/
! u2 n% F. p% f! ^: | mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + v: L9 H7 Q3 H4 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 f) H) r h* L/ U3 u mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 ^$ ]) x6 H6 n* U# J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% [0 o$ @, F# `: m! K q/ N0 S5 t0 c' C' }
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 U+ o$ ~6 ~: o8 ? p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( l/ `0 Y7 e! _
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ t2 s& U0 ]" d. j% e+ Z) y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: \2 `$ H+ W: ?7 \4 @- ~( P3 C& {
6 T( B4 X& p7 f% E/ n6 W mcasp->regs->XSTAT = 0x0000ffff;
' H1 F/ B' R6 M6 ^7 Y0 ]) u/ u! u6 T mcasp->regs->RSTAT = 0x0000ffff; ' j- n3 a" s, |7 u+ N6 d
, h6 {7 p, x5 d/ W% ]; e
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 }( B4 w. d% l& d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. X8 f4 Y7 M7 ^ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( X/ P Q- G3 c# K. M2 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# u+ K; R- h( E9 [2 b* g6 ^
$ @$ g6 Y( f" O: a3 U0 [, ?# X /* Write a 0, so that no underrun occurs after releasing the state machine */0 \ L/ d0 {; ^* T5 \' J: w
mcasp->regs->XBUF5 = 0;6 ~: f5 ` n9 F, x' v
mcasp->regs->RBUF0 = 0;' k. H! b$ k/ r5 y6 [
/ o& R, |/ i3 f& W4 m
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 A9 g9 X% s( `* P. P }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* X3 v3 M' D: H7 p2 V, X( D/ L6 i! N mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 _6 K) s4 j7 y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. j4 L; ?' i: W2 S; T( x' H9 w
! j; D _" X" y/ _# D/ m1 q% M
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # G( D" m- _/ R1 ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 U! z. c; H' Y; e( W* a( j* k mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # W+ F1 d8 d- f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) i' b& u0 _7 Z* m& L0 `( Z6 i3 h- |% H. x# u- ]2 `+ H
CSR = 0x0000;
; k$ K! `) Q, j' `9 m! D6 `# |# @! z INTC_INTMUX1 = 0x3d;
4 e' E+ @0 }- e3 D+ Y6 [ ISTP = (unsigned int)vectors;
2 U, S- m6 b* q; ~5 q% H- j ICR = 0xFFF0; ; T9 C8 ^- i; y4 |
IER |= 0x12;
( ^3 P, u% p) U; l) y" Z CSR |= 0x01;
; y5 e: ?; H& w4 S+ H6 Z7 p& L
+ P0 ]& g# z& W: y f
; A$ H8 Z2 e# Y/ u: Q1 m J' B! [
还有就是两个输入输出函数:6 v0 ^( I/ B0 F* t1 g' M
void output_sample(Int32 out_data)6 y2 w/ i: q) R# F/ J6 T; Y; O
{
4 t: x2 ]' C6 X! Q0 e, H AIC31_data.uint = out_data; ( g/ r# J/ }2 h0 q1 _. g
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ @8 x' l& u+ ` _3 z
}
1 H$ b) Q: [( L: x$ h8 D% F* W: q9 j" ~& W+ }: k( Y
Int32 input_sample(void)
) A; u9 D- e: ~1 D, g8 @; r{
& C+ D: `. b1 _" g+ K: S AIC31_data.uint = MCASP1_RBUF0_32BIT;8 y9 l, J! J# W3 y0 t
return (AIC31_data.uint);
; P0 n& L2 G6 Z}
* F% ]6 N% t8 P: s
4 [" _ k1 D) k |
|