|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. G( X7 t0 r* j3 L( s$ D# D; g/ dmain文件:
1 U- S0 Y1 E9 Sinterrupt void interrupt4(void)
1 ]3 y6 I; n3 I{
) w" ?1 u+ C' |9 ~ Uint32 sample; ^6 c- @; f3 l& B" k
3 N* H1 C9 P" K% C9 w sample = input_sample(); // read L + R samples from ADC8 {, J, q% }2 m
output_sample(sample); // write L + R samples to DAC 1 p+ K1 W) f3 Z6 O: y. B) [
return;
: ~, x0 B2 {& X0 J0 R4 p, j}
3 U% w( B0 f8 S2 x: F) E& O+ o {- m2 \, g0 f' V3 B. q1 l" z
int main( void )
- s1 i0 |1 D% R. x- w2 Z{& \2 o0 k: ?4 v! p' ~9 G
2 b5 S3 Q8 V( R5 W* z+ H: e /* Initialize BSL */4 V( `) f6 m" e' `7 \$ p5 ~8 ]
EVMC6747_init( );
$ m; @( N1 i! [/ R /* Call evmc6747_intr function */: k7 e5 |/ I" J% G
aic3106_init( );6 B9 s* M5 O$ l0 ?9 p* y/ h* P2 Q' k
while(1);
# \4 r$ @! A/ q' _- F}, A; ]) u# U) P( N. e
1 {: b1 p6 |' W3 a
, R+ c" K- s; @9 Y" f! j7 J) Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. J- q: b0 [, q% r- ]5 `& j/* Initialize MCASP1 */
) Y7 f5 S' a! ~( Q! M mcasp = &MCASP_MODULE_1; P, s7 d v5 B2 [$ o
mcasp->regs->GBLCTL = 0; // Reset
6 N: s% ]3 s O8 ~ } mcasp->regs->RGBLCTL = 0; // Reset RX
5 k" G$ y; B7 F- q mcasp->regs->XGBLCTL = 0; // Reset TX9 A2 k' w7 y; s( m( R% d5 O: s
mcasp->regs->PWRDEMU = 1; // Free-running$ T, B7 }+ I) {# I$ C0 i' Z$ C, \
// configure McASP0 receive registers
$ [5 b* B7 Q' z+ Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' F/ M+ w" r( ^9 n5 E
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! J$ W* k" j1 @ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, W8 w5 p- Q ^$ Y% p4 d
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 f9 L# m7 y9 d
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ N t t+ g( d# e& l mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; ?( |& P- a8 G1 Z' Y mcasp->regs->RINTCTL = 0x00000000; // Not used1 Z6 G6 w9 U8 I3 C
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( Y0 P0 p9 s, B6 w, L8 ]- P. t6 R, _
3 ]3 d( v6 _- ?: ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 M @1 `2 y; F4 d$ x. D, J, [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ q3 m/ O4 p. u: b, f* P! f, E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ \! e' B% s% L- L9 } mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% p$ u+ B! w3 P9 C( M
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; D- Q, k& _- n
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
- y3 | _/ Y- G/ N8 h mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& ^; g% i" w; |
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 J+ z0 c0 C* u
: ~. H+ F% i+ z8 S# C+ x mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
8 p' p0 M1 L7 } mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT. X: \2 @6 f3 x2 ^/ I
mcasp->regs->PFUNC = 0; // All MCASPs
) h% r7 ^& M$ l* V: c I: z6 ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# V& n' ^& n9 @, u. n2 p. ?4 z; y- v& i( z; U: S
mcasp->regs->DITCTL = 0x00000000; // Not used( F9 L5 S6 E8 W' A/ V, C
mcasp->regs->DLBCTL = 0x00000000; // Not used
- G6 e; A+ s: ?$ ]% _ mcasp->regs->AMUTE = 0x00000000; // Not used
0 r( J+ v4 m- B" K. r) g2 q( z* p5 n v
/* Starting sections of the McASP*/
3 H5 S, F8 d! p: s: E. W3 X$ l mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 Y. {2 ~, s w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 7 ~, W, w: G1 K; c- U, c
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; X% e7 N4 z# y* y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ ^5 A2 C- z+ ]- p8 |' e. }. v1 c: j; Q9 n6 j
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 s6 }+ b9 `' u( U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ _' g6 u8 f4 U+ a2 @ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 ?/ H" l8 O+ J1 ]5 F: M O/ G7 Y0 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 w% n1 |5 n; W& I8 \& v
5 u& [8 a5 v# O mcasp->regs->XSTAT = 0x0000ffff; 6 |; X: U/ ?9 x1 [0 _4 n/ S
mcasp->regs->RSTAT = 0x0000ffff; Q( t1 g9 J1 q$ v. y
$ k9 j$ G4 O9 X7 I$ R) @$ T+ [
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ K8 l2 m, m8 i* i1 F8 C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% E5 s! }8 ]& Q! N5 j5 L' I3 x+ | mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& f1 y! e2 n1 u3 E* _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 ]4 n. N5 i# G2 J
5 o. _/ N* O3 d, c5 U /* Write a 0, so that no underrun occurs after releasing the state machine */
! E: c/ L v0 I) h, F* W2 c; P6 v7 ?8 n: l U mcasp->regs->XBUF5 = 0;' F8 H2 c. K1 s( a/ }/ v* R
mcasp->regs->RBUF0 = 0;4 y. N; [" {7 o( R |
/ r4 H3 k$ [* I6 }% t3 h3 Y6 @) J mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; m4 S: _* _6 L) a: m" M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: G- ] W( X9 H% l# J! K
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - n) J9 m1 a0 q h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 Z- A" v0 e: j7 e F8 l/ |
7 U" I" _) x1 _6 n, f7 k mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' n& p9 I( U+ k% M! `( G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' N! }% [# k9 j+ x' t9 _: A
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ k( T1 M8 ~) j: [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( [. I4 J! F& w$ X, u% W% R7 K" x0 ]5 h& A, f1 g
CSR = 0x0000;
1 a: q" P# }! O3 \ INTC_INTMUX1 = 0x3d;
+ g3 Q2 Q8 n# x b' J" D4 W+ k' Q ISTP = (unsigned int)vectors;2 X- d, g3 @2 r/ T
ICR = 0xFFF0; 8 N7 l4 B2 ]( s
IER |= 0x12;
& q3 L* t5 |* _ CSR |= 0x01;
/ i( h% N# i) o% |9 D
- ^! K% Q' x: ~8 e# K; l
# ~4 F3 ?, a5 S) x+ ~. \* G$ |3 p8 H7 d) q- `4 P+ @- q
还有就是两个输入输出函数:
4 D% `" F2 c( f. o+ I6 pvoid output_sample(Int32 out_data); k' A2 |5 Q9 C2 n
{
7 i/ f9 Q: D4 M Q- N+ F9 Q! ` AIC31_data.uint = out_data;
2 U& y; P) u, v- i" C. c8 l MCASP1_XBUF5_32BIT = AIC31_data.uint;
# T; w7 Z4 ?9 n! {% h3 I( Z}1 a. K. W$ P, I( S- V) [8 C
* y, d* {2 \# i1 `* E: q) T' QInt32 input_sample(void)
2 N0 {* i; H. N- D/ w{
( ]% ~; F$ ~2 z2 ~- ` AIC31_data.uint = MCASP1_RBUF0_32BIT;: R3 H2 N% x! i P2 M7 h: n4 ^" \
return (AIC31_data.uint);- t. [1 R! b' Q1 r/ }; s
}
% J! p2 W! D2 M0 t/ U3 T
`# {/ N5 B$ J |
|