|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 {- s# x" s3 Cmain文件:
" o5 c- E* K$ t0 Kinterrupt void interrupt4(void) 6 B2 N. j. e7 b5 r& n% ]
{+ P7 \4 T1 ~, s6 D3 F' i
Uint32 sample;
6 u7 d* [% t! |' \, P3 H6 _
+ ~" S5 y: E: r* I4 A3 [ sample = input_sample(); // read L + R samples from ADC
. f) ?2 D' v& \, Z output_sample(sample); // write L + R samples to DAC # @: X: t& m: `
return;2 R4 J( D" _% v" J2 x
}0 _! C+ `& ]0 l/ c& T
( D: Y1 G' O! T" U6 }7 eint main( void )
% A( o. U" O1 ~9 l- A( o0 C{6 a, _$ x& r% t3 n
& {3 t- H& @" f
/* Initialize BSL */
% x9 ^7 n4 @5 {8 g' U2 a EVMC6747_init( );) M/ g' N9 a1 m
/* Call evmc6747_intr function */4 H& N( u3 ?3 s* e: l
aic3106_init( );
/ D2 j: o$ U/ g6 Q' { while(1);
( ?2 c5 f# m+ V}
& ?( x: ~6 s# {* E/ O. Q7 w; `5 j) x2 Z5 J! T+ Q2 z
6 R1 I# {2 k3 K3 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 ^9 a, w; p, F7 L. a
/* Initialize MCASP1 */) C" z& w' z/ c% p) d; x) \
mcasp = &MCASP_MODULE_1;2 ~$ V8 l% R$ q9 ~! t2 m
mcasp->regs->GBLCTL = 0; // Reset f+ V2 S4 ?# }) |0 P
mcasp->regs->RGBLCTL = 0; // Reset RX1 y! e/ ~' D/ t' u% b
mcasp->regs->XGBLCTL = 0; // Reset TX$ B/ H. a4 ^# d) d- W6 D
mcasp->regs->PWRDEMU = 1; // Free-running
3 h# c+ w- g* j# Z+ X // configure McASP0 receive registers
, I( L2 {; T5 b: V7 w( L mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used6 w( U/ r6 ^# D8 [% O8 m
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 z3 E$ b( J8 V C
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- V" b/ H. Z4 o" j7 a g- S
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 N% S2 q% ~+ B3 g9 \, ]9 b; I) S& s mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ s7 o: t9 U3 q/ U mcasp->regs->RTDM = 0x00000003; // Slots 0,1
9 k% E" y" q6 q mcasp->regs->RINTCTL = 0x00000000; // Not used
/ W3 s/ `$ W* {8 N$ ?/ c$ e8 T mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# u! H0 m! U, W% k
4 B( D3 {& n: v" N( M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used C& u: O V& ~* \4 [+ t
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 g8 a( i7 ]8 y
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 V2 b2 @* u1 n- [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 Y# U" j$ R! H6 v$ J* i
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK! a r/ u; n- w; ~/ C4 L1 E
mcasp->regs->XTDM = 0x00000003; // Slots 0,1" x' A B3 {- S, _" J0 V
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" I3 l$ S; ~/ n( X) ?; l, U
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 l: x. m% j& o, S B! a) B1 w0 B( k( ?& m# H* C" O; s5 @
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ m3 U6 D ~& H9 Y, H
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT2 |$ d/ N* K( @" e
mcasp->regs->PFUNC = 0; // All MCASPs
6 w! `2 Q# y2 B* I, i8 r; N* @+ s mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: |6 h3 J( Z7 N% @
& W4 E. D' M7 A: v
mcasp->regs->DITCTL = 0x00000000; // Not used
9 s# {+ o2 N2 b mcasp->regs->DLBCTL = 0x00000000; // Not used8 ?5 G# o3 `: V4 V0 R# F
mcasp->regs->AMUTE = 0x00000000; // Not used# E' V' i/ s& {
' f p% [# w- H
/* Starting sections of the McASP*/# N0 ]1 Q$ c' b5 p1 p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " p+ H+ D0 v0 F1 R9 V$ U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / _6 Q2 X% h8 |6 ]% j1 j1 Q Y
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 I# v) r- J1 y4 ~2 S( G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ l- o6 Z) l4 p4 ^
! t0 Z% l' o+ p; `9 O8 G- G mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 p( m9 e8 j) A) [' U! M8 x' I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 E% h; G9 R3 |" W6 c; v/ M
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! E+ T; e# k X# a* [4 O6 W: h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 M# V t% G+ s8 {. v
, v' W+ p& r- E4 l2 X& z, C/ w mcasp->regs->XSTAT = 0x0000ffff; + h! h# e1 l' w* c. I6 K0 F
mcasp->regs->RSTAT = 0x0000ffff;
! K. ?$ B k+ o
/ u3 { n" U+ ` mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, O) f m' }, `' s5 Q$ ~7 R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ N2 z' |: D0 x: a3 g3 V# @ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - J" ] E# t1 D) T* {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ r% e, m/ B6 d. a
* C. n- ]# c4 p Q3 l; o" `1 }& k3 E /* Write a 0, so that no underrun occurs after releasing the state machine */. P; k3 Y9 s9 @# \8 S: l0 h% J
mcasp->regs->XBUF5 = 0;7 w) j: _5 E- {8 @! J2 V
mcasp->regs->RBUF0 = 0;
3 y( F9 l% {( g* u, N: X1 m" ]' ^8 j' f* X% z& x: q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " @7 |% H6 c4 v H- p& k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" b3 ]4 T; ]( P# y. t/ ] mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 R {6 F% a* N, L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( J; M2 H3 E* Q% F! G0 ]5 d5 S0 j
6 `5 G N$ @. S mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ K4 W+ J; s. o, I/ z; d$ V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; H+ D. e2 ]+ ^; i! d% { mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& k) w- y' ^! g: ^# T; n7 ] } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. a+ c# O: Z; c" V& M, z( Q6 K
/ f# o5 g9 h; `# W CSR = 0x0000;( ] ^: i* g3 g; S7 w2 Z$ n
INTC_INTMUX1 = 0x3d;: F8 T# M2 q. C& _' k
ISTP = (unsigned int)vectors;
+ C3 K. A S/ \# r7 w! n3 l ICR = 0xFFF0;
# \8 r& W* M+ P IER |= 0x12;
( U6 m5 u- Y5 y. M6 s( v CSR |= 0x01; , K0 Q( j6 }$ v- w$ Z- g( O
$ N# q5 K1 o v) E
8 |" ?7 J" I; q9 z, x& O0 g
9 W6 c# D; A+ w4 f, C还有就是两个输入输出函数:0 @: Q$ T% D; m; y& [$ _2 i; N5 a
void output_sample(Int32 out_data)
+ T$ q) G% k% ~{- H( C' n, Q) W. \
AIC31_data.uint = out_data;
& f0 @% W7 J5 V2 H4 z MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ ^/ |! p( S+ K. v3 B: x}7 H. \# b7 B6 t
6 T, d0 u, C4 ?Int32 input_sample(void)( O( ]# R o# i
{
P# r! X& t1 X9 B7 x5 H, {4 x; Y AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 q5 n0 q' K& x( n$ h! x \' F9 k9 d! K return (AIC31_data.uint);
; J& F$ d- Y. h) F}. {/ S- d0 P( ^- c
3 j4 x; E' a& G |
|