|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) f0 o$ M! b& Y9 F4 Lmain文件:
# j$ E) Z0 x8 C( d3 Einterrupt void interrupt4(void) # d4 Y; S% W+ l( L7 D1 i0 Y- m
{' u' @; q8 w' w3 W: P
Uint32 sample;
, L. ?3 T( x- O7 N( h9 p
$ q' f7 X1 l& s4 s; ?$ k sample = input_sample(); // read L + R samples from ADC
( k K& a7 H# Q* D7 a5 C H output_sample(sample); // write L + R samples to DAC , H& e: t _* ^3 q& v- y i
return;
2 o$ K3 U+ d1 Q4 ]# o}( B9 o4 Z; y: N+ f7 g( h1 p+ K' H) }$ r
. \ z- |2 W0 a4 D9 [6 j+ g9 O' m$ b
int main( void )
* A$ b! X4 V4 [# W{' B& d5 {* j( O6 P. j. P! n8 ~0 c
8 `2 }1 O* |4 k$ _% T
/* Initialize BSL *// D- f& l/ f( t
EVMC6747_init( );
" a( t9 P, d$ t /* Call evmc6747_intr function */
0 N3 H _& [' ^4 L) D0 r aic3106_init( );
$ e4 E! ? e; _1 C) v while(1); s+ U& ?+ H B& e, I5 j) _5 @0 I
}) H& K- L7 t) j0 e1 S
F( V) X3 b: O5 e3 }; Y$ I6 P$ U8 F8 R! Y. U, f' ~( B# F4 I& f, @- c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) h8 C/ ~$ H, J5 ]7 v
/* Initialize MCASP1 *// A, d4 K2 U. N3 x" X# s
mcasp = &MCASP_MODULE_1;; t! c6 m" u/ q* R+ R3 \
mcasp->regs->GBLCTL = 0; // Reset
! }& A4 m( P. L: E6 q3 T5 d0 u. N mcasp->regs->RGBLCTL = 0; // Reset RX
. b9 z" T7 R- I0 g( { mcasp->regs->XGBLCTL = 0; // Reset TX
: P1 Z) G8 N4 L5 f# X3 a# C2 { mcasp->regs->PWRDEMU = 1; // Free-running
- w) b: w- }: J# J( E // configure McASP0 receive registers
% c0 O K: w' z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
+ b# L* i! V4 V; f$ X- M& _; X mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 f0 [$ W& f- q! E) }+ E* @+ C7 i4 p
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 b" `5 l! N8 J. k- S
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): p! B H; |% ~3 r8 F
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 Y# i! {) k& N; J$ b mcasp->regs->RTDM = 0x00000003; // Slots 0,1
" J! C6 e0 C) n, [, B7 z4 n mcasp->regs->RINTCTL = 0x00000000; // Not used
" w- _5 I! T* g. E) \8 _; Y x mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: z9 o* {: n+ j; }$ Y2 r* R& t5 s8 J& ~7 ^
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' `! |& {: ]" ]. H4 C! w mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 ]2 _# n- y# f/ S: Z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; l( L7 ] S4 L/ d mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 Q2 y7 d8 z" U; {* A5 w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 V4 d U+ p; n8 {& }7 m mcasp->regs->XTDM = 0x00000003; // Slots 0,1( J% I3 X/ e$ [0 K& t# P
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 `8 D. _- S3 o4 q+ |( o k, E! c mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! Q9 w- G# v \' y
: @* E! D& S0 r/ T
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( n" d2 O, R7 a
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 t* m4 S4 O2 U- e mcasp->regs->PFUNC = 0; // All MCASPs8 i4 A7 @, g4 o, N) s
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 d; `3 F0 p( o+ ~+ U
. R. ^$ h, A, ~
mcasp->regs->DITCTL = 0x00000000; // Not used
( X7 g @: M* G# c5 \ mcasp->regs->DLBCTL = 0x00000000; // Not used
5 C+ N- l6 _7 k8 g# } mcasp->regs->AMUTE = 0x00000000; // Not used+ W( C' F# e0 W- _
8 _7 g2 U; F) c6 F6 ?+ L5 R2 N r
/* Starting sections of the McASP*/
1 D: \3 |/ ^2 o7 N. r mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, Z; d- q9 V9 Y6 q! D+ \9 E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & b: s( b- f6 J, v# `: e% S
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 T+ E0 q2 k# c! Q0 v* C9 o( ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ ^& A( k" q8 Z+ V$ l' \1 p$ b
* L. h/ X f# c mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 E. w, D1 e7 E: v. j L; E9 V& B3 t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 v1 \- T# }! B, Y7 U( g
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 Y) A7 g( j/ G7 T2 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; [2 T! _! T& x0 j, p% Y
; L5 f2 s$ R& `/ U
mcasp->regs->XSTAT = 0x0000ffff;
$ S3 ?, K( ^& }* l) { mcasp->regs->RSTAT = 0x0000ffff;
: e; j( A+ p! {$ B" c4 y" I- W( }; a+ c
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; u! L7 c$ v- {, I8 J: |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 n" t5 _5 v) ?3 H3 J2 t, x mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 j' L0 v X: G w2 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- M9 c$ k+ c" P, f
9 D1 `3 e5 P- `. U /* Write a 0, so that no underrun occurs after releasing the state machine */" B# G! a$ q% G! ^8 o0 G
mcasp->regs->XBUF5 = 0;
4 b2 i( l2 z7 D3 B mcasp->regs->RBUF0 = 0;
, }9 n0 P* p* {: J( s4 [4 u- {, e7 X s
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 ~2 u7 m9 a% @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 i$ Q- Z$ ?$ l4 ^0 @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: u5 D+ x$ h. g ?: D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' a y+ `# s3 e* P& d) G/ S& Z+ e% O0 A* p6 B
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 x/ J& g$ U$ `3 ?4 M7 I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! s( u8 o x4 e3 D9 }' f+ x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : z- Q, i4 V; g4 Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ M( \5 j! H+ h& a5 d; h
4 X* e/ {5 i' X! ^' J0 [! l& b+ [ CSR = 0x0000;
! r: |; v: _/ z$ A( \ INTC_INTMUX1 = 0x3d;. B/ y) C5 t6 R& E0 P2 I! { n
ISTP = (unsigned int)vectors;8 f1 B; I, A; } L+ {' E5 J
ICR = 0xFFF0;
" k+ P7 r6 C, H; R$ r IER |= 0x12;
7 F+ ?4 G) O: Y( \7 v9 F CSR |= 0x01; % m' l9 H C/ A5 I
7 C* t9 @- Q, E! L2 F4 w7 y6 U8 Q9 f8 L1 q( D' @
2 U; e: _ `( r还有就是两个输入输出函数:& @; Q" S7 m2 `! D
void output_sample(Int32 out_data)
# Y, @; D1 y3 b6 y{; M' l- V' G1 [5 A, A
AIC31_data.uint = out_data;
) T1 [4 K- ^7 c2 j9 D7 [ MCASP1_XBUF5_32BIT = AIC31_data.uint;/ K! p4 Y: C! I
}/ q5 _: I) E0 I, _% S4 j; u
. ^$ a8 }1 \# W% g* l% d
Int32 input_sample(void)
1 r+ `* f. _6 j9 J+ f{
7 r) q( O+ U0 p1 ]% ^# |- l6 e AIC31_data.uint = MCASP1_RBUF0_32BIT;( Q& n8 j6 {% P! M: q
return (AIC31_data.uint);
A2 x2 R @) j+ B$ o4 Y8 D1 V}2 V& L+ D. r% l g8 y0 _8 @
; F! I$ `9 `0 G* w) W6 g
|
|