|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, @7 h$ D1 o6 u, u
main文件:
3 N% e b' }$ ]interrupt void interrupt4(void)
7 u! Z0 ]4 {& P- ^ o7 `{5 Z7 A1 H( Q4 A6 |1 J2 L5 F
Uint32 sample;! n: d% j" t' o6 K, n' ? c
. ^) Q8 o7 Q% \0 F, ]; {, A
sample = input_sample(); // read L + R samples from ADC
0 Q0 X+ Z& i; p7 g1 m) D5 k9 N" R+ W5 ` output_sample(sample); // write L + R samples to DAC 7 g# r ^. B$ e6 W3 F5 a
return;
4 \2 L) R4 w3 i. Y# b' m% p/ v5 A, L' F$ o}
3 N. Z. M9 u5 \
4 Q( y0 C% C/ m2 `+ @int main( void )% ~0 @. w4 h! H M
{
z/ L( I3 y. {8 _. N
* s4 w- f6 X' a x, @; i /* Initialize BSL */7 h) q; H2 T6 R/ J; j9 z% U
EVMC6747_init( );1 b; \$ F& Z% X. ~
/* Call evmc6747_intr function *// z3 X8 K3 O/ T2 v( ~! j
aic3106_init( );% R4 B+ r5 H) W H8 r
while(1);( r2 [& z$ v( e6 F) u
}
$ r& F% [/ k2 A) N9 o. O, Y
( o, p% L& V$ M$ s& L
2 _9 p4 E& z [7 `$ A3 r0 E aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! ^, L" p7 g( Z/* Initialize MCASP1 */5 e3 u# ^) k8 T ?
mcasp = &MCASP_MODULE_1;5 o( B3 E! l) _# j# d" F4 b R
mcasp->regs->GBLCTL = 0; // Reset
0 u& U* D8 R3 S6 @$ @ mcasp->regs->RGBLCTL = 0; // Reset RX
- ?3 d: _* O7 }3 P. C5 a2 X! p4 q+ @ mcasp->regs->XGBLCTL = 0; // Reset TX S7 r' B6 S. x! j
mcasp->regs->PWRDEMU = 1; // Free-running
4 N: x, T' i# H8 g1 Q2 s // configure McASP0 receive registers
6 X# |5 y; X3 y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used- O w, @( t' e$ ^4 P
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 r$ ^8 f5 Y/ `" Z' e1 l! y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) \8 ^9 a% r1 f, d mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( p2 t" e6 X/ @) q/ F$ x
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' J! i0 q/ D8 m
mcasp->regs->RTDM = 0x00000003; // Slots 0,19 u2 v8 T) b3 H: j
mcasp->regs->RINTCTL = 0x00000000; // Not used
8 |7 @, v; t' \( E) x) z S _! h mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
b7 Y6 c: P( n; S/ j: i1 ~& P' V: p% z$ E# Y% Z) [4 U
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 N: V; z7 D {2 R! y8 N
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 J- U9 d& k/ @' m: R! \3 y. t; u mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 y% i) `! Y( z5 ~9 i& \ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! Q3 i3 }8 O" @
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' R* ]2 h7 U9 l5 C6 M/ O mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ W5 C8 k; W% q: X' u8 j2 Y! H$ i mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
|# T6 a4 y8 m: k& E mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ S2 h+ L; `6 o x* r
7 T, r* e8 ^; B2 l- s) {2 u mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) X/ F( o) r, l/ F- ~4 P! U; b
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* O) q% L6 U" L u
mcasp->regs->PFUNC = 0; // All MCASPs
7 v* ?! D8 [* l ]& W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ E2 L! k- h) `+ x2 D
3 M9 i; g% H4 E. c& @4 B; j; M) y
mcasp->regs->DITCTL = 0x00000000; // Not used4 n3 B; S( T9 W- U A
mcasp->regs->DLBCTL = 0x00000000; // Not used* I l, r0 ~4 t. M& O
mcasp->regs->AMUTE = 0x00000000; // Not used
: F0 R2 ]6 r& Y
2 L- G" |7 z6 l& r& B) z/* Starting sections of the McASP*// O' c" }# R; t/ u' `: t; y7 J
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & _- Q1 Z% R3 c, d9 h3 q0 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 5 v2 d- v R/ U1 n2 T
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) M0 U9 G" n& j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: U% ?' F* s. ~5 B2 s
( x4 i" ^8 X5 {' Z mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' M7 y7 C; K+ {& Y: _0 A( J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: Z3 H9 x N7 @7 h; H* ~ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 T1 i! g, b% J0 k4 |8 ? J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 ~2 W9 |2 u) K( H6 }' g- C* o! g+ [: Q
mcasp->regs->XSTAT = 0x0000ffff; 5 X2 m+ T: T- ?( i Q
mcasp->regs->RSTAT = 0x0000ffff; / T- j; i- ]7 G$ }2 s; \
9 b8 D4 Y$ A; h( a mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, A1 g& s) S: h" I4 r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 b: A! G2 g$ Y- n+ l
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ b6 A2 O! d# }! d, g. m3 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; l" {, u$ R' l0 Q# E/ M
" g4 j1 ]6 w+ Z d5 c% l" {+ Z /* Write a 0, so that no underrun occurs after releasing the state machine */
" w6 b/ _) j0 }5 M. v. ? mcasp->regs->XBUF5 = 0;8 I7 G5 \! B; Z1 O9 W" G
mcasp->regs->RBUF0 = 0;' h$ F- `% E( B/ Y3 W \
; d" G" j M! @6 {! b. Q0 |+ d) i7 y
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ A0 \0 T: Y/ {! m& k' V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% s4 N% S: \% A mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 k) k: }+ I6 {1 u& B+ x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% w0 f6 j( k2 p
8 ?+ y* F& ^6 h# k% M/ U mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# a1 k, A B& M; L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 e, g$ O: z2 K, K
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 m7 ^- {( O B' Q0 F" U4 ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' J0 d" D! o( q i# v9 Q8 n
& Y+ S) ]! B, D) w
CSR = 0x0000;
; V& n }4 Y3 h! A+ i INTC_INTMUX1 = 0x3d;
$ w' W' w% @6 N* b6 q: i! U# Y' s* [ ISTP = (unsigned int)vectors;2 B& z* m- I5 U v- H5 ?6 V
ICR = 0xFFF0;
! G0 v6 W* C0 I1 C+ V. X IER |= 0x12;
' z. v) t$ u! K' a! O5 w' P CSR |= 0x01; 5 I( U0 I/ h. s% X. c
{. s1 l0 e: R0 Z- d& t1 R
' m( X$ ?7 v- e9 i' b) q$ q z
7 H! n$ J+ k) i$ M1 N0 T还有就是两个输入输出函数:
4 i% t+ J& E, ~5 b" Uvoid output_sample(Int32 out_data)
! a! i. e0 i) v( G{
3 G% g( Z9 `: w3 c$ |; R AIC31_data.uint = out_data; ' L3 G5 W* n; o; f1 L4 T8 C
MCASP1_XBUF5_32BIT = AIC31_data.uint;
' m9 P$ {" A1 G- y e! g}
9 T5 d H# q& _
/ V6 _' `7 G6 b& b+ Y0 KInt32 input_sample(void)$ Z! ^: ?% h" ?$ a' Z0 a# o# m
{ % c2 M0 b' ]# R8 j7 J
AIC31_data.uint = MCASP1_RBUF0_32BIT;) d8 a9 [. M: z+ e3 j+ L' J
return (AIC31_data.uint);
1 X( o6 M ?! G9 R}6 J2 E! R9 |3 K: B: @& y, R
1 W4 P9 { o w+ {; h |
|