|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
n! [ B# w/ l/ v2 j2 j+ M1 {/ y1 wmain文件:
& @( ?- S8 X1 D: U8 L! q% z5 Hinterrupt void interrupt4(void) , Z2 v5 P: K4 }& q1 [# I1 H
{
8 w+ O. G$ y% R Uint32 sample;. g/ t, L5 P. R" k: W
& ?+ E! p* d2 a }
sample = input_sample(); // read L + R samples from ADC
3 |2 x- O6 y. A output_sample(sample); // write L + R samples to DAC : A H- v& B5 A2 z" o
return;. Z" g/ l' o- j2 \& l/ z( B" p
}; w' b( n i- Y9 j, H' B/ n
' k2 J8 p. ]! }
int main( void )
0 g3 |" n. w6 \3 A{
+ i. a, e$ J% ?8 f# N# c& t
2 V7 {$ o8 [* e( q6 ^ /* Initialize BSL */7 ~9 K6 z! ^9 J, u5 m
EVMC6747_init( );
2 M5 X1 D# i5 [: ], @* b /* Call evmc6747_intr function */
6 O' I' W! e" A; T6 S1 o Q aic3106_init( );
, ?0 U- U* C! w4 C8 s- n5 H while(1);
3 k5 C0 [) u* z; b& X! p& s}
6 u- Z5 q% c# Q/ D% ~
( c! g4 P- V8 J9 z/ g5 y" W/ i4 u! S* h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 i% b6 F }: q& B1 a2 B7 g/* Initialize MCASP1 */
( m; t- ?7 H; g" h8 ]- D/ p+ V- Q mcasp = &MCASP_MODULE_1;
+ f% @/ w& k1 r5 m( i+ s mcasp->regs->GBLCTL = 0; // Reset' L/ r* ?+ h1 l) G
mcasp->regs->RGBLCTL = 0; // Reset RX n2 r' O- E0 V4 _; _/ s7 O. c, G( S
mcasp->regs->XGBLCTL = 0; // Reset TX
/ c6 L/ D' f# e0 b8 n mcasp->regs->PWRDEMU = 1; // Free-running
5 U) Q2 j, V1 z, H' r- S$ b // configure McASP0 receive registers8 u: P" `' l) l3 p4 J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' w. x% K: T$ T6 m/ k7 ? mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& [4 ~9 v5 j9 O M8 s4 Y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 U& z9 s! ]- @. l( R6 v; U mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); s! k$ w% |8 d( Q! b& e! g
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
; A l. }5 q) \+ c4 P- U; X+ C mcasp->regs->RTDM = 0x00000003; // Slots 0,1& Q. z# d @( O* Z
mcasp->regs->RINTCTL = 0x00000000; // Not used
0 f; R- q# e- `) N( ` mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 I" G' Q) e" _* l& _3 \. D( r
$ I: m- ^6 i4 a
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 T$ @: t; D7 m4 u5 N* B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 W' c. r8 I3 K2 j, T
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& n2 e f2 d4 c+ ^0 M
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 v4 V, L _2 M1 J
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 g i% B# G: G% m8 M9 @ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
4 e5 B8 Z$ _5 R4 W: s& ~' ^' V. } mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! |; Z" a. m, d: \6 n
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ a7 Q# ]8 a4 C7 t2 t
- s% x$ N- ^: `4 z7 ?* h mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" C3 K% i! v1 s6 d4 x6 k
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 Z% B3 X2 p- z mcasp->regs->PFUNC = 0; // All MCASPs
; g* C$ S' V- \( \9 R0 `: I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' Y' R8 {4 X' \: t8 G) `- u- {: q* j. Z2 g1 q
mcasp->regs->DITCTL = 0x00000000; // Not used1 S1 m; S" S$ X# p6 S! \7 M2 S7 o. _$ h
mcasp->regs->DLBCTL = 0x00000000; // Not used0 f; [$ w X" Z
mcasp->regs->AMUTE = 0x00000000; // Not used
$ p, V) q% F$ m$ g) v3 S9 d2 u3 ~7 D7 J$ h; K
/* Starting sections of the McASP*// y& c+ u7 a8 j# b
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
K% `, B4 @6 y/ k* G9 a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" Q+ n+ v9 g/ p# k5 j- w mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 S% h7 X/ f) O/ U) N$ x1 z5 N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 d$ O* }6 s3 F3 c0 o+ K: y
4 G+ a4 _7 L+ e$ G# {% @ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ A) r9 ^1 h' Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' e3 a- z' ]& J# t' k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # F. O q: w7 t, C+ B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 h/ \7 ]( I; {+ C: S; O; h/ a5 \8 k8 X; Z8 Q
mcasp->regs->XSTAT = 0x0000ffff; $ z' \0 @/ y5 v! a3 }& ~
mcasp->regs->RSTAT = 0x0000ffff; 9 }8 h8 T! S( F' U o1 n! V) O
/ u; d3 x" {. W$ G7 @3 V! N
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 `3 @0 O7 m/ U4 A2 t5 a1 w' ]$ d& P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" X/ p0 v: H/ g- W# @% ` mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 a- u4 Y- m2 h7 G: a" s9 K5 I! z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) J0 y$ o9 k% r& o0 k* p
8 g2 ~( X; @- B$ M1 z3 `# a, [
/* Write a 0, so that no underrun occurs after releasing the state machine */
7 W4 O" E& j! ^5 W mcasp->regs->XBUF5 = 0;
/ D0 E+ Q+ a+ C- N mcasp->regs->RBUF0 = 0;, d! { \- j: w( d- Z: Y: J
5 q- k* K: s" \! w9 b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 z" O& J4 {% _' K, ]8 J/ d$ b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 Q* f3 z2 E" U# V7 P, q8 J5 }& W mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . J7 C0 l y7 t8 ~* \4 Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( ^+ _2 i4 \7 P3 a; s( \; j/ T6 R% l( x5 m2 I- C
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * l' l7 E. z! v! q! O. H! Q: L0 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' i" K9 b) W* o- R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 N; b" R. X6 M9 m* I) O! ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& I6 A. E* o1 r$ B9 F, Y0 J& ?
; r; s5 q1 ^& q$ g CSR = 0x0000;/ m$ n2 _$ ?6 X& ?
INTC_INTMUX1 = 0x3d;; W1 E8 }+ E- ?/ J6 f- t4 T
ISTP = (unsigned int)vectors;
4 h* \* u: B$ N4 J* ? ICR = 0xFFF0; ; m+ T; Q: @# f/ x m
IER |= 0x12; 9 b1 s- J% z" e5 V
CSR |= 0x01; 3 t7 W* c# c4 \7 F
+ Z, \ R+ O, {6 F
& ?: t$ @& }9 l5 S x
& x! O4 ?0 k% I# W* k0 _5 A! P还有就是两个输入输出函数:2 q' {9 H% ^0 M) s2 q( }4 `
void output_sample(Int32 out_data)
! T7 V( G9 o& H{- x1 S$ w5 j' R. O# T- f) l1 p
AIC31_data.uint = out_data; 1 A0 Y! s9 N/ @2 A0 t
MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 c; Z2 c% A b2 J" _9 Q0 X" e" P}% t$ g, u5 F) ?# H
/ B. Z1 u9 J6 h( \# D3 a0 L5 [Int32 input_sample(void)
2 G7 B+ R4 ], ?: c{
- G" O, U3 K& N5 X; w2 G9 Z AIC31_data.uint = MCASP1_RBUF0_32BIT;
: ~) O/ P0 q" D/ m o return (AIC31_data.uint);! u' W G3 E3 D) j
}
( [ h- y' D5 y: U: p6 ^- l+ p" k- t& s8 w8 \! Q$ |) Z0 |
|
|