|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* B5 b+ J7 F& {* [" `main文件:3 C/ i! p* N1 r: F+ L4 G' L
interrupt void interrupt4(void) 1 J. C1 W; {9 \$ R' ~2 Q+ D7 L( V m
{: o( E$ w- L3 P4 n ^& q
Uint32 sample;/ y( g+ k- q8 X S# `( y4 E
$ @! |3 P8 y/ H) i% v5 k0 V" D3 L$ O
sample = input_sample(); // read L + R samples from ADC
9 X( ~) r( E+ u7 b2 u$ }8 T output_sample(sample); // write L + R samples to DAC
% p# o' }: ~- X return;2 v% p- N( D1 E/ K6 ?- w2 Z
}
0 J, S0 l- T# |+ K! @% w6 _
/ [. Y( G( [ C/ Y, \8 i* T4 Wint main( void )
3 ~8 E1 [# X: b, ?: {4 c" |5 `{
( @8 K' @' }* G1 E- s6 Z+ Y. M$ j+ y, i8 [8 f# w' A7 F
/* Initialize BSL */
: B. U7 h$ b& B. V9 k* ? EVMC6747_init( );& M7 h8 ?, Z# i+ p U& \3 f+ w
/* Call evmc6747_intr function */" d3 h n% X( L) N, N
aic3106_init( );
. @- G) [$ r4 P6 t: i while(1);
1 O0 m9 _+ p- U- ]}
: Z* ?- f" \8 o8 {/ h
* T9 |0 M, {. \8 |1 ?. h, l0 t, K. W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 T5 k4 \% M- Y9 [, G- J4 E g/* Initialize MCASP1 */
9 a2 f% [: f( r8 O8 x mcasp = &MCASP_MODULE_1;3 y6 z' [/ ^6 T$ V
mcasp->regs->GBLCTL = 0; // Reset
5 v. W$ c' _7 S2 Z: T mcasp->regs->RGBLCTL = 0; // Reset RX8 ~& Y) o5 T: x; A! q! V4 J) o# l
mcasp->regs->XGBLCTL = 0; // Reset TX/ Y4 d; D* ?1 S( l# z
mcasp->regs->PWRDEMU = 1; // Free-running* C/ c/ m4 v% x A2 D+ t
// configure McASP0 receive registers
$ Y' }$ s" _; T) m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 b3 L% s7 R) Z
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. [* g5 S- O/ O4 Q0 r7 O. y! L
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 F! o) q; d6 K" M9 J0 C4 i# K
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 I3 U4 [* L/ N7 k; [7 U/ f mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, n6 [$ @8 g4 _! M U& o3 l) j mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 p/ d% F1 X; r3 h) l mcasp->regs->RINTCTL = 0x00000000; // Not used
+ Z6 e. v8 v) M5 | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 u# p+ T% P! |) Q
# E: X" Q* _ E. N
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 @6 k# Z, W5 L* Z2 q. @1 v mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* }' y/ w$ U a8 L+ g$ s+ l
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( B* r! `. ~( V1 {1 e" W8 l, ^2 \ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 [2 M/ A! ?! c1 T1 k
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK! A" R, j7 Y1 c- w* e
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% U- N8 i! P9 W, d! Q6 k) P4 V mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 A" F5 i3 a% D mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) u z' R& e7 R) k# s
0 j1 q" ^' H5 x mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN8 \; Z/ W+ Q. _( M' G' `- P
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) C( \- t$ G/ ]
mcasp->regs->PFUNC = 0; // All MCASPs
) {# C L. e; I0 z; |: T+ p mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 z6 A% R* h7 X+ D
( O2 t" U" ^- {! c
mcasp->regs->DITCTL = 0x00000000; // Not used" ?3 U" ]! g. p I3 x9 r5 f) d
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 O+ g c4 q5 q" Q, f4 p: }7 Y mcasp->regs->AMUTE = 0x00000000; // Not used
- Z( Y0 i5 G: t h4 w; f2 @- z. `# c- F; K7 Y0 h* [ S
/* Starting sections of the McASP*/
; K9 t9 ~7 D' g) d# ^ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 l! _) P P0 n) u( A& ]8 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " `4 {! _! f7 M) L5 y
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 C& W. K' t5 V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* L% r; {5 D# E4 b$ u
* O/ g4 s3 c# R- @: G
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + k/ ~8 c. K) y: d- w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" H+ K% S/ f2 g! y \
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: @! E8 n9 M d, Q5 |" A0 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& j8 G$ C( y1 d0 _% \6 S% k1 y
- b6 b# [2 _& U3 Z% l5 N
mcasp->regs->XSTAT = 0x0000ffff; ( [6 V. {4 s: j& E6 P1 l! x# j
mcasp->regs->RSTAT = 0x0000ffff; # y6 |- ?: P2 T( F( K8 R1 s8 y% \
. M; O3 @) [; W0 R! [6 N( `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ c! p! y% O3 R5 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) K* \, c! f, n( y" g mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , |1 z, a3 }& B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, N; X. e6 z3 P1 \5 `
) M! F4 k5 J) i; r5 S+ l# d /* Write a 0, so that no underrun occurs after releasing the state machine */) Y5 n( @, C8 C$ ~* x; a
mcasp->regs->XBUF5 = 0;
- z1 }- c$ q% }) ~0 |3 b9 m' c mcasp->regs->RBUF0 = 0;
; P6 B6 t, p" w& r! T0 M+ j3 c4 s& l
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ F8 M8 [' d, x: H0 w/ P0 A6 Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 j( Q9 E: O. P2 q" c% c mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 o( r2 b! r6 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ `' }$ b8 J$ z" B0 I5 c3 P0 _- |. G0 c: n7 I1 p8 ?* p6 F
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & P) E. f* n7 A% ~4 L; {# b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 |+ O/ w) y4 W5 D
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - L: R1 m9 D' b+ O' c" U4 `5 X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ J. P0 d3 N6 |% _
- d7 k/ y$ a$ z9 g9 j
CSR = 0x0000;: M# w! T& C% N1 y$ K" H- C J
INTC_INTMUX1 = 0x3d;
+ m: {# g" ~- W D% T* q, S ISTP = (unsigned int)vectors;
* n v0 o2 l; S5 y: [ ICR = 0xFFF0; + C/ h( ?% i4 N2 Y; S- [
IER |= 0x12; & _' e7 c/ Y- \- c
CSR |= 0x01;
# _+ `8 n# P: E+ y) f; e$ {1 J3 g1 P( Y7 N( \
! G g) s0 c7 u( H# B# r
3 \) t9 I1 s+ b- |! J- u还有就是两个输入输出函数: s. L. p0 T' r y
void output_sample(Int32 out_data): w) P( x. {5 y
{
( A# g' D% U' p* L- Z" k+ p7 ? {5 r6 } AIC31_data.uint = out_data;
+ m; u2 L4 n Y2 S6 \: P1 T MCASP1_XBUF5_32BIT = AIC31_data.uint;9 U9 E! B8 @ c; h, S. V0 m
}- q9 K' Y! y% E* T
* L. p: w3 f. | F" a8 YInt32 input_sample(void)' v0 n7 o j9 P% K
{ . Q* t4 V# Q& t* ^, x
AIC31_data.uint = MCASP1_RBUF0_32BIT;0 w- Y$ `% A2 A
return (AIC31_data.uint);2 L3 }- v# c" u& q! X, K! G
}
6 o2 B! [! ~% z' c1 O0 b, I8 l. r# ~; J' F5 p# A
|
|