|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# N/ F N2 K# W" N* Z C
main文件:, b) G0 Z4 Q* K2 g
interrupt void interrupt4(void) ( o9 v6 b- P, A1 k
{
' L5 B5 X- h' N Uint32 sample;
+ U: s$ u1 I5 x/ @8 L1 {6 o# q1 x! u, G( [+ r
sample = input_sample(); // read L + R samples from ADC, i+ n' W9 G' Z( W5 Y9 v8 x Q/ I
output_sample(sample); // write L + R samples to DAC & D' J8 v! S& Q& x/ l
return;* p- t! Q. b1 Z: u1 `
}* Q8 ~' D; C' B8 ]6 A0 P" r' r2 z
1 A) m8 ~) w! O: W" ^* cint main( void )8 H) X; Q: U5 J Y7 _! m, p
{
" c, c. X9 |5 `: U2 f* N& D# b! S% @: q- T. e5 v6 Q, k' F
/* Initialize BSL */
- h7 E$ v8 { n2 S1 d7 h7 r EVMC6747_init( );+ Z% q: s( @. C4 [* E
/* Call evmc6747_intr function */
' Q1 O( k! f* v: O6 ~; e1 A aic3106_init( );- ]) J% K6 X, U- J* Q9 w
while(1);
8 ^1 s4 f D D* q% k- M2 h7 Q# ^}
( P0 f. D' |5 i/ C6 b5 {8 L& y# j8 O, `9 B# d* a6 m
. f8 W# x4 [$ V3 q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) [. h# b4 u* g$ W; K4 n3 l% G/* Initialize MCASP1 */
& L7 P/ T7 s A8 S2 H; w mcasp = &MCASP_MODULE_1;
1 i! x: O3 o* n, v- \9 H+ E. P. K+ l mcasp->regs->GBLCTL = 0; // Reset
' v0 W: u' ~( v, F, ~ mcasp->regs->RGBLCTL = 0; // Reset RX7 t0 P; A4 M. P
mcasp->regs->XGBLCTL = 0; // Reset TX
/ p r, ~1 [& p! R I5 s& X mcasp->regs->PWRDEMU = 1; // Free-running$ W, m. b/ u. k3 e; }. F
// configure McASP0 receive registers P* g# O! R5 `1 T/ ^; Y1 C" B
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" O* [ K' k& A
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
x+ U- ]! v" u, k6 Y4 Q# s mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 |) J4 D: w1 {1 e
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 m7 |9 a6 l+ [7 B( K, z: v Z mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 Q) Z& D; }: h9 p
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! a, M. O3 m% f8 h0 \" X) `
mcasp->regs->RINTCTL = 0x00000000; // Not used
+ k9 p; A4 Y( t& H9 X3 ~ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 [1 [$ }- b& N8 W& `: C( p' n8 F; b8 _; v* l. E) |! \
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used$ v3 o! L/ g+ @* G; E
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 _! x$ N: Z6 Y' G/ c, y; { mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: I' V6 L: [: s* u% H' Z0 ` mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# f7 E& q9 {. N: E3 \7 _# D
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ ]" I- x6 E7 F$ `' C) m$ w mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. l6 Y; q! F% g mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 r4 Y2 ]* {2 T& w+ W4 K2 t1 x8 i
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 [$ o) n! V! u/ t0 v
! h( g2 V' U9 C3 W
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 |, u, H7 l) }8 w7 E$ ?- ` mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! q4 N" l @) n2 }* y3 W7 f( c0 ` mcasp->regs->PFUNC = 0; // All MCASPs# a+ `, V# n9 h- t: s6 j
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 I- r7 B# o+ J \
6 U3 r" W. } \- H7 _ mcasp->regs->DITCTL = 0x00000000; // Not used
9 e" ?& X! G# v* C mcasp->regs->DLBCTL = 0x00000000; // Not used
' z+ v! r4 w& K& }* ^* F mcasp->regs->AMUTE = 0x00000000; // Not used
* `# X8 l; X2 T( ~: @9 C# F1 P/ h! L6 y9 B
/* Starting sections of the McASP*/# I! `. I! j- t3 z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; z; K, Q( `8 |$ \6 E7 k8 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ [& `# R, x" S1 @( N, h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % o) U+ R, k7 h$ ?1 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' [5 e, M5 \6 I9 J) N8 j' w* U
2 z) r% K/ z3 W0 b mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 H* G3 M; [3 @ {/ p5 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( d5 G, ^7 e6 O" G6 W: F. i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; z' O9 _0 Q( m* O" ~+ P+ X& ~( S, \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" Z3 o) g; ^4 D! l U x# D B& @( m
mcasp->regs->XSTAT = 0x0000ffff;
0 A& U8 a, ^: I7 D/ O4 N mcasp->regs->RSTAT = 0x0000ffff;
- D4 l) B% E1 a8 i0 C3 w$ j9 _" m# c0 |' F6 M
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# r$ y g, J7 J! v1 J2 u& p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- S9 H- h1 y; `4 U& B7 ]
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" C8 u6 K' o2 z% T- ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ S) ^8 X8 `8 d7 w- f6 v/ u* M+ V7 x. g7 U# {3 P9 S6 N D
/* Write a 0, so that no underrun occurs after releasing the state machine */
; o$ M6 n) K ~. W. B mcasp->regs->XBUF5 = 0;' E4 D5 \8 z% d; E' r
mcasp->regs->RBUF0 = 0;- [5 G: H' s# F% ^: D" `
/ N# ]. `+ B/ M7 v/ o mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # n" L( D4 U7 Q }8 [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 k* }* X$ @' H mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 i/ h' J, K! n1 I* r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ G9 s( P& u4 k+ E$ x4 e, }3 ]. r/ u
' v1 h" ~9 w" _8 }7 ^3 o& F- ~) C5 i. G7 j mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 b% x& [+ G$ G# B, g( N. @/ {, R% i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 i! J+ F- w% O# Q
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . X$ x4 Z0 e- W( x% o( K" z; I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- `( D: N( L' Z9 c9 E
h* c% R, W a R; j9 a- A8 ^! d! q0 {8 o CSR = 0x0000;
2 x! M5 T& C7 g4 n" L( r; x INTC_INTMUX1 = 0x3d;5 S6 d& F& R% j7 _
ISTP = (unsigned int)vectors;
9 j6 G6 y. x0 \$ v' Q- J# ^4 g1 s4 R ICR = 0xFFF0; 1 G) V7 _0 K% a# M; u/ C$ Y
IER |= 0x12; 8 C, Y' \3 C! \: u* |% C0 D# A0 Z ]
CSR |= 0x01; 7 M9 r- R' t& A9 ~
# |1 G3 s0 A6 h( |
, r1 B: }5 O% `9 Q
- K' g4 ^+ p% H+ I( p
还有就是两个输入输出函数:- V) a- T$ w0 `! v. q" Z
void output_sample(Int32 out_data); L" d( _' w, ^ S" y1 U- M
{
& T, t+ }( L; ?+ j& X AIC31_data.uint = out_data;
- d0 ^, C N$ R# k) Y. h0 Q MCASP1_XBUF5_32BIT = AIC31_data.uint;* g7 ^& O- P) O0 k5 L. }
}
- y2 Y, `+ n: ^" q2 E2 \
5 g( _" G# I& t0 X4 GInt32 input_sample(void)
8 l+ ]0 E$ \* A7 ?4 v{ 2 Y# A# ?8 b) ]( k( k5 J) `, h, H9 U* J
AIC31_data.uint = MCASP1_RBUF0_32BIT;# W% }. e8 _' j7 W
return (AIC31_data.uint);
6 K: P: q# g6 w}' }- Q) E5 R1 L6 u# g- b
K! P: @( N N$ S |
|