|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 b5 j( o6 B" B$ `: Y/ z
main文件:
- n8 z' w. \; ^7 Y. D0 f5 U% Sinterrupt void interrupt4(void) ! c9 C) |& s. `) b3 u
{- P0 a; o2 S! b) {# z, t+ U
Uint32 sample;
9 h4 U# R: i: M+ [4 I, v6 m! {- V+ {4 X. M
sample = input_sample(); // read L + R samples from ADC
9 s) A( g2 o. _8 A/ @( t6 f3 r d output_sample(sample); // write L + R samples to DAC / q# V. |3 o5 [
return;/ j4 R7 \) L) t4 Z
}- E6 W" G5 e e$ i+ Q* `0 ?
8 ?7 P Y5 D7 W5 B r2 d/ ?
int main( void )
% d6 Y, l0 n; _7 Z p{
- C. V- A2 I4 i' L+ R7 P3 @9 r( q: P n/ U2 G' r# B
/* Initialize BSL */8 n. A( r% V& U7 G+ a
EVMC6747_init( );
- T: }( @$ N O& \, B/ Z) l! w /* Call evmc6747_intr function */* J; f# c% r& T8 |
aic3106_init( );
; ^' T0 u7 Y7 g @ while(1);
5 b& x9 S. a6 d; v5 J( |8 B}
# @8 t& t0 k2 T* t- ~4 f" d. |8 [7 L t7 D0 j7 V+ k9 g- x
4 ^3 x% W! Q! s* q7 Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 W* K2 Q, v: m! [1 g/* Initialize MCASP1 */
7 a) v3 {% k4 d: n f/ V mcasp = &MCASP_MODULE_1;
# j" c+ C. T% n- f' y9 ^: D mcasp->regs->GBLCTL = 0; // Reset
+ d6 g+ e% V* P! ~0 O9 O5 U mcasp->regs->RGBLCTL = 0; // Reset RX& I' W# E% J( \8 \. E
mcasp->regs->XGBLCTL = 0; // Reset TX
+ U# k8 ?. _! }6 }8 h P0 W' c# ?' B mcasp->regs->PWRDEMU = 1; // Free-running
. t; y+ P0 {5 z; q // configure McASP0 receive registers
' t$ _3 T# x4 l% ?$ z4 e' H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
2 e! F3 C; b3 k2 L2 t9 k7 m/ K mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
Y3 f+ r) j, Y' p mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) r. H4 s a& I* K D8 | x
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ V. P: U' J+ y* o+ }. o4 w8 J mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( d+ n$ I" s B
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ V# U [$ Y# x& J5 n7 A
mcasp->regs->RINTCTL = 0x00000000; // Not used2 l5 x9 {' J% q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* L3 ]+ c' O$ T' h/ a
6 s/ y7 l. F& D8 T, s/ a E/ Q3 Z3 D) Q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 k f1 D$ z" e: _' w- `, g
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 ^" w4 X2 W* A$ _4 d+ b) e
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' p' P* i0 n$ v+ ^! ~ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; K C+ D, F( u1 z) r6 h4 N" Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 O: y) u# t- ` mcasp->regs->XTDM = 0x00000003; // Slots 0,1: I) P. |4 E" w
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, V4 c, X" N: } mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% s, n. K0 |- p8 h, [* [5 r* n% |9 _2 C- W; W4 i
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" j1 [( G; w& J7 a: [4 f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* W- S7 E! c$ O, J mcasp->regs->PFUNC = 0; // All MCASPs o( z* w( @+ n$ ^3 ]. o; l p
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: L/ H4 }& [* e5 x% A
6 y; q* e4 j0 a mcasp->regs->DITCTL = 0x00000000; // Not used
1 ]5 f4 M8 h7 j3 s5 E' v* }4 @ mcasp->regs->DLBCTL = 0x00000000; // Not used
, h3 w% T1 g. [ mcasp->regs->AMUTE = 0x00000000; // Not used
, X! U' j' x% D+ k
. ]3 n* z0 S! {/ F( S8 I$ w/* Starting sections of the McASP*/
" E, L8 U/ _9 ?& h0 j; i8 ^ m mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ b7 U5 j; L5 |8 t: y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
' x3 a% ]2 W8 m2 C) \0 A mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* A* V+ | c- \2 }! F* K. U; h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: g) E$ h. D2 ~! }) F* r p" _
7 I. C0 Y) e( w8 c/ I mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 ]- d9 [2 j1 B* F& c P7 s) I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ P8 `+ O& R/ T! i" c: f
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; j- P! B) S8 S0 X% b# N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 ]% l7 B& Q- n' w$ \
1 R! {- c5 v2 \$ l3 u# h! Y mcasp->regs->XSTAT = 0x0000ffff; 1 ?& C7 j+ | a) X% Z- P# Z( I: z
mcasp->regs->RSTAT = 0x0000ffff; ! }5 o( u+ O3 I
+ d) x2 S% Y4 S0 P' H
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 r* ^8 f0 s2 G1 x. O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ z7 b5 u& R% P9 H/ U6 |- b mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 A3 O5 K' N" x0 { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( `' ~" }0 I& L; w6 v2 a' N9 `/ r& I' P5 [4 G
/* Write a 0, so that no underrun occurs after releasing the state machine *// L* N3 O: z( p7 i
mcasp->regs->XBUF5 = 0;$ k! R% `1 } j- L, Y
mcasp->regs->RBUF0 = 0;. X- Q8 H6 e6 O. d H9 N8 z
; K; }( M6 a1 _6 i8 ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 {7 C) R8 d6 m C; h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! S+ i7 q" V1 u mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 F7 w; U3 N1 b6 T& B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ }. S# V8 L. E( D) q2 I, @
; j* [0 x. }0 U6 b3 J% U+ i mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 D* a* [8 X/ u6 c9 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 q$ ?5 ]& v P6 o* i L
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
x6 [% k* \6 d6 P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& v1 v4 H- b8 N/ ]% [6 j1 \ m" Z6 ?# {1 m
CSR = 0x0000;
0 w+ S* I8 T& m5 l# N! Y INTC_INTMUX1 = 0x3d;
% @1 |' i% {7 R, y R3 I; E, S ISTP = (unsigned int)vectors; F9 u, C' N& E+ R
ICR = 0xFFF0; " p7 Q" X& q) B+ m: F
IER |= 0x12;
0 R4 L) m* M. _; w0 ? CSR |= 0x01;
4 @5 c. v/ n/ j0 N: q1 h/ K! t5 p. c! g' k, D, J2 `% _; x
2 r) {- Y# g! w+ h. |4 n1 i
% b& y+ v! |% v9 _* I/ a$ @: i还有就是两个输入输出函数:
* o* V* S* Q; y$ Vvoid output_sample(Int32 out_data)
% K9 Q7 p& N8 F/ _{* p. O$ p" ]( G$ ]2 k' x! I4 J
AIC31_data.uint = out_data;
$ K5 |7 [- @- P9 ]$ b( Y, \ MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ k( N5 [% i6 ~* n7 y, H}+ m8 A& v- B' g6 w
1 B* N) C6 V- z! AInt32 input_sample(void)
4 @: `1 M: B+ h; N8 _{ , X; v6 M8 M& B: j" L$ }' x4 A' X7 V
AIC31_data.uint = MCASP1_RBUF0_32BIT;. d. U) U* q0 {5 J, c4 p: T9 ~. B
return (AIC31_data.uint);7 \$ D5 k `/ P% |/ K
}( u9 c& b( K5 N/ h, C
8 X) A L# g+ K. u |
|