|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, Z3 A! `0 }& p! ]9 Cmain文件:3 l) S- L! |7 u& x
interrupt void interrupt4(void) , \2 d( \9 c# J: I+ ]; b- \
{1 ~ q2 k$ P& E* r8 o4 `+ c
Uint32 sample;5 d6 s! A: O; X D
9 h' G) a& B1 Z2 [0 R8 p# T sample = input_sample(); // read L + R samples from ADC
# w* K: P1 B+ y output_sample(sample); // write L + R samples to DAC - A) W( ?. l0 s# p2 _
return;1 j' S8 b* h$ h/ i$ D
}
% m& Z5 G8 v$ a) K9 T, q6 U; B4 g
2 L9 g8 f4 }6 pint main( void )
7 c' k# r0 H) t' @; Q/ v7 Q{
: u8 {5 p# H1 [' R
# _0 t' _9 j3 I- ~ /* Initialize BSL */
1 N2 C; K1 M% _9 B EVMC6747_init( );
; ^7 \( f% V& }$ Z E, Z H7 G* T /* Call evmc6747_intr function */9 {, W- ^6 {/ W9 b! z) a) i
aic3106_init( );" I8 E6 i+ B" S# _
while(1);
$ u! K# p+ S4 {2 |/ q. E}
% r( N& B: D. f* P' e1 C
! Y- I" f1 y2 w: w; A
4 ?' @. C, ^4 iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 ~2 {3 B2 {3 e& R; K/* Initialize MCASP1 */% a4 n4 D$ p" }3 \! ?/ \' _
mcasp = &MCASP_MODULE_1;
. `2 s ?: _# u% V$ } mcasp->regs->GBLCTL = 0; // Reset
; l8 x9 }9 X. D' V" r: b; h mcasp->regs->RGBLCTL = 0; // Reset RX
3 A9 j' o3 @, F2 U mcasp->regs->XGBLCTL = 0; // Reset TX
! U8 l& Q- r: Q3 P mcasp->regs->PWRDEMU = 1; // Free-running! c) ?+ U1 x% ?# D
// configure McASP0 receive registers4 d! R8 L0 F0 f9 x7 ], s4 t
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. k; b0 i3 M. g+ [7 x
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 C' J {7 `1 r, f) c! ?1 v
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: m, o* k; }& t* m @ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
v/ d, {0 h. ^8 M mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 h7 @5 S9 K2 ?9 t$ `% p$ {7 o
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ n, Y/ `2 {* C0 Q4 Y# d/ c7 b mcasp->regs->RINTCTL = 0x00000000; // Not used; [5 B- Z1 O, O7 U5 ]; y% j
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" O7 K" w4 f6 V& l1 j0 S$ W- a+ u( F Z9 V
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, ?( |. b7 \8 F9 d# Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ ~$ |2 O5 [- s# _
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 j% q& }# u+ I' w& ?1 m mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 f% V, _$ d) l# m5 q, ^8 R
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK! ~5 b- \" q, ?
mcasp->regs->XTDM = 0x00000003; // Slots 0,10 |8 U& e4 _# t$ C W
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, b$ v* ]6 e" S& R" Q% V) } mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 N" Q+ Q4 r7 V, {2 I3 R
: c Q5 D- {6 o2 @! |3 r) C mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN% x5 `# E9 o( V* N1 y
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 l6 G$ h) h! d* |1 ~
mcasp->regs->PFUNC = 0; // All MCASPs
1 s3 z7 V' u. J- M( w# z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; p, S# r. m8 Y- X( P4 T( C3 _! I9 z
! |/ y1 l& m, y! [' H& Q mcasp->regs->DITCTL = 0x00000000; // Not used2 O- z; B+ E1 {; F* r* y! a- e, [
mcasp->regs->DLBCTL = 0x00000000; // Not used* J! ]$ k* U# B2 a9 x2 m) r7 X( X
mcasp->regs->AMUTE = 0x00000000; // Not used
8 ^7 j A8 }( r* h! \+ z4 E/ R1 L9 K8 `: b" ], z! M) o
/* Starting sections of the McASP*/
) x, q- K7 u2 i! f2 [& V3 j mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; l& q M q3 q( g: b( s9 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ g- N l9 `7 [+ ]! Z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ I5 S) q7 u" ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# S8 m0 r& e4 n- n' v' |, w k, {# n8 g5 \% k1 s4 u: H
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' [0 n; H) d! o% Q* [8 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 Z) q! _9 ~* G7 O$ r8 W, z5 @$ {- D7 s
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ {% r5 X' y' ]/ Y# K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% x+ O9 T( j0 Q$ U
7 W; L. {7 t. Q# r3 n# ~* d, m. s* _$ L# G mcasp->regs->XSTAT = 0x0000ffff;
8 f% s! v( t$ ~/ K mcasp->regs->RSTAT = 0x0000ffff;
' M/ r9 ^5 U# D! Z
# `" u) E! G: \ U+ x& ?, f1 ] mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 b$ |) {2 K; ~0 O) h9 P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ Z, d6 X! j3 _2 H* V: W/ a1 q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - p" @, n* `6 d! v: E% O8 w* q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 ]" ?1 [+ H' g: u5 }3 y$ e/ W( e* T. \/ t
/* Write a 0, so that no underrun occurs after releasing the state machine */3 r1 e' p% w+ @
mcasp->regs->XBUF5 = 0;
+ A$ j2 n3 D# t mcasp->regs->RBUF0 = 0;& s$ A1 X7 P w9 I& Z
4 {, y5 \( q: k l9 ?' K7 p; B0 T mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. a0 T; q* _, e" d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 k! I$ ]/ O$ ]% J k8 t7 k7 K0 T mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 p6 j" R: w2 E3 t, R) N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& m( H& N# g2 [. ~# f& m
) c6 u5 ~: R8 ^" A/ c/ F, [9 b
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 g9 M) w; |- b$ @& ^ {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! R/ c) J; l7 i# O( ] mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * f$ q6 o. ~' S& Q2 m2 m$ f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 e ~. |- G, r/ q$ b0 p+ @$ C8 ?
- ?* C! Z n% C CSR = 0x0000;
. B$ U9 O2 l4 e3 X6 x- b& g8 q, p j& S8 M INTC_INTMUX1 = 0x3d;: w2 c1 T% A7 `7 k3 |9 S9 {
ISTP = (unsigned int)vectors;
h9 N0 p/ C% T h ICR = 0xFFF0; 0 {) a7 `& F i3 p7 s7 r( H
IER |= 0x12;
6 R2 Z7 k; T: B! m: d CSR |= 0x01; 3 Z! j& I6 Z5 u
5 p* u3 O3 u5 m5 k7 x8 x7 g" }- [
. L4 }- N. ?! k( n" |还有就是两个输入输出函数:( r l' N2 C9 p3 {& O
void output_sample(Int32 out_data)
0 D0 Z1 l) n; i% s0 y0 @9 J( N{
% @' H7 p, P" L) n E: i AIC31_data.uint = out_data;
# f. \( a/ f; Q7 Z1 a MCASP1_XBUF5_32BIT = AIC31_data.uint;8 u. r3 ^* j) U, f u
}0 N8 V' J6 D* \. S' ]8 r
: s0 T7 E# j1 B. n9 o. s2 wInt32 input_sample(void), _4 S& a$ W) A1 A7 X
{
7 U2 U7 v; U( m f AIC31_data.uint = MCASP1_RBUF0_32BIT;
) C0 x7 _0 X7 S A$ I' l return (AIC31_data.uint);8 R2 B0 X+ a3 ~$ `7 W* D+ s
}# L \: L; t- Q- c1 k! T
3 U l; ]/ Q$ I% Y
|
|