|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ s, y/ e# ^( Bmain文件:% ~; b( x+ b& p2 a7 ]6 w
interrupt void interrupt4(void)
; p/ v: C0 S; J3 J; ^. D7 n _{
+ C4 O! {- F+ V. M4 f+ f Uint32 sample;$ S: F$ w/ }! Q3 u( A
2 n# l( w+ ?1 h9 E9 {
sample = input_sample(); // read L + R samples from ADC
) y2 g9 b# G& | output_sample(sample); // write L + R samples to DAC $ r1 T/ ~6 Q" h
return;8 ?1 W9 R4 z- R7 v
}$ |, X1 ~* F7 b! i
, @: m% e+ Q# a3 Z& c1 G/ [
int main( void )
1 C3 u. r' R4 s' Y{
* n) @5 y: N! t- p6 k/ }. e
& ?3 k ~% N" {2 Q( | /* Initialize BSL */
' N: ?3 i6 U$ [- A# X2 ` EVMC6747_init( );; K' Q/ C3 i1 M9 \
/* Call evmc6747_intr function *// V8 P4 g# k' Z
aic3106_init( );. [% a7 `# S6 X+ k9 W* D# u6 F
while(1);
+ P1 f! x+ j j) Y}
; }& T5 h2 s+ F6 M, \9 u) P4 I. n* x5 {1 J
/ k3 s6 V+ A1 x6 }& q+ Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 {3 N, u( I+ I* H e8 f
/* Initialize MCASP1 */
$ _+ D# j1 A4 q/ ]& \9 t3 w Y& K mcasp = &MCASP_MODULE_1;
% t# R1 K! X; Y4 r mcasp->regs->GBLCTL = 0; // Reset# o' |7 Y6 b' j4 G% I
mcasp->regs->RGBLCTL = 0; // Reset RX
* I* `/ G/ s- ?! j7 J mcasp->regs->XGBLCTL = 0; // Reset TX
' c9 A* I0 Q) F3 s2 w$ ~ mcasp->regs->PWRDEMU = 1; // Free-running: ]! w3 _# W( W3 o: d: y' P
// configure McASP0 receive registers" i4 W( Q9 z7 [6 j0 [$ c
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, z$ O7 ~2 e; Q/ Q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 y1 z' T6 ?# v4 ]* d
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 `( V7 t) P5 e9 \- X6 M* a
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ i5 S) S& {9 D. Q* G% t mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
& g6 _" a4 \ T, d2 j; b- e mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 Q/ g6 ~1 |% q6 s: n mcasp->regs->RINTCTL = 0x00000000; // Not used# N" W+ o0 h8 C' ]; \& d6 w
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& E4 l8 v9 X1 p. ]: s
5 i4 u2 u/ |/ J0 h! h# y$ J" O- w mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 ^+ r' _' n: @& d7 O. L2 f+ B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ E2 |3 q/ |8 V5 A) Q- L- [9 s$ U/ Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, ~' I9 I" e0 Q7 L. E8 z V# D0 J mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 D6 p0 S1 }2 V mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* [5 L$ U+ c8 d6 l" X0 e3 [ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* i4 [( c& a# n" C/ C mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! Z2 C0 F. J6 i& @ _ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 S* d5 ?, z; [' L
# D" i8 ]4 L# S% x. i; x
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ U# @! j) W' T1 j2 A
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 w# Z% `+ P1 W4 \6 ~2 W) a3 R3 q
mcasp->regs->PFUNC = 0; // All MCASPs- G. P4 n2 v0 J% n% Z
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ D7 G! Y/ d9 R5 y! `
# w5 N1 x; m' N& Z; Z+ a5 C! n mcasp->regs->DITCTL = 0x00000000; // Not used
1 A8 A7 w# w! [1 b; [- q0 i9 x mcasp->regs->DLBCTL = 0x00000000; // Not used
. Z! A. x" ]- o; D W$ m' o mcasp->regs->AMUTE = 0x00000000; // Not used5 D2 t5 Y) e P% {% z/ O
' O$ ^ @5 N( S, u& C2 O7 e
/* Starting sections of the McASP*/* F5 [$ y8 I/ s7 P
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; B* K8 T7 D/ q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); - K. `/ a2 ]4 Y" b
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! z6 C9 \# {: O) p9 n8 o( \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( ?5 a4 L4 U; C1 K# d9 y
/ K0 v: \4 [4 Y! c! J) x mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : m* C$ _7 O- _! h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 P2 s2 p0 h7 s* {0 c' k5 o mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % t, N: o1 Q. ]6 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 m7 C. t! ?/ ^
# G( Z9 x! E3 H/ }7 G mcasp->regs->XSTAT = 0x0000ffff;
7 V# R" O5 ]9 }& u) l" p+ P3 e mcasp->regs->RSTAT = 0x0000ffff; ; S* e$ L2 |9 w: x/ N& B4 R# A- e* z
% [3 D3 e% k9 ^% E) V2 G
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' M. ~8 c: u) t9 G0 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 b0 w) n7 x, }+ y6 D mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ `: Q+ d: w5 h/ Z% v8 ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( ~; N8 {# t: n* I! i0 [ ^1 d# a6 ]# O: f* F# N7 l0 g e
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 b% R- _3 W0 m/ I mcasp->regs->XBUF5 = 0;
( K/ V' U& d/ j mcasp->regs->RBUF0 = 0;
Y/ d- t6 F# C- H* l& S3 d2 L3 v; |# [
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# {4 p6 M3 y% r! }' Y" k% e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 n4 Y* k* l+ \+ I2 q: X
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* c/ l5 Z' M& a# H, @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! `+ ^7 k4 ?* t; ]1 m" i' f
, b% P0 ^6 w' e5 R/ X6 Z; D
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( X) j+ ~3 p8 N- x3 N, q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" C- u/ n Z4 j0 p* ~5 W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 K- c! M2 K' l- u% U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' j7 n& d2 E1 M/ ^6 u
4 O/ _' H" `6 @; G. B3 ]+ W1 V
CSR = 0x0000;
& i" Z) p) d% M$ y8 ~( ~3 k INTC_INTMUX1 = 0x3d;4 n. T& G- k# I8 d0 G! F) b/ G
ISTP = (unsigned int)vectors;& a6 D& l$ r# b9 n9 R) H1 ~
ICR = 0xFFF0; # }& r+ y' I9 H4 e' L" J. K# @
IER |= 0x12; 5 \- B; |' H4 X6 Q2 }: P4 |
CSR |= 0x01;
; z- R/ F8 A6 |8 S3 N% a+ ~2 W6 }( Z/ Z2 r$ h7 ]3 m0 |! ]
- |) w# a3 w1 r7 L; Z
6 t& ^) R, a ?; U' ^" f还有就是两个输入输出函数:# \2 Z; u, m" I$ \
void output_sample(Int32 out_data)) I( ^# {- ^9 H! d
{2 \7 Q7 S/ h- X5 g( ?0 j+ w- \
AIC31_data.uint = out_data; ; i$ T/ P5 c' h) r/ t8 T0 n
MCASP1_XBUF5_32BIT = AIC31_data.uint;' G' O7 |+ k% M
}
8 S! z8 C( M$ q
9 S- S8 k8 }1 Z0 C$ g5 y! K3 c' kInt32 input_sample(void)
, X, Y0 ~% B6 K+ z" ?: i+ }4 P) _{ , L$ `7 X4 c5 u4 l
AIC31_data.uint = MCASP1_RBUF0_32BIT;: I: {( Q5 Z! a+ N
return (AIC31_data.uint);
, T+ v, c% \) {1 ~. W}
: v2 a- Y9 D/ z* |
3 |4 Z1 c- p1 _+ h$ }# | |
|