|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' z& L7 q# [1 q& A& ~& [0 @) Q
main文件:
3 F5 i5 x! k4 W# A0 y. _9 Rinterrupt void interrupt4(void) 3 k. t# i5 Z5 H
{ i" ? A" ^% Y( J( S
Uint32 sample;
6 a: Q+ L. g4 v( d, u) s4 \, q. J( U" `5 e
sample = input_sample(); // read L + R samples from ADC
/ h: E Q" d) \ \3 t output_sample(sample); // write L + R samples to DAC
8 b' Z/ p$ b% {* g6 _, x, s return;+ `1 p" c/ k% k6 R
}
& K0 G0 O9 D2 \9 O( N( [( } Q( ^5 ~
int main( void )& K- C/ A; d: T0 A* @. l- H! K( K
{
, i; a# f' I- y) o. ]; J: ^$ }
2 b& {5 [: \% h0 @2 ]( W! V' C /* Initialize BSL */
4 a1 r6 N. Z/ E7 }! D$ t EVMC6747_init( );2 y: V# a9 B& l. Y2 W! e
/* Call evmc6747_intr function */
) O& \) l& x; }' j5 ~- A0 @ aic3106_init( );2 J1 P/ l5 m, U
while(1);6 n8 ?/ J: ^5 G# I: k. }$ I$ U
}$ ? b2 W% n8 H' n; D* u
$ N& Q) L, g q
! ^, s8 h0 M+ {& Faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! X' R" l8 d- \5 v/* Initialize MCASP1 */. E9 U8 E; c, t, W+ f
mcasp = &MCASP_MODULE_1;
8 B5 ]2 U' _5 o* t$ P8 J7 @- A D mcasp->regs->GBLCTL = 0; // Reset
8 u& T. e5 y+ N* ?! N mcasp->regs->RGBLCTL = 0; // Reset RX
' ?5 j' `( ^9 ~& u& d. m, z mcasp->regs->XGBLCTL = 0; // Reset TX
+ y( s, x/ U- R8 A, } mcasp->regs->PWRDEMU = 1; // Free-running
* ^: v/ C) R- H& R // configure McASP0 receive registers. W. J& C% R6 Z$ f) R
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 |# s/ b) P; W6 e9 k. E
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 C' F% H5 |$ M mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. p z6 |& p" w4 H/ _9 _' \ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* @7 o! S$ F4 X8 t+ A- ] mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
' I) e) t8 c. I& { ~# s- M: U7 u mcasp->regs->RTDM = 0x00000003; // Slots 0,1
( I% l; U9 J4 m mcasp->regs->RINTCTL = 0x00000000; // Not used" Q4 L$ t2 r8 J4 N2 k( m, I
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' Z5 {8 j/ D( J6 l( n/ K; }
$ f( h- K& i3 g% q9 q% N1 b' R mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
1 N N3 g- `1 k. E! X2 \5 E mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
f6 @7 O; |$ c/ c& l" H) V) R( e mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) K$ y) E* r+ h5 l& x2 H; n mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ ~3 o5 W* g8 V( _# a. R9 `$ J( K mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' \$ Q3 _5 I9 P4 O9 ?) z2 o mcasp->regs->XTDM = 0x00000003; // Slots 0,1
! p. E) O/ ]6 m6 ~! I mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
' k6 N$ Y5 Y2 W7 @& j mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 T5 k; ^- M9 n; }7 R' c
/ T9 F4 `& v9 m H
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# G) u- \. U5 C" |& w) E6 t/ m+ n
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- q$ A7 \) ^+ E7 J7 i5 A& ?/ O
mcasp->regs->PFUNC = 0; // All MCASPs
( f+ v% l5 T/ t$ L. ?' N3 ^/ d mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. x1 p2 p' I3 W4 F: h
3 I8 I4 E& _/ x4 L' l, n
mcasp->regs->DITCTL = 0x00000000; // Not used3 O* r8 X. u2 N; N5 a
mcasp->regs->DLBCTL = 0x00000000; // Not used9 `1 g9 ?+ M: i# ~, z9 k# n
mcasp->regs->AMUTE = 0x00000000; // Not used: K, B2 y ] E2 ]: h1 D9 J
7 x, u# v& O* ^ Z# f: s/* Starting sections of the McASP*/) ~% |& ~3 p B( X. |
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 A. P; F P: s3 l/ W; ^/ a* i# R1 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ j' p# Q2 }% U" y, L5 u
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 U* b- p" D1 G! b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* A7 o, i: m$ g8 Q: i9 e) d' J2 I; h
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 P8 m* E1 c5 n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' E% J( C* g/ o: ] a
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; [( ?8 Y- b6 F: P3 b) y2 T1 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 T7 \9 C. V! q) o
' o: z/ h8 I6 R% p mcasp->regs->XSTAT = 0x0000ffff; # o% ?! I. Y1 I) y
mcasp->regs->RSTAT = 0x0000ffff;
- z9 h4 ]* @. a) Y! c) |; t- T: d* ?1 s! `2 p5 F
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# j& k2 s8 I2 J; V. E' x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 B3 R. }: K" ]* g5 Y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) p; O+ Y: k/ _2 x0 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) u b. L# ?/ h, r0 x! p4 @4 A, g( Z! s) e7 p
/* Write a 0, so that no underrun occurs after releasing the state machine */+ e- A+ a- M! N# _; u
mcasp->regs->XBUF5 = 0;
5 T% M9 u( b5 `" W mcasp->regs->RBUF0 = 0;
' ?; F# [, N. K3 c# [
! C% G! [( B$ y k5 j q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* y6 C7 P+ [0 H# d' b- I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 H! p9 b4 m# F- L
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 P, I; ^ c# Y0 s* i5 W0 I4 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( e! H5 q& a3 r; A/ F+ X0 k
: f/ Z% o1 Y0 S+ L O- A/ L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' I- }% F' y; }) {( n- H4 q( B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 t% l: i/ @& \ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 L" h4 h: W- [& B/ Z8 C* ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- J$ k5 @# _8 T5 M( q5 d* D
, q( z) L0 S6 e B CSR = 0x0000;
, B' G: V& ]/ ?, T T$ e INTC_INTMUX1 = 0x3d;
2 U. v4 d6 W7 P2 z& m, K1 H0 j I ISTP = (unsigned int)vectors;& ]8 |3 c9 Q: _& ?* {
ICR = 0xFFF0;
5 r! `! p# m( ~7 l6 O% o IER |= 0x12; ( K' I9 ^2 e6 {+ G8 e( M P
CSR |= 0x01; 8 l! ]% X, U: d L
+ e1 J% r! R/ T o7 w1 u" A$ }7 m/ N
+ }- J" s/ F, C! [, ^" x7 y/ w6 Q* E, m; I8 }* Y, X; z8 r2 N
还有就是两个输入输出函数: P2 w* V- ?5 o/ d, U
void output_sample(Int32 out_data)) y4 F$ C, a8 j5 @9 O4 G( V
{/ j% t e" l% h0 h' @* k& g; s1 W
AIC31_data.uint = out_data;
3 w7 @# P3 z1 W+ d MCASP1_XBUF5_32BIT = AIC31_data.uint;9 ?; v4 H7 i, C( A) s( @
}( W) x' l- v4 v- X
3 f/ O5 h: N- m( [8 QInt32 input_sample(void); Y) }6 O" M5 q
{
m: J- _" X) K! D AIC31_data.uint = MCASP1_RBUF0_32BIT;
: F9 r! F, Z4 u return (AIC31_data.uint);! J2 L; Z0 b2 R5 [! R
}
) H8 M5 r2 Z8 S3 s0 ~" M8 K' l1 J# M3 {2 p2 S$ H h
|
|