|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, k# I: j3 I9 w8 p5 M! H- R. bmain文件:
9 b; k" s& u$ M+ Xinterrupt void interrupt4(void) ! V1 _! x0 W5 f
{5 [7 n% w. u# C& m, l% z
Uint32 sample;
: c1 Q9 c1 R% s Y" M' I4 G6 z0 f$ y8 r: f5 K. C. G2 l) `. w
sample = input_sample(); // read L + R samples from ADC! t0 _6 }' {+ o( T' ]0 f" a6 V
output_sample(sample); // write L + R samples to DAC ! b1 f6 n8 k' o2 }' D% B% b& f8 E6 D
return;
" x7 m( c) ?' ^$ A6 y, c, Y$ y. A' i}+ j7 n: V5 X& N4 W& g& { ^
. b7 d# y( U% Q# |; vint main( void )
: X: N% H7 V0 A, t9 t{
- Y% h% a8 h* E N: m
) A! y8 \3 _9 j3 ?) t# a. @ /* Initialize BSL */
2 ^7 h1 Z. K, f* d6 R5 u EVMC6747_init( );) ^2 j/ W5 ~; h a: _- ^/ ?# y8 i
/* Call evmc6747_intr function */
- ]+ X( E/ b/ d aic3106_init( );
- I) Y( @" y ]$ v while(1);
5 g& _, W/ E1 ]( B0 ~8 `}# d9 U+ G9 n5 t. u) v
% L8 t/ w' K9 t. Z/ y: L# p, X9 }: |/ X7 A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( U9 [- Z* w2 y" y& G2 ~/* Initialize MCASP1 */0 p$ d& `5 W5 q$ p$ l
mcasp = &MCASP_MODULE_1;! x8 y( m* }6 I& h. x
mcasp->regs->GBLCTL = 0; // Reset4 R9 D* n7 q5 S0 v& z& V5 n- }6 X
mcasp->regs->RGBLCTL = 0; // Reset RX0 }6 J; A% O" R9 v9 g3 B J
mcasp->regs->XGBLCTL = 0; // Reset TX4 S; C" R5 z& p! ]/ J+ F
mcasp->regs->PWRDEMU = 1; // Free-running+ U5 X. m, x) ?6 q" e
// configure McASP0 receive registers
' x7 o( y e9 Y" Q9 q mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( `9 ?8 z; a5 |; y+ U
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 t% Z. R" [. i8 P! D) Z. t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' ]: J4 ~" N# t' o3 }
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 Z+ B! p2 `2 H8 ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" Q. y( `4 z) G2 E- N mcasp->regs->RTDM = 0x00000003; // Slots 0,1* R1 t5 L { F4 s5 c- N8 u9 J
mcasp->regs->RINTCTL = 0x00000000; // Not used
W' x0 s8 N% V! u8 k mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) J% d1 Z( r- ~8 b. ] K( q% K0 o. [1 ~0 R- `% A c7 n. t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
/ }5 w1 M3 m& Z9 r% F; s7 E+ o+ o mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. u) \* g i0 W3 A( p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: ?& z$ r8 R: H: r' l; E8 ~5 f
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, B( x/ P$ a% T9 {) R; r mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK$ x- t- T1 V7 i. X, ~2 s5 |
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& m& l* Y$ ]7 I* R) p( _# A
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 h$ f; e/ N8 p
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- u! r; k& x& P9 |& v" y, q$ K4 f0 U! T% b( S7 {, C, M
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. v( ~! R6 \' J6 L' v/ x( T) f mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
Y3 ?3 o# e! i9 ` mcasp->regs->PFUNC = 0; // All MCASPs1 V- r+ g' H$ N( G6 D
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 @1 P( s% | m9 t9 h
3 X2 F8 B( ^! W# W, v9 M/ k# v3 G T/ {
mcasp->regs->DITCTL = 0x00000000; // Not used& A) \- E/ L% E
mcasp->regs->DLBCTL = 0x00000000; // Not used
' j) n g8 e3 P# M% o! B mcasp->regs->AMUTE = 0x00000000; // Not used; r. t" D' N' J. V7 P! l/ n
0 ^6 Z8 c2 }, V& H/* Starting sections of the McASP*/* c/ i* A- }, U$ }% G
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# n1 i& x; _# i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 5 O9 e, l) u8 {% m4 A
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 g1 g% j5 e& U/ `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); d; k* ]+ a2 w& C5 f
- R$ C) Q+ B( i$ l3 H mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) J Q; e* T, b9 Q# _! A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) s- W/ \! u5 } mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 y2 i) t/ \5 F* C( ^2 N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; N9 E0 E, F. W+ a8 p4 o
8 Y/ a2 [) B8 O" y+ w1 z mcasp->regs->XSTAT = 0x0000ffff;
8 E! C$ Q% o% y/ l; D: H! P mcasp->regs->RSTAT = 0x0000ffff; / ]( B$ l/ V: N* {
7 X- ]( H1 n( o( m g' z
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. f' T9 y0 Q4 e7 Y8 S$ v/ ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 x3 l7 {8 f$ c: [5 r mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( d, b6 L& t4 R1 L: ?6 D+ g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: K7 C0 \/ Y! s7 F
' i1 Y0 z6 ]- |9 {2 T5 n: y- d* \% D /* Write a 0, so that no underrun occurs after releasing the state machine */
6 I8 D) J+ E4 J( |' r" k mcasp->regs->XBUF5 = 0;
8 L7 {" {+ J a" n; w$ G, B mcasp->regs->RBUF0 = 0;
- _' p- J1 F- J! P+ c' y: r
" N M1 i& g9 J. Y s2 R; M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - ?. F4 S; f) c4 J9 w( x6 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 O. e/ l+ q4 g mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ A+ E$ {5 [* N; r) ?4 G" t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. m% U" B. \' t; p5 m3 @; Q4 a4 V/ V
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) n$ b2 X/ C* r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% |5 a# B9 v( A2 b7 g ?' b
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 X$ a( w" J% k+ Q* A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 m0 L; b0 M0 ?( d/ `* ` u' ]5 H3 S% `% \& q, m: R! ~
CSR = 0x0000;: A* p6 ?& m. o9 {" b2 u
INTC_INTMUX1 = 0x3d;( x8 s- l; Y5 H) g0 R. i
ISTP = (unsigned int)vectors;
; Z, h3 c: Y- r: d- A ICR = 0xFFF0;
9 ~% {, ?7 `. _; p IER |= 0x12; - [/ t( A+ X( W- P; P
CSR |= 0x01; + u/ r% k" O* ]4 v: X
1 A4 S0 W, r: U3 O- c& o& M/ E6 L
2 p) T2 s7 z- s2 B- r, L+ @- A5 f1 L( A
还有就是两个输入输出函数:5 L* U; k( A6 F
void output_sample(Int32 out_data)
, N: b# A5 ]$ x8 I7 m/ z) P+ t{
; c: z: Y& [* a AIC31_data.uint = out_data; 4 N' o; J7 y( I5 j. o! E( X
MCASP1_XBUF5_32BIT = AIC31_data.uint;; F& U \( E& c4 g+ g
}
; D, T7 X. _5 m! ], @7 S v1 P/ D, [
9 R+ C: o: z7 mInt32 input_sample(void)6 N6 a& n6 s4 [3 H5 w4 `
{ # N: n% Z' @8 v& H
AIC31_data.uint = MCASP1_RBUF0_32BIT;% w- T7 v3 v1 b# g+ Q3 U& h. X6 ~8 W
return (AIC31_data.uint);9 U4 K4 u9 u9 ?2 w
}
6 G/ X5 [) a; Y: a) m$ G/ a6 S8 ^& \! C" b
|
|