|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 J2 ]8 I) q2 A! p, bmain文件:
- I" \8 G! Z- V- g7 \6 v# [interrupt void interrupt4(void)
+ c% B$ K( r5 ~{; e' W. P( l. \3 [
Uint32 sample;
( m3 D( S. {7 p4 M8 @; x
9 i$ D3 D3 Q! i6 n/ z" O3 y8 } sample = input_sample(); // read L + R samples from ADC
3 b9 k& f. O9 ~, M output_sample(sample); // write L + R samples to DAC
* r4 B+ \7 S4 A3 u/ T3 {' b# U2 M return;
& w. j* C i d" T}
6 Z% `7 C1 e& f& b/ u6 `/ F& D3 ~
* ~4 h7 h5 P1 \3 x3 c3 C9 Tint main( void )
- T! j* ?( f( b! w{4 \! ?5 l3 |6 p
/ B+ K$ e( B8 N: N( ^ /* Initialize BSL */. x$ m& a3 [( L: F0 ~
EVMC6747_init( );* n. n, s8 s b: H! x: T8 X
/* Call evmc6747_intr function */
+ J3 \* f; Y' C( N aic3106_init( );
7 _8 g" R* {. R; B, @# n while(1);2 l0 e% x `% V( y/ ~
}
( u0 |, ^* G# x0 f4 L6 [
, g$ _8 \3 X4 b- N6 z8 w
# u# W+ N; v! B7 K7 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 I) y. Y. ~" d5 i/* Initialize MCASP1 */# X6 O% G, u; H& }* c: s9 {* H! `
mcasp = &MCASP_MODULE_1;
% W: Z G0 ]" F2 Q: S8 O* L mcasp->regs->GBLCTL = 0; // Reset, i) j( q' v8 c" K7 s# ~
mcasp->regs->RGBLCTL = 0; // Reset RX
& J& {0 x, @- V mcasp->regs->XGBLCTL = 0; // Reset TX' S5 k; V, y% N" \
mcasp->regs->PWRDEMU = 1; // Free-running
4 ~( i8 u( f6 i/ \; F' d0 {" t // configure McASP0 receive registers$ J3 ]4 W" n1 t4 m3 `' [& Z
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ Q# n/ e8 z N& d- j
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, a7 ?7 x9 ?: }4 \
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 Z! S. h" ]6 s6 B6 J, d, d
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 u, f! o" e" k1 l4 n$ c% ^) q8 c mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) @% P M" ^. b! Q% ~! `2 g
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ ?8 s1 h1 h) ~4 I) r: N1 I, @! E mcasp->regs->RINTCTL = 0x00000000; // Not used
9 R6 K7 z/ B* G5 R2 g mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: U5 n: f# {) x! S4 K; }1 S
) q, q& y6 [( s mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ F8 L _- v; \* ^0 y% l
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 {* o1 I3 P! ]1 ^4 A7 d; N mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 i& @ J9 Y3 m" W+ V. e$ R# A mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 T9 K6 i8 G4 o+ F& L# m
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ v# h' p* y) ]7 f
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& h/ ?( F0 E) V+ p4 p1 |
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: v3 ]/ _; o: V. @" u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: l3 C& e: _9 D2 u6 _3 P2 |2 ?
; O6 K5 ]; a+ ?+ y1 n8 s2 W
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. a" Y3 b1 n: }5 d% z1 E: G! M
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 e) x& F) A3 c8 f+ |3 r& E$ p% R; c
mcasp->regs->PFUNC = 0; // All MCASPs
6 ~. c; E L) x0 m6 {2 {& z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# y# u" b' P7 b( L; e+ x/ M1 R
v& S8 w+ ^3 w$ Z% u. k" G5 B i
mcasp->regs->DITCTL = 0x00000000; // Not used
- V! i k9 k& d, m, a mcasp->regs->DLBCTL = 0x00000000; // Not used3 H- {/ j0 D; K) |9 r
mcasp->regs->AMUTE = 0x00000000; // Not used7 m( _: b6 w* O
1 V2 i: V- R4 T& x9 R
/* Starting sections of the McASP*/ q$ |1 k& J" t+ c# T
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + l, o8 @" |) {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 ?' t! M- ^& W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 [2 G: w) o2 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 R" q4 s4 y2 ~6 ^4 o6 S: |% s' g$ ?0 c V
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 [+ ~9 r8 X" d# s; a- [2 O3 f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 C; y P' x& p/ S mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) N5 U* j( p* c' \. X z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: u( H W, c i; j1 O j* B. a; Z8 E
+ g" A, d6 l- d mcasp->regs->XSTAT = 0x0000ffff; 1 G2 B9 I" |' R" b \
mcasp->regs->RSTAT = 0x0000ffff;
( h* r. B& R! N: e& d8 P# {/ ~* E) U0 g* k8 r6 r' F
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 p4 x* u% A* m4 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 F$ N6 e& g0 {) `6 X mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 l e" l0 v7 y- r% O! u. l; r, G& i7 d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 S- x: w- y# w! J9 e' V9 M
5 O- m" Y: M" [ /* Write a 0, so that no underrun occurs after releasing the state machine */
- [: v. s, f5 q, b mcasp->regs->XBUF5 = 0;
- [% s! B3 Q* ^0 N" r5 R mcasp->regs->RBUF0 = 0;
3 T# \) R7 }+ u9 L" W% \' Y& L- X2 J" u8 p6 ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + @2 [- N G, } J R* u$ |( z1 [9 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 b" Z1 O2 w; C! ^6 R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& r7 f$ t s5 j; u# u( f2 C! Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% Z+ }6 K% P) U: z: N* A: r- Q! A; p, _9 Q& h- l! |
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: t# k+ Q$ w5 ~( H5 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 c3 e( N& T5 u4 V) n4 T
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
u$ K9 f9 J) s4 c0 e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 T f; x/ e O% l9 r/ \4 y& ]
. ]' M# [8 u, D6 a' | s CSR = 0x0000;
* Y1 `9 E/ u$ c7 L INTC_INTMUX1 = 0x3d;5 x( k, R( w" u$ Q1 s' u i
ISTP = (unsigned int)vectors;# X! _' L) {7 O3 W$ ?
ICR = 0xFFF0;
! j0 N5 }5 Y& s! P IER |= 0x12; 4 Y7 [ n" t# L& X& T+ o
CSR |= 0x01;
. M' t/ R7 f. y" ?, o2 E, Z2 O/ X# O* G$ I1 a# g8 x) M
3 u" f: h) i7 `) i5 ?& L( }1 @0 j4 j# p
还有就是两个输入输出函数:
5 G7 C9 L8 F R7 c/ t8 Ivoid output_sample(Int32 out_data)
. s0 {# V; _, K$ J5 u5 ^{4 R* k# e! x' ~
AIC31_data.uint = out_data;
" |. T5 B/ S1 M5 F" @ @! r MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 u5 ]" u+ R C( b}6 A( ^! n, H9 u. n
2 P& ~8 @) R# ]+ ]6 }, i9 r& A: sInt32 input_sample(void)2 q4 D( x6 E) Y. |, n4 j, ~! n
{ ' c8 F5 E7 L) }$ G; X @# o
AIC31_data.uint = MCASP1_RBUF0_32BIT;0 i: E9 Z# ?4 D. @0 \) F0 J
return (AIC31_data.uint);) E9 |- ~5 q1 S% i1 V
}
; @- b) R( l3 {% Q
; z3 m( a$ R, E& \& e; p: p |
|