|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* m5 d4 ?$ a3 t T; hmain文件:7 @1 [$ `8 j* W- B- M5 Y% ^2 H) W
interrupt void interrupt4(void) / i( a, J3 H5 }: m# D: w
{% e) H% L7 h1 F, ^7 ~" V: |. B
Uint32 sample;9 O) I# z7 b$ N1 W+ ?
1 {8 j$ U3 N% ?! O
sample = input_sample(); // read L + R samples from ADC
. s- I7 s, D8 I$ i/ @! Q output_sample(sample); // write L + R samples to DAC 7 ]; i V+ I% Z- D
return;
% r0 F2 S5 V+ P" q( l}, \, N. s9 h) C
4 ]6 T/ {/ l0 V$ L5 r) F1 r* Wint main( void )( `/ i3 ]& h% U Q. n2 M: x
{2 M6 ~; j* D* l1 k; v& g; |# ~( H
7 O2 |3 E! s$ Z2 U) _) ~
/* Initialize BSL */
5 q: V. B' m+ K% n. Y EVMC6747_init( );3 b! N9 s& P6 a# P
/* Call evmc6747_intr function */
( _! f; H# k2 Q aic3106_init( );6 O* j8 K" q8 W9 P7 R
while(1);
4 A5 N; k( C% @& @& Z0 A% G}' M1 U+ M+ i y. K2 m- ]( E
! b4 g! k" n f% F! h
5 M& |* i3 Y+ J* |, Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" i+ v1 U+ `& z; U8 ~
/* Initialize MCASP1 */
3 [3 L9 `) e5 V' n4 [$ Q mcasp = &MCASP_MODULE_1;6 X& {$ U$ A% i- E+ V
mcasp->regs->GBLCTL = 0; // Reset( U8 \: \$ z; }1 A: P
mcasp->regs->RGBLCTL = 0; // Reset RX
9 t! e0 t3 G4 y# A mcasp->regs->XGBLCTL = 0; // Reset TX6 r$ ~. ]$ t6 B$ _! y% {
mcasp->regs->PWRDEMU = 1; // Free-running
. u, }* N a( ]# K/ Y0 {3 L6 ^ // configure McASP0 receive registers
$ b, g1 `: F- [: v/ b s$ x mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
7 p; V7 Z: b1 A mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ W$ h T7 ?0 u1 J
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ |6 n# g* T! \( v6 K! v! p4 y2 x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ _ x: D2 I) o5 m1 [5 X mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) B0 c& H# I8 K( B3 S* Q% H6 t5 J
mcasp->regs->RTDM = 0x00000003; // Slots 0,18 i2 O( Q$ d0 t
mcasp->regs->RINTCTL = 0x00000000; // Not used
( s6 X, k6 m Q( i m3 G7 m1 e- l mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 ~5 Z- t7 i( ?9 A L# ]
; ]) x1 Y V3 |- ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
- \9 N, Y! X& e, F+ Z# Z) _5 @/ w mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* |1 X* D1 z+ x0 p- C1 B; O% E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) T Q( S9 K, {; x7 l
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( Q: t8 p+ w' u9 i# `/ f+ n
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ E0 b2 ?8 r: p: }
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. ^7 }1 I* I. \' \ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
5 I: G. ^" @ I# E. X& z, P mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- v6 ]# Y- o `, {/ Q( _3 `4 r/ [
) J, `8 V+ G3 v. D1 ~: O mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
; Y# h. W# |, |# O B mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; o) h" A- I1 A" }' V+ }6 z
mcasp->regs->PFUNC = 0; // All MCASPs6 j: h- p$ v' e- |4 x ^0 C
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. ?" H/ g/ ~; n- S, |
J' b& {# P/ Q mcasp->regs->DITCTL = 0x00000000; // Not used
8 E8 H/ G; b% V6 C1 H6 B8 ]: ~' l mcasp->regs->DLBCTL = 0x00000000; // Not used
* `/ K) |. S! U+ }7 i mcasp->regs->AMUTE = 0x00000000; // Not used. M4 E e: g" {" C& T* m: T
7 S3 v4 L& i0 z! t3 O
/* Starting sections of the McASP*/
! l4 g% L& G/ x1 t( ^ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / d, j) x# [ I( B t/ {. v- l& W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- w) X( o. U% ? mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + f! A" W- G0 |6 S5 T5 i# q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 C$ k* T& A, T4 E6 B+ k0 {9 u' ? p9 @5 \4 f
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & Y( @- L; |2 e4 I u% L3 v4 J# g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& L1 J. ?- G/ ^- T' G
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 {+ H" Y( P$ y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 B' K7 ^ l& K7 H6 f. C2 d0 j
mcasp->regs->XSTAT = 0x0000ffff;
) U$ E8 s/ y% n2 s7 C* b mcasp->regs->RSTAT = 0x0000ffff; : g6 I N# I% {
& A% d7 h( s C6 M' o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 o" V# `) N) E; P! V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: N! Z* j! b( t4 y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
h2 t, e5 b, E! c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 N$ _' {# O) G+ g5 l' n" x3 X ^& G, C3 V' @- m$ I
/* Write a 0, so that no underrun occurs after releasing the state machine */4 }9 D; z* I7 G6 P5 c8 W# c2 p, I8 Z9 \
mcasp->regs->XBUF5 = 0;
4 ]2 X. H3 y# K mcasp->regs->RBUF0 = 0;
- Z* t4 f8 X/ Z
) l/ ~) a/ _' A: y% p% O3 [* \ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 C6 c% c% u$ m" h( k4 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 I% z2 D3 s; m. z1 V" ]2 \
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 ~' R' X C! u( T3 `" S2 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 T9 G' X* n; M; v' O
4 a3 g2 j; r! Q3 S mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % P+ d d: j0 h7 v( x! Y. i. s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 v4 @/ t' @9 u' t0 L* X2 m# _
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' L4 t- U% V) D9 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! z: c, F: m: b2 _
, ]+ m- k9 _3 T+ N% G, v$ K; h- d
CSR = 0x0000;
& J1 b' k/ M4 s7 G INTC_INTMUX1 = 0x3d;
# z/ X( d5 ]$ q8 a5 m ISTP = (unsigned int)vectors;
0 A8 E/ b- H& [# F# S! X ICR = 0xFFF0; 1 c- B- s% R+ C7 @
IER |= 0x12; 0 S/ C1 m( j- _; @0 C" f
CSR |= 0x01;
3 F0 d6 D) x% b7 I# ^* s' M' q$ z6 c( B: T1 }
* R4 i* K. |' ~
: D, \7 V( z- l) i
还有就是两个输入输出函数:7 I! [% @( L1 D; k( K1 p
void output_sample(Int32 out_data)% p. F N+ z8 _, ?
{, b8 [/ u& ]9 y2 [0 w
AIC31_data.uint = out_data; / R2 g1 F$ j1 a
MCASP1_XBUF5_32BIT = AIC31_data.uint;% [& |5 a& Z2 T, q" T! j% L b+ {
}) @0 ~9 B7 f& ]: w5 _, C2 N3 D9 h
9 S% m& q7 c0 w0 A+ [3 nInt32 input_sample(void)
6 ]% q( s* d L9 e& ?{ 0 B# l* z1 h' U* D! |/ P& \
AIC31_data.uint = MCASP1_RBUF0_32BIT;' I0 J5 E2 Y9 h% U
return (AIC31_data.uint);- |7 P6 g# Y% g! Z- C
}
F( w5 b3 K' V* X/ h: s
( H7 a6 h& e& k9 k n/ O( E |
|