|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( J. C. p8 C) F8 `' S$ \, H( c
main文件:* C% d5 o; m- k- ?: j3 W9 A1 u8 f
interrupt void interrupt4(void)
2 a/ [9 s- R1 i$ o; }$ o{
/ A9 B: ?. O6 _! C" c$ k9 y- I( b- z Uint32 sample;
4 q) p ?4 H" o) U1 H: t* s3 D$ f8 i/ |
sample = input_sample(); // read L + R samples from ADC1 m$ R) C0 G2 o z
output_sample(sample); // write L + R samples to DAC
6 M& y4 ]$ F7 ?; H* ?* d+ P6 k" | return;
- P/ B' y/ \$ N9 w1 w% [" L; f}1 ?# y! T, }0 f4 B6 ~' \
5 x6 s/ n% K# b3 I( D
int main( void ). ]' w! S; q2 h) _; E
{3 u) _% s: t, N/ H4 o" f
5 j& f6 y- @: j
/* Initialize BSL */
) \, e& M! {' _+ g) j( F6 Z EVMC6747_init( );4 `/ `7 y1 O- W! ^3 p4 Y- x6 u
/* Call evmc6747_intr function */
. L1 `6 o$ U A( @9 R3 D aic3106_init( );
4 H/ Z; k3 I% Q. r$ j; t# w while(1);
0 d6 c6 I; C3 l}/ y6 H4 j* i1 d; Y
# a( g: {& G# [1 U2 ~2 ]
( p# [; b0 y Z G3 y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( ?5 [, k' D9 i$ B! E" v3 S
/* Initialize MCASP1 */
: k8 L. Q8 T% b! s6 @ mcasp = &MCASP_MODULE_1;0 g' l( q& [* Y0 L0 ?) \
mcasp->regs->GBLCTL = 0; // Reset
3 @8 F7 C& n# \) u$ l4 [ mcasp->regs->RGBLCTL = 0; // Reset RX+ a& C& X* X6 n; B
mcasp->regs->XGBLCTL = 0; // Reset TX
3 H7 O! M6 i; Z' M% J. T; I+ {% R mcasp->regs->PWRDEMU = 1; // Free-running0 s% i' ^) F e6 V
// configure McASP0 receive registers9 Y8 i2 r8 _( X; D8 G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 T9 y8 V1 B9 Y) y5 \
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( x& z6 t; g* C9 F m9 J
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% s* |/ l+ ~5 V" X' V# J# a mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% @ `8 ^% w. v mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 V5 Q5 w0 d$ g. ^# @( T7 ?
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. K- C4 _/ m8 [& F# Q& D1 [7 m mcasp->regs->RINTCTL = 0x00000000; // Not used& L0 Z" M8 G9 a, ^" F3 F* D z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 a/ A7 V6 m$ ~9 z. c
4 N Z* Q0 d% l& i7 [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used" Y* Y, ~( O" T# D( K
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 D, j9 M* k9 ?3 o/ b5 r) H- j. n
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
N0 ?. K5 M8 M9 E, Y) v( g mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- c/ c8 o0 K) W% L+ x mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 j8 k! H6 G# _+ n/ o5 R! D8 D8 \ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 l3 q" ~8 c0 d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 I9 Q) b' i& s' E2 P7 C A
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( h1 m4 {) K# o5 a: S3 {0 q9 ^: o$ Z+ ~& O! R
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" h' H+ G" O; `8 }1 g1 j
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& V+ ~# K0 i2 ]8 ~& \+ G5 L: f0 [* C8 S
mcasp->regs->PFUNC = 0; // All MCASPs; l2 L8 r8 J1 S
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
M7 D0 H8 Z" o* O/ m7 h- i: i+ X
mcasp->regs->DITCTL = 0x00000000; // Not used
: P; }' L! B: z# z1 \" t mcasp->regs->DLBCTL = 0x00000000; // Not used
# q* R2 I1 c, d7 W# X0 k! W5 [ mcasp->regs->AMUTE = 0x00000000; // Not used
4 t! \* P1 i6 d# ]9 n
& s+ P& p( F, m+ F$ E; l- s4 C/* Starting sections of the McASP*/& n3 T8 j* E1 q! w/ ^" y! a
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( C g% w( k( f# |, O ?4 y$ ^/ v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 B6 R2 {( i3 q) E! h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 T: }2 r7 F1 M! F ]+ n# X2 | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' D% C4 l0 o: v. W% x- W% A; x0 u& S0 u5 l) O7 T: Q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . _* V* b0 C" `" G3 F7 N* C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); ^7 V8 E8 Y% j
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 m( b4 z7 L+ C- L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
h$ {, n$ F+ T8 A, H) q, E+ {( N/ l( f4 y
mcasp->regs->XSTAT = 0x0000ffff;
1 |% w3 S: ?5 q) c5 | W mcasp->regs->RSTAT = 0x0000ffff;
! p; o8 a3 c2 c* f9 a o9 E, H, w0 E8 h V' _4 x
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 y! R/ d7 W1 J" ? ` n+ T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 Z; w8 z/ e, g' _8 [
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . {( q: `0 [, {+ R7 x" N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ v" L4 K5 e# [; l$ ^/ b: m
/ w2 c, F9 P& j4 `# H /* Write a 0, so that no underrun occurs after releasing the state machine */ c$ G8 \& g' `
mcasp->regs->XBUF5 = 0;
% H. l8 E# | `& Z mcasp->regs->RBUF0 = 0;7 u0 m3 i r2 \2 p# j
) U6 j/ B/ W& x8 ?8 z1 F" D mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 W5 g' J, c& |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 P" t3 m0 Q5 S* f mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! [! @9 K" \# g3 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: N; {6 \. U: A
8 }5 F5 W5 `! w+ j" W- o3 u1 s" n5 u4 B
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 t& |2 ?- b. Z3 }9 ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 Z% I% w* ^5 z mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ R+ s% L* l5 b+ K9 k% N& a2 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 }6 Y, [! C6 r& Z- n' }* Y) D' u6 \1 u
CSR = 0x0000;! G3 ~9 C7 F$ v$ V3 o4 k, O- Z
INTC_INTMUX1 = 0x3d;
+ d2 L) i2 R* ]' h7 J: R& Y2 f ISTP = (unsigned int)vectors;0 M5 @. }) u# u' B
ICR = 0xFFF0;
+ N2 g2 V( B1 `4 d- v IER |= 0x12; . S6 f8 t5 B; p0 ]6 D% g) n
CSR |= 0x01;
7 V2 t* j g8 p$ O
1 E+ K+ v* T( \2 A4 b) e% {+ ]7 I! I# a$ q3 G2 |$ B O
! o; A6 y2 \, a1 ?
还有就是两个输入输出函数:
9 [. n, B v, {8 p$ i) B" O2 hvoid output_sample(Int32 out_data)
# H; d; c4 c- f# V2 ~* I" x{8 E' I; S$ O/ f
AIC31_data.uint = out_data; + F8 M& _' E4 ]! D8 G B. Z N
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ ~! ~, [' E% _! O% d
}
, _4 D: T. M+ `/ _6 K7 s
0 v) N" f5 Y, `7 d) N7 kInt32 input_sample(void)
; U& n o% S. I! f4 D{ & D Q4 T5 y% R* W
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' f# g! N0 v7 F' t, M return (AIC31_data.uint);- S2 v. T# F; }# i/ [5 ^
}
( O+ {+ _' K% a ?# m
, {0 ?# q4 z, m, _ |
|