|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, f: ]4 N" n# M% `8 F5 y
main文件:
( F1 [! H/ W% r, ninterrupt void interrupt4(void) , O7 m& u& f3 f7 q& R# ]$ ]: f! v' d
{
# ~" o1 z ^( L- [" j! e Uint32 sample;; ?6 u& A( A5 g) p3 c
2 R+ @! K' w: N! y# Z. r sample = input_sample(); // read L + R samples from ADC
1 Z# J# X0 C# z2 I9 h6 ^ output_sample(sample); // write L + R samples to DAC
6 i9 I6 A0 ] O! B! A J return;' {2 Z. e, v# K! d ]
}* j; d( V {1 h$ {7 [& X9 g8 y( ~
4 V) @, \0 S; P: Pint main( void )
@9 e. X" }7 d( f{* l; [1 w5 K" u# t& W
' d: A- _5 H: r5 S" V /* Initialize BSL */9 G( s, r" r0 m9 o& Y7 b
EVMC6747_init( );
( k2 ?, u- y1 J6 B4 @0 a4 S3 F4 Y: u /* Call evmc6747_intr function */
6 v0 c0 e- Q' D* U* `" y! P+ K aic3106_init( );, V' `4 P. I' k, _8 Q" T6 p- ~7 [
while(1);8 m* {% H4 L! N0 Q4 Z
}
9 n* P7 M+ y9 U: M
3 J7 T- A# G2 k5 ?/ L! _. D. ]
# V5 ~ _' X; O& _3 T, ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- n* f& }3 E) _" m, l3 @8 b/* Initialize MCASP1 */
2 I# a$ }/ |) j; h3 g) L mcasp = &MCASP_MODULE_1;# U: d9 {* N9 p& Y" f
mcasp->regs->GBLCTL = 0; // Reset9 X0 p: O# ^- Q" C) \& d. z1 q @
mcasp->regs->RGBLCTL = 0; // Reset RX
! s7 |" r7 l" [5 u8 x9 E1 D! S mcasp->regs->XGBLCTL = 0; // Reset TX6 S. Z6 q3 n: Q
mcasp->regs->PWRDEMU = 1; // Free-running+ K; M7 Z( e# S1 g# Q; f
// configure McASP0 receive registers
% `" H2 C$ y/ W" w, C' O3 a mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 G1 ^1 |+ Y. }1 H) y, }7 R1 e
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 K+ e3 j( s3 |; n2 t3 }
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) e$ Q6 b; E6 ~8 m% {) p9 k6 v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% O5 H. Q- q$ Q; J% p, [* D/ h mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' F# d6 G7 o* z$ t. G
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! L- s5 i" l& p# G$ j
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 U9 L U! t, X4 x mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 ?% o5 i' g) f: J
+ N9 {8 Y7 F5 p# g* y) K
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 _( A% |0 m0 l) w# b' e mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 ^: c- N. K/ t# [! L0 f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 U% ?* M8 k" [/ Y+ P( j1 ~ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 d C7 y6 ~- J- k& B
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- p1 j- U3 f, F, I- S
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
& H5 N @0 U5 D" O4 H& G mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% `% e) g/ G2 i9 W mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 @5 m, U: T# N' A
. y8 b0 H: ~% X; I! P! l; _
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 Z' H; }8 X( j* ]
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ I! ^" Z. I, c+ H k3 h6 E! ] mcasp->regs->PFUNC = 0; // All MCASPs- S9 v5 A) {; |" Q; Q/ G
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- X" G2 T4 P- `/ @
) T1 t& W" n; s, F: N; T6 j
mcasp->regs->DITCTL = 0x00000000; // Not used
9 B$ E5 H4 ?2 g mcasp->regs->DLBCTL = 0x00000000; // Not used
# f9 w* Q0 S" L/ o3 h3 W: v mcasp->regs->AMUTE = 0x00000000; // Not used* f( x% z* A* T3 w9 O! r/ I: I
( L3 O$ u5 |/ A* t2 ^$ A/* Starting sections of the McASP*/3 \5 s0 ?+ @, u% K8 _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ j' c' f' ? D' _6 g+ E1 w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ Y, B2 W0 z- q; \6 s4 h! m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' U2 j+ T* N6 v0 _; r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& k& W) X, B* U3 W2 N5 [. `
/ o2 Q1 L$ V! C: k7 m V
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 v6 O9 K3 F8 ]. r; i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 e. Z9 y2 D* j; A" e3 I0 k2 ^ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # E, N+ o- T! [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, @: P: J- g ^4 E" K6 x
) S4 V/ U/ q# Y5 B5 ] mcasp->regs->XSTAT = 0x0000ffff; / E# u9 l8 r ~; m
mcasp->regs->RSTAT = 0x0000ffff;
* F6 }* K( n: `# h; q1 U: v
. z5 ?& N9 b5 w. v+ ^ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: o3 W2 L# W2 t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 g; V \# g. ?% E: U N
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / t9 h* k1 ]3 k- o- a# @- e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% P6 q. I x3 F l9 J
, Z+ ]) D6 G+ y) R# k" M /* Write a 0, so that no underrun occurs after releasing the state machine */
* S1 i; ?+ J7 o, k! Q0 n mcasp->regs->XBUF5 = 0;9 l) C' c' U+ C8 S8 o2 ]2 K4 d
mcasp->regs->RBUF0 = 0;4 G: x, @' \8 x8 Z: d
, P7 I j9 e( `/ J; y mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: b5 ?. |( s2 |) p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 S! e1 s" n9 d mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : M/ Q8 V g) g. G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! o9 _) f4 Q F: }6 `! P K7 @/ B) I1 W: D" c" B! i
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) H: n- g& c/ e( @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 r |; L2 X% w& p4 r! F
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 `5 Q3 Y* F; e4 ?2 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; H* @- p6 w5 A$ z& T
, J2 g/ V. \" w n0 i
CSR = 0x0000;
5 D+ V$ n$ ]& O9 a4 L9 ~/ ?; w INTC_INTMUX1 = 0x3d;
) a* z; a' q) Z) T2 v- W* l ISTP = (unsigned int)vectors;! [$ b- D m8 {1 Y9 n
ICR = 0xFFF0; 0 q0 k" f' l9 D; S
IER |= 0x12; : a2 L# }9 w" g1 a5 C2 D
CSR |= 0x01;
1 D6 W' z Q+ p4 P3 N# Y3 ~& r. k/ Z# @
8 q+ F, }9 K! `' @& w5 T$ _6 n1 k. d
2 q5 r; e7 i }- M. n6 _. m4 X
还有就是两个输入输出函数:
0 R0 y0 ?# C; a: Q/ v0 dvoid output_sample(Int32 out_data)
2 b- S3 w5 D+ T/ C% u- m{3 q/ x' v$ Y/ S C- p4 P- @! C8 B
AIC31_data.uint = out_data;
& N8 c* c% G( `8 s: Z1 G7 t MCASP1_XBUF5_32BIT = AIC31_data.uint;
; n6 s. \: r1 x}
! X; W$ `0 f2 T" [8 D/ f3 [. r4 V0 U2 }6 U
Int32 input_sample(void)1 D; ^; m4 q# R+ K: H) `1 c3 j+ Y- V# i F
{ - g; p3 v: j6 F4 b* j
AIC31_data.uint = MCASP1_RBUF0_32BIT;
& ?: K4 u2 }% k return (AIC31_data.uint);
0 j# g( u& L8 c9 ~' v% G}
0 q0 W8 t8 r) W8 F$ X" `
% R0 O4 F' c5 D7 h" h4 S- v- W- ] |
|