|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; i$ B/ G3 `- W ?& l+ e
main文件:4 w; H8 g+ h4 w5 R) B$ S
interrupt void interrupt4(void) $ {6 U1 H7 D- x+ p- ~) D b
{
, \" }. X) H. l- ` Uint32 sample;
5 }# T& M9 D* L" V+ |; W7 ^/ Q# _& Y) |- X
sample = input_sample(); // read L + R samples from ADC
: C t, J- ~. O4 t5 ? J output_sample(sample); // write L + R samples to DAC
& a6 q7 c2 F9 \" o& n. u% s return;* @$ ]4 n' m# l/ l$ F
}3 X; V6 y; i. }3 a( }( X
. [6 n9 c9 {- @6 e9 i
int main( void )
& Y/ y2 R9 O. {0 b* F9 J{8 D5 G/ q) l$ ~9 p& x5 g E
" a4 ~- S. h0 T) k* b /* Initialize BSL */9 D5 @! _. _' M( f
EVMC6747_init( );1 z) w$ I# _; z% Z% Z j1 t. h0 t! H
/* Call evmc6747_intr function */4 M( y# q* ]1 g2 w! h4 j
aic3106_init( );' b2 m: m& _% a4 Z
while(1);0 x+ f- |/ E4 H' q) M8 w' @( m
}
# P+ i8 b7 I6 W$ D. ^* |* g3 |0 Y6 Z J/ N# l. U) X* t
1 v. Z2 s4 T- _0 R( \ uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 @- a" c3 i8 z: b1 z; z' G4 A, U" R
/* Initialize MCASP1 */
7 X1 C! P u4 s mcasp = &MCASP_MODULE_1;
& ?! U+ L2 K6 ^' }. m mcasp->regs->GBLCTL = 0; // Reset
: g2 l! r) J$ O mcasp->regs->RGBLCTL = 0; // Reset RX
5 Q( i; R3 C* m2 s8 U mcasp->regs->XGBLCTL = 0; // Reset TX
! p* u" u( A3 G& k: J mcasp->regs->PWRDEMU = 1; // Free-running
5 k( _5 M( o% w- j: Z // configure McASP0 receive registers7 B9 e) B- \( N M! {; d, ]
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ n6 K7 r% ~# W8 i. l, ]* H mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, U# T" K; K4 d: _- e; p; [ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 X5 X: r: }* C; }" F( Z6 Y+ K9 m7 F mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! `5 v8 J6 X, |% B
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 ]2 e; s% x4 @% Q6 ~ mcasp->regs->RTDM = 0x00000003; // Slots 0,1; N: |3 G3 n% n. q6 O
mcasp->regs->RINTCTL = 0x00000000; // Not used
: N5 Y0 N" i4 t( B: ^* t mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* _8 K; Z+ l" E- {2 }
+ ?) ?2 @$ S" d, b. P: n4 R/ P; ~
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 G% B, ?5 o: e- \
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ _- K) n2 P8 f/ Q/ X" i: U
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 ]2 n7 _4 ^% Q9 P) o" J$ M. E mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 H7 W' Q% ?% i3 Y3 n mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 x( p8 p+ F. z/ S9 ]: r
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* E6 L# ]3 h$ H8 f! A mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% f, t% C- E; c3 D5 u% S& h' q mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- {& u' D: |+ q9 l* z: ^) n& |" |' V x
' F) } f9 ]$ n- f mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
; o: r8 Y7 T" W0 \& R$ Y0 z+ M mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; x& H6 E7 ~/ y, |2 }4 b4 k9 R mcasp->regs->PFUNC = 0; // All MCASPs a) O N$ Z. V. }) ]3 b) |
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 g& Q$ k! Q" d8 J- _3 R
[, [4 X, [& T1 z% a+ d: y
mcasp->regs->DITCTL = 0x00000000; // Not used) E& d+ w, [0 S% z
mcasp->regs->DLBCTL = 0x00000000; // Not used
9 z( v, t5 \& h3 S; B7 z* F mcasp->regs->AMUTE = 0x00000000; // Not used* k4 L% f" T9 A I' N
6 l7 X4 u! Y z: u4 C1 M R
/* Starting sections of the McASP*/
; q3 }6 d) V, L% o0 y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & Z- U( C- K+ A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % H+ v: O) ]1 W' X! P/ F
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 z% _% l# {0 e' X. d9 v# l8 E% b/ z6 z0 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ r1 o' R- X9 W! M& V
1 l( s2 Z: b' A5 o* I* h) h: n# ]! M
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" G0 X6 H g5 N) x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 s5 S9 {! r1 V+ o/ G mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; }- F5 Y! p/ X* A4 _' X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 L# x. [/ \. n
$ [7 y- c4 @1 ]: `* W mcasp->regs->XSTAT = 0x0000ffff;
0 C3 C( I4 B7 B; A* K0 X" o" ~ mcasp->regs->RSTAT = 0x0000ffff; ! i: J# `# T! x% @; a5 J# d2 V
* O5 y) M( n4 C v mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ ~6 M: A. _% ~) ` v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 z& d9 Q8 y; Z a! `' q1 H
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , r) k" w* Q' m i5 U6 p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 y% e8 B# y, @5 V T5 \0 ?
/ }2 `+ Q8 r7 D: {* ~
/* Write a 0, so that no underrun occurs after releasing the state machine */- R2 K" U3 `1 i" q7 d r
mcasp->regs->XBUF5 = 0;
6 J! ^# } i: i2 O5 R3 @ mcasp->regs->RBUF0 = 0;
8 u: B6 s3 E7 H& ~% A9 y/ T2 V9 V" o" \+ e8 f
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % F& e( a4 Q3 {0 ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ [" P( u/ ~1 d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" u7 J. h; i" ]5 T& |* F2 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) V: R }- Q. E3 }9 L
- K( U5 A- {2 n1 w5 L) O
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 n$ I* {: q+ G" w3 [/ A: u2 R2 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- a A& I7 r. K: C: G+ X mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 V6 w: P+ _2 G$ }: U2 W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 }: m+ ^$ b. [8 G
' w. o; A6 n( h CSR = 0x0000;
- e) S' x* D2 y5 ~; w INTC_INTMUX1 = 0x3d;
; b5 k9 k5 ?4 G8 z/ q ISTP = (unsigned int)vectors;7 T! d+ I3 p# J- \
ICR = 0xFFF0; ' C+ X g; F1 I1 [
IER |= 0x12; ( K% b& w7 P& c
CSR |= 0x01;
* k4 Q% i4 ^3 C6 S4 t- H6 X% Z* S2 Y$ [2 C( y# q+ q
: a$ {! C% y9 C' v& m& t
' c. V2 n. u9 u还有就是两个输入输出函数:
. j; `# a# `, x8 xvoid output_sample(Int32 out_data)1 @6 `8 `0 Z. l- \+ W1 D
{
- i' \. m8 t8 U$ B AIC31_data.uint = out_data; ! U" \; ?6 p1 o3 ?, U
MCASP1_XBUF5_32BIT = AIC31_data.uint;. ^6 m7 P6 W( \/ f- B$ A8 B, U
}3 r3 @( C, a$ x+ ^# L5 M
9 d% J: z& x. D/ _: c
Int32 input_sample(void)7 F7 T! ?5 e# x: L9 ~# t
{ , e" g8 `& |$ U
AIC31_data.uint = MCASP1_RBUF0_32BIT;2 N" K7 C6 M) g& \! a, J
return (AIC31_data.uint);5 _) N7 J2 q% l7 B
}
3 R2 o' ?& C- T" Z8 n+ i
- l% ^6 w! y; |" c7 S |
|