|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 C( h, u, E: @$ j, K
main文件:% z+ ~. C( E/ h5 f/ |9 h6 @$ N
interrupt void interrupt4(void)
5 z. D1 \6 D4 U( A0 Q$ T{ J( y4 f1 ^+ p7 J) K- H
Uint32 sample;& E) {, L# u& ]. }
: o1 x% C. X' L) A# ?6 t! `2 ~
sample = input_sample(); // read L + R samples from ADC
- J7 c9 g. c0 t M3 ^* I output_sample(sample); // write L + R samples to DAC & M. J$ K& f# @& F) ^
return;
( s$ T8 p5 s/ F! T. \: B" P, P% X}, F9 _7 U+ a( X5 l [! a9 X. E5 X
# Q( ^) G( ~5 U6 r( G1 m' o+ M, i; Z6 p1 D
int main( void )1 Q8 g- ^: w5 V6 g, W2 ~* r2 @
{
+ x' f' O+ i( ], V; z! I0 h: x* P0 ]# H& `. F/ ?& V$ L
/* Initialize BSL */0 z/ G, m9 y% G+ V
EVMC6747_init( );+ x" W1 l, A% @4 L5 g" `0 T
/* Call evmc6747_intr function */
) G. G) a4 q- g* B( Z aic3106_init( );% w6 O5 \1 X7 n7 |& b- @$ T5 R
while(1);( a& }/ i7 Y# o, o/ [, @
}
: j! B5 [- S% z
! m8 R R1 M) o: K9 M" q2 b% Z
' V y' \7 h+ g- r0 y9 {7 W1 Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
], j" S: u! x8 G/* Initialize MCASP1 */* b$ R, a- g/ t2 {9 c7 V
mcasp = &MCASP_MODULE_1;, v% B* o4 f7 S5 \& {
mcasp->regs->GBLCTL = 0; // Reset0 J1 N3 |0 f$ ]) K
mcasp->regs->RGBLCTL = 0; // Reset RX
" L+ K0 b6 P! n6 V; u, v. c! ?- v) Q mcasp->regs->XGBLCTL = 0; // Reset TX5 o: M: X" O8 v
mcasp->regs->PWRDEMU = 1; // Free-running" A) F3 `9 D) f) l2 b# }) \" L9 [
// configure McASP0 receive registers
* m7 Y. l h. d mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& c/ t! i' U V# X. S( N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& V6 H' \' D' B6 R' N. H
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& C6 U& m: x6 A. t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; U1 T# Z F/ ?& _" h mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% j w* {- \8 x mcasp->regs->RTDM = 0x00000003; // Slots 0,1
9 O" ]3 e6 D& Z) R- y- L mcasp->regs->RINTCTL = 0x00000000; // Not used9 S! L7 {: ~% O( I- e
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 L7 j# _ N+ _; D8 M
* |( o S( |' s' Q# k. f9 I# C* A2 f mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; O. R" y+ l% i: i r) B+ E; @ j mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* o) C9 a$ b' c4 [8 F mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( R2 t7 j& }) V6 O! Q- L
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 N5 a# ^$ u2 g3 c1 t" O
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ P+ o! {4 I1 Z) d3 Z2 C5 ^8 K mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ J8 h; `) j# L8 X
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit/ m' z( y4 ^6 D& ~' {3 S" B& t( X. }
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. r5 k9 ~5 k: a7 M- F! [* p% v1 N0 p2 J" X
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 L0 x; L# X) o7 q, u( R d
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
" ]) e" N7 T* b4 A8 A" y mcasp->regs->PFUNC = 0; // All MCASPs, {; w# w$ {9 P8 V0 n9 r0 k
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, R5 j- ?+ E. k8 i6 w1 H7 w
! v( T6 X& i+ ~6 K* }0 h
mcasp->regs->DITCTL = 0x00000000; // Not used
; n# @" J8 W9 Y3 f4 a* F6 E9 u5 u mcasp->regs->DLBCTL = 0x00000000; // Not used$ Y* h; C9 q3 E
mcasp->regs->AMUTE = 0x00000000; // Not used3 w. f' D6 v' ]$ p/ [
- q4 e! B" u- G. f" m) G/* Starting sections of the McASP*/0 v* y/ m, [" z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 h! x, S Q0 U+ E' l9 q k2 \ s$ k5 d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / F8 a3 ?2 {! [" d3 l; h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 h& W. B/ y3 ]' u5 |# T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 S0 F: @1 F9 `% \3 _& p9 X& X# S5 T5 Q) e7 k1 p
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 O8 A' w7 n1 z" V; P1 L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 C* P1 ], @& T3 U
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 G: U: r5 R* O5 N# i! l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: ]- t7 d( W: L$ A: y- X u
" B2 Q4 [9 M" O( h mcasp->regs->XSTAT = 0x0000ffff; + A7 N0 B6 p6 o Z" P
mcasp->regs->RSTAT = 0x0000ffff; , V/ r9 Z. G) I- g
+ x# x+ U7 z7 c. }1 T mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) A1 i) l3 U# y& I: P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' ~* b& Z/ r! i! O: w mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " }9 w: e) t) q+ p, z4 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 p" D" C+ o1 b& c, n5 O, `/ j8 [. l( W" `7 h
/* Write a 0, so that no underrun occurs after releasing the state machine */( L4 O/ n9 x$ n
mcasp->regs->XBUF5 = 0;
0 z& c7 R& _5 k mcasp->regs->RBUF0 = 0;& @& O+ B2 g+ j: B) H* ^
9 c+ q1 ?3 B( c# r/ @4 F9 J mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
h( f7 J, u7 j, m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ ?( G! \+ i! ]0 I5 Y
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ {6 Y0 g0 h% X Z$ n0 w5 h( e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) m2 j" Q- v* E7 y
+ X0 D( B2 u g# ~, @ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" q9 {# _# k2 o" S! g' G( [ M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
\2 i- e+ M- a8 R: u) `1 D mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 D+ ^. N# E g) q2 H1 y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON ); V) k8 ^7 I) _2 U
* Y2 V- i' C% q2 D' D* T3 A6 X CSR = 0x0000;
4 F, d" A& a9 l INTC_INTMUX1 = 0x3d;" i& V$ \0 m* M1 p& A
ISTP = (unsigned int)vectors;2 L7 q T/ @; y w* b6 T
ICR = 0xFFF0;
: B0 L2 R4 l# x. [9 v! y IER |= 0x12; 3 P4 C. ?7 t: `; `; U' C: U
CSR |= 0x01;
) Z- p0 _% A% ~* X
/ a, ]0 x! M4 ?. t* b! ] \+ ?* Q* T+ A( b. l$ z
6 }( y& ^8 u, t, z: e还有就是两个输入输出函数:
: e6 m, {. }! ^' Ovoid output_sample(Int32 out_data)
! u0 c+ u7 N! q% s8 N; `{
6 _, c [7 B& n' u: {+ o AIC31_data.uint = out_data;
w* [5 v1 R& @9 K9 ?' d MCASP1_XBUF5_32BIT = AIC31_data.uint;- z/ O6 j' Q6 d; X+ q2 A2 F4 W/ h
}
3 @/ U' k/ I$ ?1 e t& G5 I; I
9 }1 M6 y% e7 i- qInt32 input_sample(void)
; a1 X# I; T O* y% I{
; u( i9 W( D1 z) X AIC31_data.uint = MCASP1_RBUF0_32BIT;. T1 h* j4 L" T4 f9 v2 ]
return (AIC31_data.uint);
, b- g4 {# x# n" k}! K4 e; x3 V: \% d$ \) a
0 N! R4 q0 b# X" n2 W
|
|