|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 i. {4 \' w/ r* Z: d* imain文件:
% ?; r; `% U) ~$ |$ S. @interrupt void interrupt4(void)
4 {( n7 C( t6 K8 F2 H{
9 c( b) y+ X ^ Uint32 sample;- P4 w0 w2 @# h D. D }
" p/ Y- h7 X; q% F- B
sample = input_sample(); // read L + R samples from ADC
! k( B( a0 G+ M6 D+ N+ t N output_sample(sample); // write L + R samples to DAC
! y0 W2 D0 D0 d5 X2 Y) B" ~8 G7 J1 ^ return;9 Z# |$ a3 k, V' x
}, w8 m2 D1 F6 C4 Q2 G
) e& h5 Q$ u+ M# B% k8 z
int main( void ); F; `) z0 Q R6 X8 F! p
{! t/ S0 ]* d' r" ^+ \+ o, T
9 r+ F [6 C% f$ `: {
/* Initialize BSL */, e( y( J/ X. O. W) R7 x" [' v
EVMC6747_init( );
( j6 U4 [! c' X+ ?# |8 U7 C8 y /* Call evmc6747_intr function */
5 y! b( K# ?4 l4 l3 U. a aic3106_init( );
6 s3 S2 |: C) ? while(1); H5 G# {% Q; v. D
}" G$ [6 }. j7 d8 T$ W
8 v" u6 c' L& T6 B3 W
5 `+ P4 }+ t1 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 _, e4 m/ ]; |( x' j5 \$ f/* Initialize MCASP1 */$ X2 ]* T2 z8 Y
mcasp = &MCASP_MODULE_1; j' U! m! f5 `* A/ `1 `( W
mcasp->regs->GBLCTL = 0; // Reset% c, b0 R1 S$ {6 _% c; X0 K
mcasp->regs->RGBLCTL = 0; // Reset RX
% O/ H7 r3 _" y6 ?4 M mcasp->regs->XGBLCTL = 0; // Reset TX
0 f S! z1 y0 z' N8 R, ~. G mcasp->regs->PWRDEMU = 1; // Free-running
7 u9 g6 @* x8 U: p+ S // configure McASP0 receive registers `& F' i; q3 P$ P: r: D0 {
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 \5 ?( D# N& c: ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' }7 F0 _: c0 V8 S$ M mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. R- D) ?) A K6 ]# o! e+ u" e; H mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ `: W" x) m( L mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) ^- D8 {$ y' k! \
mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ e% w7 B& z' N+ I5 \
mcasp->regs->RINTCTL = 0x00000000; // Not used8 U! m" t# ]( u1 Q5 e& T
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 c1 L- }: T! `" w
9 l: e& P. l( q- k6 D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 F8 I7 K4 {* w; w9 k* a, N
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% v* M. ~2 k6 T1 w
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, p2 v* J: W* P4 D2 `
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 h* p' B" E- l# N5 p mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) x' b" p% u) d; j
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 O' f3 y2 R3 ?( N0 p" Y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 e v8 @+ e) n8 x& }% w. L# | @1 u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 X# o3 j+ m# b' {
% s' j; {/ n! I/ \
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# o3 v1 i8 y6 g1 C& B( C
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT N- ^3 d5 j- i7 g' r9 ?. z
mcasp->regs->PFUNC = 0; // All MCASPs2 A; F3 _$ J( {! o8 s+ ^
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 ?. L5 c2 y# o
. ~6 Y' L7 ?- j0 n8 T _# q mcasp->regs->DITCTL = 0x00000000; // Not used' x: u4 a7 e' b6 h+ @
mcasp->regs->DLBCTL = 0x00000000; // Not used
7 G" P; }& S h) k e. } mcasp->regs->AMUTE = 0x00000000; // Not used
1 |5 J9 G) a2 {" h1 V s+ _3 J5 o; _
( X: ^" g! Q" N4 T \( v/* Starting sections of the McASP*/
" d) p1 d0 D( k( h# t: {2 j3 ~+ K p1 q" R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / Z; \$ }& ?! M% s( v# _8 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ x* c) d/ ~, _- }/ k5 _- u
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ ^+ G x) y- F! h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 x5 @- ^- f) b4 x* j& @* [8 ^* u! \% H% L% k* Z1 E
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' r# r! w Q m$ E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 X' E1 J7 W# `# o) \
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 ]+ U/ y/ i9 b: R0 i/ d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 k2 r) Y+ U; _& x% L5 H! ]
& @3 E* a% G; x- A mcasp->regs->XSTAT = 0x0000ffff; 6 w) X9 s8 F4 C. {# {: {: }
mcasp->regs->RSTAT = 0x0000ffff; - {# U& _) L& o9 f1 |, ]) L/ c% V
$ \6 n/ a8 g' {# U" }& E+ Y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 B. X) d( g z! B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ _! O/ i& p5 V& `$ q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 ?1 w: w- t7 b3 `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ r/ y4 Z q/ A. d
3 D4 }4 I: ?* ?5 H5 u& | /* Write a 0, so that no underrun occurs after releasing the state machine */0 p- j$ m$ S" Y) Y4 d
mcasp->regs->XBUF5 = 0;1 c! c/ P6 {( }4 R; O% Y
mcasp->regs->RBUF0 = 0;' ^6 h( ?4 k7 Y
- v) N+ E% u2 ?+ M2 Z0 L9 S mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! f( V/ {0 S) `* o7 ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; `& U% M8 X% ^3 D1 J% I2 c( x4 m( R( z2 {
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 ]+ f+ V+ Q; v$ Z% H' r2 ]# |9 D8 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ b) o0 c' T6 P; B! R3 q+ D# ~' N- P5 E9 I* r, a
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + Y/ b5 r2 }# |4 l* m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ }5 E% l% Q1 ~( R8 X$ d mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 s6 s# ]5 h& L4 v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* M/ k- I; `% o) \6 `6 L. @
( Y( E7 W4 n" N/ ?
CSR = 0x0000;+ P- Q7 q2 W6 P/ s
INTC_INTMUX1 = 0x3d;' I5 ?9 a6 q* v3 d; M, l* }$ p% S
ISTP = (unsigned int)vectors;
7 X5 Y, B8 {9 s/ I6 b. D ICR = 0xFFF0;
" d1 @! L1 K" k, R' J; k# ?, Y IER |= 0x12;
, W0 q5 h: P! V CSR |= 0x01;
" ?# _9 F, s% t& [" l% F: w, W0 ~1 b4 J- S& i" w. w1 Z3 M6 w( |
% A. P+ z. p, T' M% Q5 H' n
2 n6 I6 z. G9 C* \
还有就是两个输入输出函数:) D; P+ h) ^3 F, l4 p5 ~- U
void output_sample(Int32 out_data)
! J9 ^+ L7 z: b1 ?' m{( R# k3 e5 q2 l) i
AIC31_data.uint = out_data; ' R2 [ c6 z/ T4 i7 K9 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;: g- L q- U. c6 s+ o ~5 {
}* p9 b! n; C- U
0 N' y% I* {+ Z, @3 w
Int32 input_sample(void)) L" ^( X9 Z( i
{ , b: s- e1 T8 T' ? l) C* i( D
AIC31_data.uint = MCASP1_RBUF0_32BIT;3 h% B' h1 _5 Y2 z1 w
return (AIC31_data.uint);
6 q* [+ f1 C# U5 }% R X- [# \) P}+ ?3 p7 K; I( ]
" p3 R. f( ~6 a W! A. K5 T
|
|