|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 v5 a# H7 F; t' Dmain文件:
) G& M9 J2 }9 r; J" U4 @: ]; Iinterrupt void interrupt4(void) 8 D% d6 l9 N! M0 B3 N: C
{
% Z8 t" }! m; @& i8 R! x* V6 p Uint32 sample;8 A& {0 w3 r2 D
! S* u9 @* O. G) h: b7 K
sample = input_sample(); // read L + R samples from ADC
( |. ]1 `6 G( F4 s output_sample(sample); // write L + R samples to DAC . M, W% \3 o% [/ Q" V8 v
return;. E8 }1 I( b* V1 W f4 N
}
+ c7 G& H9 H1 F: L, `; g$ Z: m; U& c9 O
int main( void )
- B2 G7 @; x3 d. c \{
% y1 S2 w1 E: q: h! T7 W5 X" k- E4 y: H
/* Initialize BSL */
3 }1 X7 G3 m& `" s" K EVMC6747_init( );! |2 t! K( a5 |
/* Call evmc6747_intr function */
. \. {5 p1 }. m Q$ e; @7 e aic3106_init( );6 ^0 y/ X7 J; X; j a9 \) c2 C2 n
while(1);
3 D4 q! j ^# s# n% h}
d A, B$ l( m7 G- L
9 i4 e1 w% X+ [4 K8 D! o- k8 ~, X& @. E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' M! T6 U, l( u; S+ l7 k
/* Initialize MCASP1 */* ?9 c1 B3 ~ ?7 G) [
mcasp = &MCASP_MODULE_1;
% w4 u* r+ W* B( n8 C mcasp->regs->GBLCTL = 0; // Reset
! z) M, t' z" ?5 z mcasp->regs->RGBLCTL = 0; // Reset RX
3 s- J) i1 z8 j0 P mcasp->regs->XGBLCTL = 0; // Reset TX- @2 l* A |6 ^/ ~9 F& h- F) E
mcasp->regs->PWRDEMU = 1; // Free-running
# L; A/ P5 y& I* J // configure McASP0 receive registers
9 J; N+ O' O! c; w# A/ l, v! v mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. e- f! d0 d2 E, g2 B; b0 Y
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
I# I( M$ Q: x) H5 U# t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, ?$ Q1 ?: s# I t7 h; \ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# i- [; ]; ` b3 c. L/ s
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( o* F7 i- K' Z" E4 y& }; }
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! f9 q6 E4 c+ j5 p) R1 ?7 |: K
mcasp->regs->RINTCTL = 0x00000000; // Not used. V/ c$ Q: R) D) \5 P
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: S7 m* X2 {5 [3 `5 ~1 ~
7 k, W2 ~( f% v7 o! E3 b mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
V+ ]; s% W" E) b0 G' b mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; O, Q+ e3 ?7 d1 [6 N( c mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 t; z T# O6 Q4 |- k8 k
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- |' ~+ k P7 B6 M/ _6 g; ]6 K mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% d, r) P8 X5 b5 k mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* p' I/ O5 @2 e mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, V9 z7 B1 u6 `1 K; \6 } mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ f7 e4 i I+ e( k! W0 T
" X5 y* A8 k7 m
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN% f( o4 u) w2 Q/ ]" p
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT2 [& }4 Z0 \) f7 M/ h
mcasp->regs->PFUNC = 0; // All MCASPs
. L5 _. B/ O7 T7 _0 Q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( r& _$ y. _- m; l" R+ |- f
6 I0 J- Z6 N% G4 ` mcasp->regs->DITCTL = 0x00000000; // Not used
0 O5 N$ R3 | ^/ [; F1 F/ M! p mcasp->regs->DLBCTL = 0x00000000; // Not used, H: c- K! R* U+ k2 i
mcasp->regs->AMUTE = 0x00000000; // Not used# _9 z- v9 Q- C& `. C) i
9 j8 K$ y! j8 K! x$ }# l/* Starting sections of the McASP*/
+ W& x9 S9 L I W, Z" [3 [ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 |* r5 R. x) |1 d: |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( M' {) T0 y' t( g& M mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 l! z* o9 W! e9 r4 y+ f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 G$ ~: j! ?( s ~. J- J
+ x# s; P' V- D4 v* \
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: R4 ]9 Z3 }& x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" w' V2 E5 ]9 e' \$ B4 e mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; q! ^5 N; ~$ J" `% @0 U( @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 G( W' t P( S& K8 J. A' \- e1 k) q2 m* _4 Y& x- H3 n
mcasp->regs->XSTAT = 0x0000ffff; 4 k; I9 @3 ?8 s$ ]9 j8 ]6 m
mcasp->regs->RSTAT = 0x0000ffff; # G: l. J; i: K$ s0 w
; t- [7 l* s' F$ H. x2 K mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; o0 w5 a& O3 E6 c! u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: Q K: J0 X r' @% Y4 Q6 N8 K. ? mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' o9 a4 l7 K) v" S$ I) q6 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 d4 O5 N/ d: k9 Q; R4 v+ M
8 h& Y6 ?7 d5 Q- X3 B/ M /* Write a 0, so that no underrun occurs after releasing the state machine */
6 a O+ c" [, p0 K# \7 {/ Z& x" b+ _ mcasp->regs->XBUF5 = 0;. j2 d P- \4 ]( A
mcasp->regs->RBUF0 = 0;
7 _6 G: T# q2 @) `- ~ K& I, Y. n2 j9 q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% v% |' x1 y7 K% }+ c) e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# L* S; Q' `$ {4 w. c9 ^
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # v( c8 ^1 S" A" Z9 `! o! H" h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) R, q. c6 y/ y; J9 j4 B: p z! E' B, W+ W- m0 X0 e
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( F3 d o; s; Z' O v4 N* |) n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% R: H4 s) B' W5 z% ` r mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # q# {! f0 X: C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
W$ S* ?* T* A, @* S$ W* e: X4 B& Q" ~4 X1 c2 z# K+ ^' w
CSR = 0x0000;) }* u) l" L; u
INTC_INTMUX1 = 0x3d;0 h9 Z9 I$ {& o" W8 C5 I
ISTP = (unsigned int)vectors;
5 [$ Q6 W* P7 i: a# ^ k ICR = 0xFFF0; , f) U" t# U' A! ?$ M+ ~" I7 E- B
IER |= 0x12;
, L, m, ?: [2 T. @ g CSR |= 0x01; ! [ D/ V9 c4 h$ z
E/ j9 I' d P/ m& r+ b7 C2 i& V
& l3 d$ {* _: a: R" L
+ K7 K- n2 T% o; T5 A0 X# _) r8 _
还有就是两个输入输出函数:
- P H/ n& k$ kvoid output_sample(Int32 out_data)
+ J, E7 V* X+ ]{
- O0 r# i) F) m& V) y! ?% T AIC31_data.uint = out_data; . K V2 F/ M& n" k4 M9 u3 z/ J
MCASP1_XBUF5_32BIT = AIC31_data.uint; E* ~! F3 t) e" ?
}0 K0 y& P& Y7 }4 t
& b( M1 E, P% C' u& qInt32 input_sample(void)
% p, f+ ?6 R# Z4 w7 D3 |9 g- D{ `- Y3 |/ M6 p" d0 y9 b
AIC31_data.uint = MCASP1_RBUF0_32BIT;
, v4 ^$ k+ S+ H return (AIC31_data.uint);' S9 M: C$ {5 [) I1 p
}; p/ h% d9 c& z6 \: U3 _
; @$ h/ I% ~ u2 ^; J( Y( U |
|