|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, }, J5 x! O& @5 m
main文件:
$ o8 s6 c" c3 E& s% ~interrupt void interrupt4(void)
6 l# M$ A! _% [' B2 N/ E7 {5 O{
! a0 W T' m. d* C( d2 N3 } Uint32 sample;- f) [1 F2 n" S0 t ]9 k
& E+ d6 S' Y% Y5 {
sample = input_sample(); // read L + R samples from ADC: C+ a) m- `2 C% H7 z
output_sample(sample); // write L + R samples to DAC Z3 x) X) F; {8 ?
return;
( [% x% T, M, @# V}
! T- i3 y; z- [( `4 j+ _. `& t3 ^* N B$ F" G" \+ _! O2 Y
int main( void )+ t/ t" s) J. y' d* L: ]
{$ h! H7 f5 C+ i1 Z
; J$ `2 x% D! ] /* Initialize BSL */
; T1 Q2 }) q9 P$ ]; C; X EVMC6747_init( );; f& D! J7 y0 m5 z, f$ d
/* Call evmc6747_intr function */
2 M+ t% ]6 b; Z7 {2 g) G aic3106_init( ); c# |) C+ ] ~0 j: T0 n( t1 A
while(1);' V# s: y+ f# F, C. b
}) h+ D- s( O4 g4 z7 k+ `4 q- a
# w) d' ?# r0 ~: W+ e4 b- C8 n. o, K
. ~; k) T8 a. I/ Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 U9 d5 Z {) B, R/* Initialize MCASP1 */5 B6 _$ M5 ]2 Y' S9 Y
mcasp = &MCASP_MODULE_1;& S1 |6 Z/ Z, r
mcasp->regs->GBLCTL = 0; // Reset& Y0 m+ j6 D) D" Q ]
mcasp->regs->RGBLCTL = 0; // Reset RX
, p# B6 Y! R9 k$ N' U8 b mcasp->regs->XGBLCTL = 0; // Reset TX4 `1 B7 m5 l1 k6 Q% H0 Z
mcasp->regs->PWRDEMU = 1; // Free-running
$ m' D# R2 z" Q& T+ G& w // configure McASP0 receive registers4 \* l" v: x% X$ {- \% [. j
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# y8 g: d: T' @8 ?, {4 }! n8 E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 s, u2 I( } a mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 T7 T" ~2 ?9 F: O
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ K! F6 D% X9 _( A. d: i! p
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 c; l) s' c& G- L, y3 k( a( W& R mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 h) a. M3 m3 U4 {& @ mcasp->regs->RINTCTL = 0x00000000; // Not used4 J$ Z; c3 [$ k/ k: u k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ G1 `/ Y s( l$ l; {* U
: K. O$ ]& J# Y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, g \7 ~5 H) W" k$ E* G
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) s% u+ D U( V% N3 ` mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( K! }9 S2 ~2 u- v3 S mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 u3 Z4 b: U1 p) i9 A& t
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 n, T% A6 T- }) B: V" E
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ l8 P6 p& E" k0 o7 m7 J$ y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" M4 o' o$ ~" ?% h( V8 W mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" b8 l8 W W0 |
( w' H' m. J8 ]1 J; Q5 N
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 f, W, F+ Z5 k2 i mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ O& c: ]2 h* T+ R* o, U* ] mcasp->regs->PFUNC = 0; // All MCASPs8 I) P; U- X ?* C J; H
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. G* t: P$ d4 }9 ~) j- a% D
4 {& I: L9 P* D C- B
mcasp->regs->DITCTL = 0x00000000; // Not used
% z# P, m* h0 M( S7 @8 N5 f( J mcasp->regs->DLBCTL = 0x00000000; // Not used
) W* M0 D% q6 b+ W- G. j8 f mcasp->regs->AMUTE = 0x00000000; // Not used+ ~9 ?7 u" H3 J$ W- C
, N4 l8 N% l7 Z+ B( m4 }; P* k* F/* Starting sections of the McASP*/
9 P6 {' o a2 C+ O. O mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! a% |* l4 X2 \ [* {9 M9 c7 C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % j/ l8 j* {+ P. G- @% t
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; F; x5 a: z" q% |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 K3 E; l. J# f8 \' W; X
% A$ R) f- N; f- L& y' ]5 Z1 f
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 ^6 q. ?: @- @/ V( _, u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% V4 c. |+ U' w* k mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 a1 Z% U; P; v% t2 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ {4 p( \4 |+ E+ b
8 D \! H, x8 W! n) V- K9 E ]( }& s mcasp->regs->XSTAT = 0x0000ffff; 3 p3 N1 y2 \7 ~% e9 ?9 a
mcasp->regs->RSTAT = 0x0000ffff;
" H: {$ Y& k n7 Z# O1 J7 d# A" [
5 F+ n3 D* [/ L" R( z mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ V6 ~; L W$ b- ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& o+ D5 M$ g6 n2 l! S+ C mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 G: K- ^; \( x. J& G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. n" H0 g2 G$ p( P; \0 D
# p+ P& T# R' M" y" _ /* Write a 0, so that no underrun occurs after releasing the state machine */! b9 Q3 Y5 R1 R0 r8 L5 W
mcasp->regs->XBUF5 = 0;
2 W7 _) _: A- t& h8 | mcasp->regs->RBUF0 = 0;# x* x' J8 q6 Z6 E/ J" F% u0 E5 }
) u$ O' j' A( Y- o: N7 ?
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - p! H+ X9 r R7 X+ k" {& P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& k C v1 v5 g+ i mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 m7 g5 F- W0 v2 J s' C: V8 M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ a4 U. {, ? _) K' V
& R- ^/ w4 f# l) H. X
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & W( H$ `& z. b% f- D3 Y- O6 T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( R9 z! S* k) i+ ]. d& X
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 Z% n- p. A5 ^( y+ O4 q2 O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 d! y) Q2 P6 b, ~' A9 o( J e( J0 p, A5 E& F! D6 q' R- E& Q, O
CSR = 0x0000;" E8 v# p0 D# o; \/ z" p
INTC_INTMUX1 = 0x3d;
4 I d! ~" a' @* k, A# ^ ISTP = (unsigned int)vectors;/ ?& \+ N. F/ b+ l
ICR = 0xFFF0;
6 H0 r; t. Q1 B. d e IER |= 0x12;
& b) e1 p; W9 F; F1 H9 P CSR |= 0x01;
4 j; J/ K( P7 q6 s$ u; U8 A* ~2 v' L3 r/ ^
' J; O# I: M# o- B/ ]) q% q0 J: Z3 ?# \) R" d% ]# P) A, e
还有就是两个输入输出函数:
6 t! e0 q% {8 U2 {1 }" \" t/ ]void output_sample(Int32 out_data)
% S9 i M7 G; J7 Y) ^1 ]3 d5 [{
/ t9 ^! w, ^: D# ~' z AIC31_data.uint = out_data;
7 U$ ~7 \3 ?5 x: n3 p& d1 b MCASP1_XBUF5_32BIT = AIC31_data.uint;: B* M5 E9 C" g: S- _/ ?
}. b! p% q* i- x$ ~3 q6 t( r
: J1 h# m; r) U- L" K f2 ^% Z/ WInt32 input_sample(void)
6 A8 f; Y3 S& h- X1 q$ K; W. l) y{ 2 @: A& s1 z; w8 S M/ {- p8 \# H
AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 I$ x* X6 D. H8 ]# \- m. a* C return (AIC31_data.uint);7 S9 Q0 k/ ^, I# p" z" Y
}# |0 e/ T( Y1 O( D
8 ]! F" D6 ~% L& D) x8 B" K3 Z! W. Q |
|