|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
O3 I& P( i; d! |& P, ~main文件:
1 L( d* K/ a2 {6 [+ I) Minterrupt void interrupt4(void)
- m- d% D+ T; Y: i{
1 f3 K# m- a% O3 H+ D+ C Uint32 sample;, S* {5 j9 p( Y! k
1 t& X$ p5 E- g B: s. b6 Y3 S sample = input_sample(); // read L + R samples from ADC
7 Y; M8 h3 K* j1 x4 A7 s output_sample(sample); // write L + R samples to DAC 5 \9 H# E B: Z
return; I0 l( b+ c9 {7 f& {3 T% L) b- s
}) l8 t# Q! E. M( U* Z. e1 l
0 f! h3 f) j- l2 G0 c
int main( void )
9 b: Y& w5 _+ H a0 Y2 o% n% G2 x{
3 {3 H& q& U2 g/ d/ V: Y7 Q$ ^+ O( i# U
/* Initialize BSL */, s! `0 c" H9 _& g& B
EVMC6747_init( );
7 A$ m( D3 S, e; ?0 q/ g /* Call evmc6747_intr function */
% [7 e) c9 V* N" R aic3106_init( );
$ y+ r/ m+ V- K/ C while(1);
0 k) Z) s! g3 A) u! O8 o}1 G( A7 ^# I: s$ N
& F- B4 t; Q) C" ]
* W5 U1 F H$ @! uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) f7 @. E2 ?% `) H
/* Initialize MCASP1 */: [% S2 a S$ a& c1 y+ \3 {! u
mcasp = &MCASP_MODULE_1;
+ J8 d% k4 e' Y$ T x mcasp->regs->GBLCTL = 0; // Reset
: d* v( ^; w# M e mcasp->regs->RGBLCTL = 0; // Reset RX
1 `" D# z, v, ]% [ mcasp->regs->XGBLCTL = 0; // Reset TX
' x- u/ T( |. I; B mcasp->regs->PWRDEMU = 1; // Free-running
, G1 g' w* G* f# |# |2 b // configure McASP0 receive registers
5 T! [" b! A$ u" |/ w mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. _$ p9 f& s8 ^2 t
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 ]* O3 W, f9 Z( s& h
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 r1 z" s! p( J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); H0 S0 q% S$ J% V& @" K' h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), D3 P' f* J/ b1 D* F9 p+ b
mcasp->regs->RTDM = 0x00000003; // Slots 0,1# e+ o4 m3 W, ]. l; L8 R
mcasp->regs->RINTCTL = 0x00000000; // Not used
; K6 [% T. X \' G* w$ C* Q4 p mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 s C+ K: w/ I6 A# C+ o
9 \$ E% K! s3 t8 v' d1 h mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 F1 X" G" ]/ e
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. H0 g( `9 H8 ]2 K! M7 m mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ Q7 ]0 L" s: D' A) l7 b
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' F/ K0 I4 E5 }) q+ a8 E0 a6 h/ A mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* j: N; j$ W4 a- m
mcasp->regs->XTDM = 0x00000003; // Slots 0,11 W- Y8 \5 q3 g1 u
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ Z1 V/ i' J; |5 U* l8 I. P+ L
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. Z/ m0 M# a8 X4 S( K; d- `- l8 A6 m' X' G) Q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ W4 W% B3 }5 Q2 m3 O
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* H2 ]' }$ v& ^ y& q mcasp->regs->PFUNC = 0; // All MCASPs8 P# Y9 Y% e; P. K6 y- a
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 [! O& O$ R! _0 ?4 y& J2 n
2 I& E+ w. z" V1 W6 g) e! R
mcasp->regs->DITCTL = 0x00000000; // Not used
1 R5 n: [- N1 C5 j8 S1 \ mcasp->regs->DLBCTL = 0x00000000; // Not used
' R$ x. s. }+ |+ R( b6 X8 } mcasp->regs->AMUTE = 0x00000000; // Not used6 B' z- `, D% U: R8 p/ w
" d$ E6 y! r% i% x0 r, b
/* Starting sections of the McASP*/
6 F9 b! M: o1 ]' s; A8 ^ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" q: P' O1 M! M2 P" l7 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- t9 p' V* c' c. V, g! t- S" r! n; ? mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . g5 t+ v& u/ x* i3 i3 H" K6 a) o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% w; T" ^( ~' j0 L
& i' k1 q: z1 n, P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; i- }$ ?6 ^: L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) b+ o# j8 g7 h1 Y5 P% Y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 c4 H, v5 t* X y% G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& b8 a% I, T" X z4 X6 U& }5 c2 j! W
mcasp->regs->XSTAT = 0x0000ffff;
" [! H: t4 i. I) E+ v3 X mcasp->regs->RSTAT = 0x0000ffff;
* Y% Z! T7 z8 m6 s2 L& |& S1 i& k H$ V2 F( g
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 w F# ]8 D }8 X' ]9 E3 D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* U( o0 B4 _1 q0 a8 F
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! G& T) _6 |) ^( [8 q8 y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, B7 A6 |% v( K
* `' }( p! X7 R" V: n /* Write a 0, so that no underrun occurs after releasing the state machine */! i8 J o3 @% f7 K: S
mcasp->regs->XBUF5 = 0;
) `4 v/ {2 @; k3 P1 ]- _% b6 C mcasp->regs->RBUF0 = 0;1 W- R/ ~) d9 o
0 g$ q7 r' @) ^, e& n4 Z mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 R2 |$ Q/ c2 s; d2 ^+ d+ f d% t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' D& ]) A0 ~3 V t" v' b
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# i$ m# x9 u- B1 ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. A, e2 e, M4 T+ c2 w
" \! F% S( A( z8 Q) Z0 L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
w/ ~4 \$ C5 t$ K0 ] n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ {! h5 f5 j! ` mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ |* U5 Q1 L9 {, J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# R' U+ B/ e, A: s, c/ ]+ B- n4 V5 ^7 k
CSR = 0x0000;
# `- @2 ^; W0 }: b( \: A( R INTC_INTMUX1 = 0x3d;3 N. J i! v' u) `6 B9 Q' k- W& r
ISTP = (unsigned int)vectors;
w2 a* C* K8 ?- Z( a ICR = 0xFFF0; 7 c9 K* @7 I) f% W6 G
IER |= 0x12;
% X4 Z" u: b5 e/ o5 P CSR |= 0x01; - i# d+ k) l+ s# l3 h9 [
3 s* y7 _! g4 F& b; w
1 r4 P9 L+ q1 `" @9 Q2 ?2 ]4 N% x; T+ m' G
还有就是两个输入输出函数:! }' [6 Y7 T2 ~. I8 W6 N0 ^
void output_sample(Int32 out_data)$ Y5 `3 v6 f7 `- Q! d0 M1 G5 g
{9 v0 M2 l$ t* g3 o. I) l" Q
AIC31_data.uint = out_data; # t$ F- u- O$ Q Q8 @% A
MCASP1_XBUF5_32BIT = AIC31_data.uint;
' h& E. H: b. ?2 Q' x2 O}
) n) z! V/ _. r% M8 I0 t( U
4 O! _8 a* f. U$ j& j1 dInt32 input_sample(void)! i B$ W6 K) A j- M$ ?
{
/ g7 o. C, d+ b" S AIC31_data.uint = MCASP1_RBUF0_32BIT;! Z( |- h' Q9 f. N! I
return (AIC31_data.uint);0 l+ G* O9 V9 u. F
}2 C& u2 h& p! M1 ]; c4 q
3 h3 A+ S+ a7 k* w |
|