|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 ~! D! D( M4 D7 i4 rmain文件:. ?4 s5 R) N* z F' z7 K& V
interrupt void interrupt4(void)
6 ?$ N5 X/ j% }2 R0 s& F' B{6 U3 H" R, S* C! \
Uint32 sample;
% p' s: t$ o0 L' d4 t8 K: g A7 U; A, |8 }4 W; B5 _/ {
sample = input_sample(); // read L + R samples from ADC- e1 ]* E3 c$ {5 X
output_sample(sample); // write L + R samples to DAC 0 v( G9 e9 k' {( W8 J* M% M) `
return;5 a( K6 S' a5 B7 T1 N" a
}: G3 u- \6 I+ x3 d; B- E' M6 j
! a, z. C( H3 V. d+ `/ M
int main( void )
- c W$ w, ]- u* a- ]) @{1 |. P6 ^' X$ c8 B! Y. |
4 c4 x$ v- x' l1 c- ?* k) C d
/* Initialize BSL */: U/ ?2 s4 P) Z# ~4 v& G" z% u5 r3 Q
EVMC6747_init( );! E, ?2 o$ Y& [
/* Call evmc6747_intr function */3 t* a7 t* X% j1 z0 v* W5 W! @
aic3106_init( );
, t) K( w1 N! x$ s8 W8 G while(1);: I# t0 z, i. |
}! p/ L! p: t; j; p) A
5 J1 o+ y' m* J c6 T$ f6 _# ^7 |$ n* V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( l: ?4 Q8 m$ z4 x; r8 S& W$ k. a+ }- W/* Initialize MCASP1 */
- G0 o5 D9 @ U, e8 x6 _! z' _, h' o- Z mcasp = &MCASP_MODULE_1;& ?- m# Z9 n: h
mcasp->regs->GBLCTL = 0; // Reset
7 c' v. z8 M+ O6 y7 t% M mcasp->regs->RGBLCTL = 0; // Reset RX
8 R1 O% g& `4 k) Z; A% J5 x mcasp->regs->XGBLCTL = 0; // Reset TX
* i6 Z5 e! z' Z( W9 d: D( T9 Y# ` mcasp->regs->PWRDEMU = 1; // Free-running. ~. W, l$ Q# J* k5 `
// configure McASP0 receive registers
t h6 Y) z! M9 b) @ f1 E6 n mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% b+ q7 i2 {+ o! m* l mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- ?' g3 l2 S' C3 o7 g' x mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& W6 l2 N1 E7 C4 T6 t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 S4 K2 X- l$ E7 T) W# v+ Y! e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 ~; A" \( o1 E
mcasp->regs->RTDM = 0x00000003; // Slots 0,14 j& d0 h8 V- {. B- I" P
mcasp->regs->RINTCTL = 0x00000000; // Not used
' D7 m7 g+ D# W! T9 T8 R5 y mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 r+ V% L& p+ A0 r; \4 c6 W* F( W
& R# N2 @" L( G& @ V
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 X& H; M1 s% N0 H9 P mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" ~& z8 s4 d' C+ o* m mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 {# r$ y0 c. j4 B1 _0 `. {) R' Q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 j9 z% P0 a) t F% b mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
. H2 W7 \" u7 J) B, g; d mcasp->regs->XTDM = 0x00000003; // Slots 0,1
- d( b) J$ f: B p4 u mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; [: E" {8 U% n" l' a mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- T8 \% o& {! A' H6 c9 |0 O) [1 ^2 _ `$ `* a j! e
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 ~9 J6 A. g4 z$ A/ q, u* E
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 l- d3 ~' W# Q mcasp->regs->PFUNC = 0; // All MCASPs- o: L J# a; ]" u9 r- S, u1 R- U" h0 ~
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: F5 k" ?* {/ q7 M/ f
2 l8 t, B$ N; V; ?/ o9 Y: y. C
mcasp->regs->DITCTL = 0x00000000; // Not used' i) {, i( X" [8 F' N
mcasp->regs->DLBCTL = 0x00000000; // Not used
' ?$ z1 J% u: s2 u mcasp->regs->AMUTE = 0x00000000; // Not used
% a+ `% O3 ?' h) W( H( o. {5 v6 A8 Z" D |) }
/* Starting sections of the McASP*/0 s4 W3 v1 L# v3 f* H
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / o, ~( l- m( \; E. y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 i/ N- y( J8 v, A A mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 U+ L: y2 Y# G" `2 \4 Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 ~! z( O& V+ B$ y1 H& ~/ G& P: j7 s5 j+ h% B/ i
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ g- t, }; _% q: X* M9 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, ~& y) Y% z! W a
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ s" p! |9 T l6 i! V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
D% [* X6 s5 C( B' U' R7 C/ }
t$ E% p+ K! O6 C mcasp->regs->XSTAT = 0x0000ffff;
: A+ m- K4 O. x8 F: g# j2 v$ Z mcasp->regs->RSTAT = 0x0000ffff; " J$ f3 I- ^# \% B/ \4 F6 ?; s' c& X
- P' P t& z$ Q. h4 U mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ L" t$ p/ \6 v3 N- [, M4 { a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* j+ k2 l) d5 b4 [ h mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - ]5 } Z: I* g* \9 s' ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 s7 [* F( D! e3 P( b$ W* B6 I) @+ Y2 C4 M+ S
/* Write a 0, so that no underrun occurs after releasing the state machine */) o! T j8 Z" W; T
mcasp->regs->XBUF5 = 0;
y! {/ ]. r Z8 Z, {9 H3 V" m mcasp->regs->RBUF0 = 0;8 T8 v' d( Y9 o0 l5 g3 f/ K
- ]) [, r9 \4 Z# S q" s
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, e. N- W P, b2 y: r" g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 {& i: f# y8 _; {. b3 W0 R" S' y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 a$ f7 k4 I# f2 i3 W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! r8 f/ A2 A% S$ Z; ^, l- V
- D0 n4 ]$ h+ D+ A7 ~2 j
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 C/ B; U- }2 \" e; c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- Q, N. F" v' m5 N9 N" H
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 m9 ?/ C+ k6 l# B6 U& ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 `7 [8 s! i, R5 X. Y( T4 b K3 d' s# s5 K ^; s' Z
CSR = 0x0000; p% v, H# ]8 t: l4 ~! {3 v; M, V, V
INTC_INTMUX1 = 0x3d; g0 Y8 g/ W: f! z7 D
ISTP = (unsigned int)vectors;! i) W) |$ {3 W9 P9 t
ICR = 0xFFF0; , v7 Z6 }5 I# D
IER |= 0x12;
( v3 r* K0 [9 p. A* \ CSR |= 0x01; 0 A. [. O" C5 K4 i6 x) F+ ^
; g( [1 [+ [4 |; |+ X3 e. q, _3 D; D
4 @3 z8 n/ N# d. J& H' x3 E- J还有就是两个输入输出函数:' y9 ]( Q( M) ~, i
void output_sample(Int32 out_data)& W2 p. t% [/ u1 d. \
{9 d3 e p% c) S" Q9 G2 s; u* k0 _- f
AIC31_data.uint = out_data;
+ e1 O' X0 Z8 B; J# n1 Z MCASP1_XBUF5_32BIT = AIC31_data.uint;3 K, f5 Z% [0 `1 }7 S
}4 {1 s. R! ~: T) S* `3 a2 j
; `6 m3 r% z. X) b2 g9 s* C+ f8 r0 BInt32 input_sample(void)
# n1 z1 D$ l1 J( j H" H- [# u{
# s9 |5 F' q$ s6 |. K6 m AIC31_data.uint = MCASP1_RBUF0_32BIT;* E# @) q7 N; s1 ]
return (AIC31_data.uint);4 {8 j8 y' k' Z( w7 K' _
}
4 K4 ^* D5 u# [ Z' u3 X8 ?' d4 W* `9 ?3 |1 y9 t+ x, C
|
|