|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 t& J% b$ p7 P' j
main文件:/ ?. H( h2 ~# |2 F) ?1 a
interrupt void interrupt4(void)
) e$ d' }$ c$ R0 F7 _4 n{
- t3 H5 W7 `3 T% P! d$ t: ?! j Uint32 sample;1 Z; r/ o( A# L
# N0 C6 V* T: u/ L
sample = input_sample(); // read L + R samples from ADC
9 ^ L5 k v, c$ R; M output_sample(sample); // write L + R samples to DAC
' \6 M- Z# L2 n) y0 k! M return;
5 _- s: V2 {% I, d}
) P3 b- q% a5 `. T5 x. W+ M! K7 b7 s& `
int main( void )
. F* E8 [9 [& X{
+ o# M* w/ C B' R8 X* h0 H& B6 v* k! ~* g; U0 A
/* Initialize BSL */
$ u* D. \( S+ x+ N1 g1 o! J EVMC6747_init( );$ R& s2 K! y2 d3 y4 u! j2 X
/* Call evmc6747_intr function *// r$ V9 c2 s' Q. Z' I7 H# @
aic3106_init( );3 c; m! p; D+ I9 M: B
while(1);" T4 {% o! T! J; L( I" s+ |
}7 K3 @( n# w# }9 U
/ l& }1 z( k/ d6 ~7 B) ]
9 w2 V" [* ^ `' a/ a" s; _& Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 C- `, {0 m& Z$ S$ b2 r/* Initialize MCASP1 */
$ m: o, L" R8 `9 x3 l! ]" H mcasp = &MCASP_MODULE_1;2 _9 n* w0 m4 p# G, I* [
mcasp->regs->GBLCTL = 0; // Reset+ W' Q b' z( }/ N
mcasp->regs->RGBLCTL = 0; // Reset RX
" _: x, s! f/ ?5 C. | mcasp->regs->XGBLCTL = 0; // Reset TX
! a! e7 k6 p' F3 ?* f6 e0 _# x i mcasp->regs->PWRDEMU = 1; // Free-running: H+ P; _# E$ q8 [3 V3 ^
// configure McASP0 receive registers
- A a1 q2 i, G7 u" |% G, i6 N" C mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( h8 E8 C5 ?0 ^" {! K; A: M mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 x9 M, e- X& W mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 \. Y* `# @! ^: d$ v! V mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 M: J$ Z# x5 g# M6 D mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
! W6 Q0 E& H# v$ s. m& s' E mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ s, _0 v% K1 l$ c8 f; a2 w mcasp->regs->RINTCTL = 0x00000000; // Not used6 ~) k6 |% M" F& S. N
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 O4 [* K6 J5 H9 C; ~: \# X+ o$ V$ j* \( M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
! R$ J, Y1 x7 W7 o6 d$ Y8 _ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 `( E1 b2 f/ q3 u1 i/ E- T mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ x* q! A5 U" ?) u9 N4 `" M( U
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) d/ `7 J9 h% V% u. {& _' B8 } u
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* M8 F; u8 Q2 R3 T: E0 L& _ mcasp->regs->XTDM = 0x00000003; // Slots 0,1. X4 O0 Z% N/ M7 c
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit( J/ S, z F, g( L; f% H% S8 ]3 m
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 F/ o* J% {) P, L& R; O
6 N1 O# E% @5 t: n
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 M7 n5 h9 U1 K! ?3 N mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 T& C+ q8 s4 P+ E
mcasp->regs->PFUNC = 0; // All MCASPs/ C$ a$ q" G3 A& Q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 {! ~- U+ |. F9 m
, l( P+ I+ b# g: `( y& E1 L mcasp->regs->DITCTL = 0x00000000; // Not used$ S, ~3 O# b8 w
mcasp->regs->DLBCTL = 0x00000000; // Not used2 G. h# \9 S( O0 W& y3 q* Z3 h. s
mcasp->regs->AMUTE = 0x00000000; // Not used
3 F3 S% h* N8 g9 h' C
0 E2 _) N" t8 m# d9 C% C! j/* Starting sections of the McASP*/
7 u Y/ I3 P; `; z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ }' G: G3 X5 ]+ Z& M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); s* ]* ?! {2 s7 H* |* K: F
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 ^& X9 `% Y' e8 Y" @- E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 p$ g, q' L, @" ~7 E# J
$ u1 z, z, ?+ X( p1 u1 b mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 U$ _4 i. _" h7 ?) I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( r& A+ N3 P c( O; {8 g mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ v* H( o- w- \3 r) l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ ^* u9 V8 N+ H' f3 _ _1 D' }: I" m* `- J5 _
mcasp->regs->XSTAT = 0x0000ffff;
6 R5 D$ y$ [! i9 E1 L B mcasp->regs->RSTAT = 0x0000ffff;
1 V* F: `& k: k6 L; x0 a6 m- G/ B& R) P* `# `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ F6 F* e6 A* Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% N$ r1 u: f( {' u$ R5 G
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ h6 ~ Y$ \4 @* G b8 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
`5 a9 E+ K2 ^) W& |" d" e# G" ^- K4 W! l1 B( M, B% E! Y( {
/* Write a 0, so that no underrun occurs after releasing the state machine *// z: o. R. Z6 U8 L: ^% G
mcasp->regs->XBUF5 = 0;# J. t6 J" j7 k, N) z
mcasp->regs->RBUF0 = 0;7 \# O8 L* t; y
4 G4 w) U1 v4 m$ U8 r1 R
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) Y1 c+ W7 k; S" Z8 k; n% t% G3 U4 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 o4 ?7 o# c% F5 g8 b
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 y# H# `% ?/ X- i6 f! {) j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 [4 ?# S+ U# r" |- x9 f! j9 c! z% ~; \1 N4 A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 S8 R) G) f4 _# l( l9 Q- ^" C8 ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# G8 W2 c6 `4 z0 s. K( q5 F% H
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# G$ n- ^$ i) ^- b3 L; a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ j: J6 J4 R* V8 @* i7 s1 [. I7 C
; h0 N8 B* L5 y p ]3 \3 i. q CSR = 0x0000;' f# s+ I; L+ U4 w' ^
INTC_INTMUX1 = 0x3d;
3 y% \1 f5 A. T+ `( T" H* d: H ISTP = (unsigned int)vectors;
# @" f0 v# I$ j ICR = 0xFFF0; " K' O8 c* m+ w4 L+ B0 t
IER |= 0x12;
3 E! o. M U. {! w CSR |= 0x01;
1 A4 T8 G7 G4 _
5 p+ O" p1 T* {7 g0 b0 R) a9 j0 P$ H" n3 s! S. x, p) P
( |: h. i0 ~ F, m* B还有就是两个输入输出函数:& q" F& A- C$ O2 f# m" ]1 M2 X
void output_sample(Int32 out_data); j% ?) r% b6 u$ J
{
+ |* B9 G) t; f' P" Z8 Z3 O- W AIC31_data.uint = out_data; 7 e$ P' t0 ?# {8 d
MCASP1_XBUF5_32BIT = AIC31_data.uint;, G% ~8 C! s: K& [
}
8 M7 P7 R* q9 a' o. Q7 S. }' R" ?' C
Int32 input_sample(void)
; {. G8 t$ \8 P{ 6 m; Q1 h0 d! y2 y+ ]$ x+ ^
AIC31_data.uint = MCASP1_RBUF0_32BIT;
- t4 m% C* g _7 } return (AIC31_data.uint);6 m9 ?# H; ]# g/ A, n$ }5 t
}$ V: v/ N+ A- A) H
2 _ d: T6 p1 ~, v, m1 Z
|
|