|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 `3 y5 t5 f. }, }0 D: jmain文件:0 {1 j2 E) @; S/ q: p! N. B7 T& W1 l: _
interrupt void interrupt4(void)
! J" C4 p6 U; r{5 _, Q1 ^' j/ ~5 w" f+ h
Uint32 sample;
0 f0 l- N: } u$ A+ _! @- s: g% ~. d* H* n$ n+ k$ U
sample = input_sample(); // read L + R samples from ADC
1 _" x+ [" F9 W; ~4 } output_sample(sample); // write L + R samples to DAC " Y8 W) G) p0 k$ f; {
return;
, ]2 X, m% y, L; b# p' Z/ _) K e4 ]}
, k& R5 A$ f, n+ U
4 @" v: l2 h0 J* sint main( void )( ?7 ]6 K) S! ^, M+ g
{
3 Z7 R* D0 `. I, p# i
$ V" V# w4 s9 O; F /* Initialize BSL */
: X7 s3 U9 a# `$ Q, w EVMC6747_init( );, O% m3 E) c% N9 L+ |' |
/* Call evmc6747_intr function */
1 q9 |! r- T6 }4 j aic3106_init( );
2 t4 W* z1 y' m( t0 [ while(1);
9 T6 K: C( W s; H+ {}# I) \$ G6 [* N; k% m- }
2 J1 ~, N( x% h; z1 [3 h
; I6 _3 i: }$ ^/ H
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! f9 \ ~. X1 _: ?6 f, m8 c0 a: k/* Initialize MCASP1 */% U6 O+ h" y. C( b5 A+ W
mcasp = &MCASP_MODULE_1;# O G/ Q$ e" M5 }1 D
mcasp->regs->GBLCTL = 0; // Reset) h$ M' e( l+ n- t" h
mcasp->regs->RGBLCTL = 0; // Reset RX
" \5 I! B' T1 D9 u9 U) T mcasp->regs->XGBLCTL = 0; // Reset TX$ S1 B' C$ ~. Z; n/ b
mcasp->regs->PWRDEMU = 1; // Free-running: H7 ^$ I5 Z7 t. v) v
// configure McASP0 receive registers) T4 L: ^6 z9 T7 I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% R1 Q4 M" }- N0 J$ r; J
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; S/ `* E2 ]9 ^! S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 S( `: k9 L+ `
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% V, H/ f5 N2 }, O& z0 w: r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* D7 [$ Q' a2 M* B; L+ @. ^5 o
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
( g0 {1 _, \. w w1 g mcasp->regs->RINTCTL = 0x00000000; // Not used, ?+ ?' ^/ E) j _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: i- {5 V9 z" \! E, A1 L' _
1 {# `' P; Z$ \+ H# z7 L9 ]
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 x# f4 s2 s& q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 `% S1 O9 B4 r6 i mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 ?% r1 d( ]: G2 \ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% V/ M( @; a9 ?/ L# P0 |1 q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 i) u* t: E. A; q7 \3 g* z mcasp->regs->XTDM = 0x00000003; // Slots 0,17 i# {& t0 z; q% O
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 |; C' q. c% A+ F) V3 k
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! r$ _8 k' _! ~+ ^1 I u
7 v6 b: j1 P: R* O" G mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN8 x( ?) x4 Q* s, l
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' D4 a" c( }* j) E
mcasp->regs->PFUNC = 0; // All MCASPs
( t5 I4 I0 D' f mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! _( s0 t6 [/ |$ X; s1 @6 C6 F+ W- Z- V0 ^( q
mcasp->regs->DITCTL = 0x00000000; // Not used& O! z0 J% N/ C* E
mcasp->regs->DLBCTL = 0x00000000; // Not used
9 @, M9 O: B/ O; I$ m8 P7 v, k mcasp->regs->AMUTE = 0x00000000; // Not used
& s! z& l! A8 p0 N, o2 I8 j7 y% G! y& G! a3 f& p" E R. T6 g- e5 t) E
/* Starting sections of the McASP*/
8 L t7 J+ v3 P/ I mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / s8 {6 z. v K& @7 x% u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& g# |$ U; v( [) [1 U mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) R! s+ T' o+ g( u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 F8 i$ @+ Y" S8 v3 v
" [4 U: e& _( Y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / s! b: m' G# t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, f3 s @3 k! H4 B& L4 e mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( `5 ] l5 U* p) n4 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% J4 f: ]& [ `" a0 E/ V0 z/ U+ o
mcasp->regs->XSTAT = 0x0000ffff;
! Z( |( M& r4 j0 @ mcasp->regs->RSTAT = 0x0000ffff; 2 b, H$ \) G) ^ @ ?
, N+ H6 q+ i( ~) L2 r mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- h- _2 g; Q/ h# V0 ?3 q: J7 B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 J6 L( m6 R, G# E2 L' S mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: ]; I6 v- ]* G! M5 J& Z9 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 |( F: n. \9 y# i& u
0 ]" q. P' o2 P' D' G /* Write a 0, so that no underrun occurs after releasing the state machine */
8 Y' E# S9 c/ x2 u mcasp->regs->XBUF5 = 0;2 w4 m9 G& \/ c7 }. j! i; U& L
mcasp->regs->RBUF0 = 0;/ a: m3 e+ L) \% t
* M. \4 e9 N9 H" J% @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( I! ]3 @( [( I) Z, ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( b4 \# Y1 E4 n mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / f- X) o% |" O8 }& V) X# z: ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ o1 w0 j; a) h3 O2 R0 T
8 x- _( g. W+ c$ x mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / S, R# N7 n7 h: s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* l9 k7 \& y5 Z8 [" P: c Z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' z) ?3 X- Q0 D- H+ n; l- L: y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* Y! K- L/ W0 C
& {% |) d( }. e+ y
CSR = 0x0000;
: w+ `! O; Y8 h# ^+ _3 L INTC_INTMUX1 = 0x3d;% b! \. L! O, }1 z# o" L& V
ISTP = (unsigned int)vectors;
5 G8 w" D3 Q6 o: Y4 J+ i ICR = 0xFFF0; - g4 ^3 T" S8 a" w8 W
IER |= 0x12;
; J; v. i5 P* e& b7 [5 @8 \1 u CSR |= 0x01;
7 U) v; a# [+ E0 ^! G. V- T& ^% f6 T1 ?
) n! _4 A, m: Z2 E7 A5 Z" n6 P) v- `/ X8 Z' q, ~4 x4 g
还有就是两个输入输出函数:
# s2 A( K" f: H) I- ]7 r% ]void output_sample(Int32 out_data)
& D. {# u0 V7 Z; i( ?' q/ `; D{, ?- X1 {+ x+ f6 |( y
AIC31_data.uint = out_data; 5 K; \+ a$ t9 x7 f" w. g
MCASP1_XBUF5_32BIT = AIC31_data.uint;. ]( ]2 `9 N5 `7 {3 m1 \
}/ Y4 f& A5 _5 w6 }7 g
6 N2 C$ G. ]7 P# R! E7 H
Int32 input_sample(void)/ H- H0 W& t3 R# q; Z
{ 5 J8 m! f8 r. T( V
AIC31_data.uint = MCASP1_RBUF0_32BIT;, e \% b+ J! ^
return (AIC31_data.uint);
" b: J, |8 E2 [& v! ]/ J}1 U3 m6 ]) t; X
4 d2 U5 N9 U$ G, x0 ^" E/ W |
|