|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 ]3 A8 a/ D" D! u. o( f- Zmain文件:
# l, ^ j- P" u7 l# Sinterrupt void interrupt4(void)
4 W: o# f3 a P" }& {) _! ~{ K2 H/ t- ~5 K' t1 q5 b: p
Uint32 sample;
0 K9 ~2 l' @/ G5 e1 Y6 L
4 {/ W- s* a: S9 h }: ]# Y sample = input_sample(); // read L + R samples from ADC
* S2 i* U% H* \! [) B output_sample(sample); // write L + R samples to DAC - L: \/ [# s0 j
return;
% }, x5 l# c" f5 Z$ d5 n}) j! Y. E, g! K! o3 R
3 u8 w! @- T3 ]7 B0 w( Z
int main( void )
" D) Q( R1 A6 m, g" J2 L2 E4 ]7 k{" \, |" a0 {+ e5 _' d5 t
9 S! C ]+ q9 e* N /* Initialize BSL */) t2 X0 B7 Z S
EVMC6747_init( );9 M3 ?3 c' ^5 @/ M
/* Call evmc6747_intr function */
1 P% M( S9 I; J! l aic3106_init( );
( ]# t0 h) ~5 t8 i while(1);* R, y2 z2 O# Z+ x
}; J2 U2 A j; U& {( Y
+ }% s9 I, u! a4 }( O& |5 U C7 v, Y' N# |2 }" v5 |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 J; o6 ~6 k6 h
/* Initialize MCASP1 */
3 M, t8 O& S) X# ^ mcasp = &MCASP_MODULE_1;
/ L8 F$ H8 Q4 s mcasp->regs->GBLCTL = 0; // Reset$ O$ f- V( _% W6 A2 }$ Q3 E6 S$ W2 i& V
mcasp->regs->RGBLCTL = 0; // Reset RX
/ _1 s% f8 G, `& Z) q mcasp->regs->XGBLCTL = 0; // Reset TX
2 G, P2 H3 F' f4 w$ Y& C: N! h mcasp->regs->PWRDEMU = 1; // Free-running
( g- i% j3 `, m9 z( L# K // configure McASP0 receive registers
6 V+ {( O8 n& h mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% a3 S+ @- z- U! ?# L1 V" E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" o" H1 Y/ k3 r+ ^6 x8 {9 B- |1 N3 B mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 k2 M1 h6 C4 T! s
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, N( v [8 C; i: a mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 d: U( r1 h. k0 U# Q
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
" _; l# x+ o3 \ mcasp->regs->RINTCTL = 0x00000000; // Not used
& F+ t. u3 [/ p" \ ? mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 l* X* J7 _ }1 l* z% A
7 S* U1 z4 y9 d mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 M# p. a& {7 e3 K" s
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 ~- \% [* c" f ]$ h! U$ s6 q! J$ W/ O mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& ^7 p1 ]4 ] b+ l: F) x* b
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 m/ `* Y' V4 H- q) Z/ a mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* I, g7 U$ p% `: X1 p4 p0 H% n. c
mcasp->regs->XTDM = 0x00000003; // Slots 0,11 `8 Y$ F0 P d1 G5 }
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) G8 |1 M, \; v+ U4 d7 g+ s
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: ~1 F8 h/ a8 y# {: H
5 y) m* ~; D7 g: J3 D9 _9 ~ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 I/ w5 {3 k& F' E5 r mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: z8 l" @% `1 V4 `+ [$ \ mcasp->regs->PFUNC = 0; // All MCASPs
! e9 s7 ~9 y$ F; ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 u% q5 i* r5 t8 s5 s9 s, G# D
9 o' _8 a0 f0 @$ u8 W4 ? mcasp->regs->DITCTL = 0x00000000; // Not used
# r3 ]% X% I7 f, o mcasp->regs->DLBCTL = 0x00000000; // Not used& F. G) t0 o4 }1 e
mcasp->regs->AMUTE = 0x00000000; // Not used: R! }6 p8 U2 V4 P+ ^! V# k
3 V9 I9 Y5 m4 f( _) Z
/* Starting sections of the McASP*/0 Z+ | K! i: }3 e( u7 ~8 p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / M l$ {3 Q7 s7 V' K6 F! m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
) i$ O0 s6 s" `" u! h mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 e1 {1 n$ { z( T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ O5 P' {; d `( u e% Q9 I j8 C6 _
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( K5 i, Q% ~' B- M5 N- O; d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ f) W* n0 }* ?, z3 u
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& Z, j0 X* _% D- p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 B( C# ]# |8 H6 M3 l
( h7 }2 J% F' \- O: J/ R( X( K( W mcasp->regs->XSTAT = 0x0000ffff; 9 O# ^9 y: h! M U/ r& W
mcasp->regs->RSTAT = 0x0000ffff; + `+ W4 ~) E& N5 p8 q' M! @; ]
5 E" T( l! T0 b; L7 c0 |9 }5 {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 _4 U, f% O7 y& @2 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 b P' `- ^) a3 M: W& h/ }1 P mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( I- G( v/ c% u/ [1 r- J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); b+ F4 Z- Q3 s
6 q& o' B5 H# D2 U /* Write a 0, so that no underrun occurs after releasing the state machine */' ~6 o7 z7 _0 o4 {
mcasp->regs->XBUF5 = 0;
: j0 V# {6 q. N5 l! R/ \, d1 F mcasp->regs->RBUF0 = 0;
$ O1 j! `2 E! C7 S3 l* b7 U- a/ P& |0 C
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 `5 z8 Z& {/ Q6 L' B! y: S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 d# P! l# Q) | mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; n5 v$ J5 G2 a- R6 G' y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, p& V9 u+ h- G1 V
, O& m8 V" R* }; t! b$ p0 P4 _
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : k! M6 k& j- _% T2 f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% D2 w# p+ U `0 @5 S mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 E) K" r& g" M0 x& _: Z2 h# s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 Z% c* o$ P9 X- n* | t% Q/ H
0 O. g: u, k2 u; o# ]0 \+ M8 H CSR = 0x0000;
: v, N% ^: Q; Q8 L INTC_INTMUX1 = 0x3d;
5 c" S6 g9 C/ ^# n% p5 A ISTP = (unsigned int)vectors;
7 M8 F) p: o+ z3 y3 W. M ICR = 0xFFF0; % d( e n n) C* i4 f
IER |= 0x12; 8 X! B) j( F+ ]& m' V
CSR |= 0x01;
6 [3 |& c h% n
+ I0 ]5 ], ?' x& k1 J4 g
3 C t: n# s. ^% k# y N9 S/ T$ x9 j, ?
还有就是两个输入输出函数:/ N' M& K3 w( u" C1 T8 y
void output_sample(Int32 out_data)
' \! ?7 J; A) M- x& f{+ K8 T. f0 _2 |9 L
AIC31_data.uint = out_data;
4 s8 o8 I& P+ {6 t4 G9 }: p MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ j2 h ?1 |6 e' e' ?6 o}
; X: h4 j" c2 F, z& K8 ^
# R2 ~1 {" l1 s& N5 pInt32 input_sample(void)
, L! ~ i# J1 @$ `# M% }6 s5 _+ X{
+ d! S& h8 N9 ^+ m9 N4 o AIC31_data.uint = MCASP1_RBUF0_32BIT;- Q$ O8 |/ C* p3 b9 A. F3 E
return (AIC31_data.uint);6 r9 R0 {! R; {* \0 M0 }) O) V0 G
}
! }' A, T9 H+ x" v) v7 H9 ?/ p
# e/ P" Q3 X; d* | |
|