|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 [7 H( ~! J* }
main文件:
. q0 k1 N. q5 }, d, J# Ninterrupt void interrupt4(void)
o v7 I: x. w% P/ H{
4 {9 l, q( r1 l5 w; H Uint32 sample;
) }# P7 c) N/ [: k/ Q$ J2 E" w
7 H* J* ~! }' M& D& ~! n7 h sample = input_sample(); // read L + R samples from ADC: _1 D4 _9 u- z' }( T
output_sample(sample); // write L + R samples to DAC
3 S% v+ P( M/ X T6 X5 Z return;' b2 r4 S* Q5 X$ I# q
}! }8 q& c( J* p! Y, [9 V
+ c: e4 d K6 Q3 x5 h: y) x6 b
int main( void )( Y) z7 f1 w1 p1 v T" j
{/ ?8 K6 B6 [5 T% h
# _% w8 G8 ?. h) I$ v' a, ] /* Initialize BSL */4 R# z8 m3 C$ W) a9 M5 @9 O
EVMC6747_init( );
9 e" G: [* s( u1 m# |% A /* Call evmc6747_intr function */
- c2 B" W8 E3 G& X1 f+ K aic3106_init( );
* f; q2 r y8 P" J3 b8 t while(1);
3 T- x1 x( n! S6 ?: U$ \, L& v' X}
! z) A* g4 @8 b( l) d3 A
# V3 ?. `/ y3 W/ s& l5 |
; F7 t" Y* {& N' d- t% Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ k/ l) e4 l$ B2 w; m5 Q
/* Initialize MCASP1 */
6 ~9 u/ }; ~! e; h) E, z mcasp = &MCASP_MODULE_1;
9 X! C7 H4 U( w mcasp->regs->GBLCTL = 0; // Reset
7 u3 {' h% C1 A" {+ H3 s mcasp->regs->RGBLCTL = 0; // Reset RX
* S: w& \% s$ e/ ^; m mcasp->regs->XGBLCTL = 0; // Reset TX6 X$ S9 j* Z5 s
mcasp->regs->PWRDEMU = 1; // Free-running
% w' S3 g% G3 m: O$ W // configure McASP0 receive registers, m7 s6 q7 I: {$ G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' Z! @, o- L# b& y5 Q1 U8 @
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 U6 H+ }1 p4 n4 z( h
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word H% j0 p$ k. C! V- z! @" } t
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 j4 |& f+ `- \# `& K mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
: V6 C$ @: Z" s/ w& ` j mcasp->regs->RTDM = 0x00000003; // Slots 0,11 s. i7 X3 z" o c
mcasp->regs->RINTCTL = 0x00000000; // Not used/ ?9 |, K6 n7 V
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" P+ F/ J- [! p3 f P& {( V2 N: \( I+ d. t; X; L7 C
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 X* \' G6 G! V$ S7 H) @5 ]+ M5 x mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# `- s5 l( I) a+ \4 P
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! r' n) A% F# [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- f E }. ?. u
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" K+ d* ^% O( `9 S* Z- j7 I
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
n4 Z z( m. [8 k/ Z! F' H mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 G5 C2 T b' r' k, Y5 G) B mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 N& i Q6 p4 G* k" U2 r ?( ?+ P
* [8 H& o" C* h, A3 T9 g" U$ x i mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
& g3 J3 M9 z. d# d/ O mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 |% P2 G' A5 r7 G: R1 ~
mcasp->regs->PFUNC = 0; // All MCASPs
- ^8 J& s( s' i7 T1 q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 {7 e3 W( @6 R5 l$ \+ C2 [' f# f5 y' v+ a2 T
mcasp->regs->DITCTL = 0x00000000; // Not used7 `3 ]/ l& U, r# [* y
mcasp->regs->DLBCTL = 0x00000000; // Not used
: W# ]" ]) s4 n4 Z. y; A4 O) x mcasp->regs->AMUTE = 0x00000000; // Not used# ~2 Y. c n5 u; W
- H/ _* @- N8 ~# z/* Starting sections of the McASP*/
- z7 [$ a+ T9 a0 M1 n mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / ]3 t; G' n9 G" N0 o# B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; p6 k( w. P( p+ k; a( r8 a
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: I+ ~/ a7 B" {' j6 ?* s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; n. Y* E# }. p# X5 ?, H% o* B" x) j5 L$ } \6 s3 R
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 B7 ?2 H0 P1 S7 d5 h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 ~# R) j x- X
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # L, W, o; I" B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 Q! L. a& D1 o& b( V
( S2 a% P. ^: J, i+ C mcasp->regs->XSTAT = 0x0000ffff; ) g- f8 [3 U! }$ D, s
mcasp->regs->RSTAT = 0x0000ffff; , R5 b& s. L ^! p; P
+ E/ o: B6 S, r4 Y/ E. `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. {' }/ q, m# K( M: q( P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 {* e2 S" Y% v l/ n2 I2 M mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 D) f) ]% F2 ]7 ?/ w' p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; N. N# ]: F: z0 d
: h$ b3 I) r0 y; A/ `. J. k; _: [ /* Write a 0, so that no underrun occurs after releasing the state machine */7 A2 K% q% J4 V8 _! H# j/ S6 d
mcasp->regs->XBUF5 = 0;$ `. u* }3 B) E5 K" ~: J
mcasp->regs->RBUF0 = 0;0 @; Y; d3 T# I
; B/ F9 d5 ~" ^1 f* E
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * f0 L8 s `. y$ k2 I7 d. r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 t. b c" r) ?; d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & D+ [8 M9 ~3 U8 [3 \! A- V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ e( F3 x# r: @: @
: H, E R3 C2 n& c, X" v8 V
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* I( k5 n! H" C8 ~# q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ ?# H( z2 _, o6 ]5 A
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 E1 o- ]0 j. E, q$ k N/ K7 o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' G# p/ K |# q0 z6 G' M$ A& J# n* s6 L* Z. [- M: o' }
CSR = 0x0000;
, C: M: b2 a- ^+ g$ B INTC_INTMUX1 = 0x3d;/ j9 W- z P* }9 G
ISTP = (unsigned int)vectors;
' h; E7 h4 t+ ]$ t ICR = 0xFFF0;
( N! |8 Z8 P+ W( @. H IER |= 0x12; 4 o" u9 d) F- {
CSR |= 0x01; . S! F1 i. e1 i! t5 S
% B# p+ T: L% R3 p( ]5 N" }4 e. z/ c# Z7 c. \" K8 _8 U, Y. }3 L. K
; s; @. F; r5 z0 _- y
还有就是两个输入输出函数:
. m3 p& Z4 J+ _void output_sample(Int32 out_data)1 `- U" r5 b. b0 V3 P9 ]9 o
{
$ }( ]/ D: A0 C9 c AIC31_data.uint = out_data; % ]- G7 `% H" n O
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ u+ O+ r) u' `7 `/ Y- W
}
9 R# j8 o l3 q# q9 Z6 I4 ~% a; G! s" A- |( F1 v# {
Int32 input_sample(void)' q4 x k, `- G: w
{
1 y% y1 Y# r# e% ]) Y- }" X* X AIC31_data.uint = MCASP1_RBUF0_32BIT;% r4 X' H! N7 K z
return (AIC31_data.uint);
0 _0 T: ]! K0 [ U: ? @3 w}
/ t% c" z# [0 b7 H; m: R {4 z9 I" D1 K1 ^7 o+ f6 d& S9 |& J
|
|