|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& w7 S u# X; ~% xmain文件:
4 `& M, \. n. v2 ~interrupt void interrupt4(void) 5 v) N: q# {% g( M. ^* r% t3 k6 z
{! B0 `9 X1 ]5 K; r1 m
Uint32 sample;
; \8 d2 [' Q) P: ]1 L1 F: `) X- [& R9 @9 Q S. D: k
sample = input_sample(); // read L + R samples from ADC) v, u) K3 l# }' j
output_sample(sample); // write L + R samples to DAC
9 }; |# p, @- p) d return;/ ^6 y2 T3 z; I" q) t, E) V; l/ f
}8 F; W0 h# O# ?6 \, J! |
$ a5 r/ T7 o9 i4 j
int main( void )
% N6 m f& D2 ^! M5 }0 c! @{, v: \8 y6 O6 f; Z
- K0 y. S+ ?* L. e+ X /* Initialize BSL */4 G+ v& y! P; y1 \, g: m A2 z
EVMC6747_init( );: f2 U/ m' V; h7 q2 a/ j
/* Call evmc6747_intr function */
( S2 k; R. x" U0 M9 P* k aic3106_init( );
. m! I1 z7 D5 F; N! U( D1 G' S while(1);$ \! S9 @3 I/ [: ?! V2 h
}6 `; a" H- ?. S, W
f2 ?% w6 e; h5 q" _' ]' S' S! T# E2 j
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
C6 {% W" b4 j: N- A, E. `- F/* Initialize MCASP1 */
" k+ i& I' S: X1 ~9 G mcasp = &MCASP_MODULE_1;
7 d- [3 M& O$ a+ i+ b) c mcasp->regs->GBLCTL = 0; // Reset
, m" X5 [% N7 f, Q7 ^+ [8 P mcasp->regs->RGBLCTL = 0; // Reset RX
7 X3 ^6 ~; D7 R: ?8 b mcasp->regs->XGBLCTL = 0; // Reset TX
9 I4 A2 ]0 v; X! N9 m8 E, ] mcasp->regs->PWRDEMU = 1; // Free-running& |: n! t8 V1 @/ Y, j6 B! m) g4 m
// configure McASP0 receive registers
& D u9 t4 X; r8 ?3 i mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& {! y' J$ u& j8 `. E1 Q+ G
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! N6 V9 o3 L- ]7 ~/ g' ? mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 H9 x1 N/ e& ~" o; k' [4 ]8 ?
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 O- T0 O/ C0 Y6 p" ^4 C
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 y, [, `+ d2 C' U
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 S- n0 O( B1 k! o- y, q6 G mcasp->regs->RINTCTL = 0x00000000; // Not used' {. ]1 ]; {1 s9 o# H7 ]
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 G+ t, M8 w3 t& w: H) j9 K5 {2 t! h6 X
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used; b8 B# v( q0 Y! W, i
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 \8 {* x: S% z( k. L' q% @: N: u mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 j5 { I |: s* ~$ {+ i M
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! t1 A5 E t3 \' B. q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 C! e; `: q- g5 q& j mcasp->regs->XTDM = 0x00000003; // Slots 0,1. \& L3 g6 z; @
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# r D: v% Y5 e: @ g( Z" d4 ^
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% w* Y5 ~0 K4 O2 M( V! d8 u1 |5 l4 i! a' [; X0 ]& a% Y; z. Y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. K" ~$ v9 K! o1 ? f' L
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ @4 R% x ~& `1 N$ |8 p3 \1 a3 E mcasp->regs->PFUNC = 0; // All MCASPs
. V& b8 f2 f) N. r3 y mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ z p9 f) M4 y. S
: L$ s& H3 \3 F+ n& r( y4 z mcasp->regs->DITCTL = 0x00000000; // Not used& B9 k. s4 L2 _
mcasp->regs->DLBCTL = 0x00000000; // Not used' V+ g! g) U" C+ f6 J- y& F
mcasp->regs->AMUTE = 0x00000000; // Not used
) u. q9 ^: a3 [/ P6 o+ u1 o: d
( s9 i8 C/ f$ |/* Starting sections of the McASP*/
, X1 |8 Z5 C- G; F' y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' p- O2 Q( T" { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 i4 x8 m, \; t
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 o; D, }) y& z8 h' w) k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ A) d* M% K" D: @2 ?2 a% i& ^' [ ~; e0 k% v4 g( a& o% ~# Y* C
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, V4 D. \$ X/ U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 u# h% b4 @% P8 E. U1 H5 e mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. C" |+ A4 c) Q# C+ X! ?0 ? c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& q4 k/ m3 y! ?
5 L n6 }7 H2 u. o mcasp->regs->XSTAT = 0x0000ffff;
6 @8 h6 o7 z- f mcasp->regs->RSTAT = 0x0000ffff; - u* y$ M" [) p# h2 p, p* o5 m0 ^
1 O! w$ q* g3 v/ x6 D5 Z: @0 s mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 }7 f* x( N& W( X" z% _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 C( [/ b% w4 C$ ]3 ^3 `# K
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 `# G$ W3 I$ h9 n/ S& n \/ G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 K+ L% T5 Q' x0 p2 X1 c
/ P5 z! V# [; F1 n/ p/ `; B7 ~ /* Write a 0, so that no underrun occurs after releasing the state machine */6 [- N7 t4 g/ e) H1 ?
mcasp->regs->XBUF5 = 0;
5 z( z2 Q; W$ D, _$ F* q mcasp->regs->RBUF0 = 0;
* i' {/ T& g) x
7 S6 y( U' J2 z3 X5 A a0 A v; ? mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: A1 K: {8 e# U$ L, `6 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' Z: b1 ?5 g, l$ C/ l, ?$ D mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 G$ c+ X& u6 S; i& C% O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 g/ d d# Q6 J8 U; B; @! x- b2 F; M0 ?6 y) F# f/ N. r
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 v4 @& J O! |( L8 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" f$ D4 E6 o! c6 O9 k3 D mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) D n; c7 U0 ?9 N+ D( n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ x6 {2 m$ T9 v9 Q* p' y6 `& i
) e& K, U) x, s- o2 q& A CSR = 0x0000;
. m, l# ?7 s* v! v$ H7 ~. s! F& w INTC_INTMUX1 = 0x3d;. I$ q. f* u7 p9 C5 F2 |
ISTP = (unsigned int)vectors;
& l, c: F' @& M/ _ ICR = 0xFFF0; 4 E! ]/ h5 x- X' O, J& S) {' v* ]
IER |= 0x12;
3 H5 x/ P {) c( y CSR |= 0x01; " ], g7 w6 ]/ ]6 ^
% L6 t, T* W1 I9 u9 @
+ ?( \9 {9 o2 e# z+ K! [2 ]: Q3 q6 l- z7 C) G9 _, j5 G
还有就是两个输入输出函数:
( l9 N( p( w: n+ K" w5 hvoid output_sample(Int32 out_data)
1 G$ g3 {; E1 G& V! @) z' u{% D) O. \ V* B- s8 M
AIC31_data.uint = out_data; 1 g0 I6 s) q& Z! N. t$ U8 e
MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 T7 I! M$ ?, C2 }}/ r( V5 p9 s( g% |+ h7 ?& E
% H+ w0 o9 {* E1 D( pInt32 input_sample(void)7 Y$ f& y E7 o
{
, a2 `+ A; e1 x- X! H B- \& o$ S AIC31_data.uint = MCASP1_RBUF0_32BIT;% m: x- a) K( l. n' [# y
return (AIC31_data.uint);
" o2 E2 g* _: b' @0 o+ @! _ i: v- x}
+ G& ]4 ?3 @5 J5 G( q& |: Y
: y, u& W8 V' G& a |
|