|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* m3 a) o0 B9 |/ p( z. |9 Q
main文件:
O i* \+ |# c/ H& ~6 ~$ xinterrupt void interrupt4(void)
% M7 r$ A6 {$ o8 s+ P2 Y1 J{1 G& O2 e- A) Y+ ]" \7 i! h% ?
Uint32 sample;
' S# N8 F3 P' ]# g+ G, n; g& X# l+ L- V3 _4 R* l1 o& Z T
sample = input_sample(); // read L + R samples from ADC
) `# I/ S! \/ u4 l, e2 K% T" {+ i output_sample(sample); // write L + R samples to DAC 4 X2 R+ c1 f: n- K$ P; e
return;
2 }) n' o9 Y7 u6 c}$ [; R( L* K$ S" C" o" |/ f; e
4 I C0 M1 @# y! Z& wint main( void )- j: g. ^/ n, l* G) w
{: w3 r3 b* B8 M! ?; G# {
! a' o/ ]; p9 K8 Y) ] /* Initialize BSL */
\5 q9 M; E9 L. C3 h9 Q EVMC6747_init( );
7 x0 K7 @& r D: I/ I$ U* t /* Call evmc6747_intr function */% z. G4 p- M- Q6 p
aic3106_init( );
" W8 s: z# Q4 ? while(1);/ P3 n+ L B0 M8 K; r" J
}
$ R0 M2 f' {* c5 ~+ p
/ l$ C& t& e3 Z- O% ]
. e! M, Q$ H' y2 L( a9 @* Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% m! L; q# Y* [# Y+ `/* Initialize MCASP1 */
' O& d1 f9 B0 a+ n$ Y5 {' L mcasp = &MCASP_MODULE_1;. e5 T2 r+ Z( t) o& f g# x
mcasp->regs->GBLCTL = 0; // Reset
7 y2 \4 }* I+ Y mcasp->regs->RGBLCTL = 0; // Reset RX; z! [, `2 m8 k# _! J* N4 e m/ x
mcasp->regs->XGBLCTL = 0; // Reset TX, Y" [+ K3 q" q: a# o
mcasp->regs->PWRDEMU = 1; // Free-running! d+ A, Y0 Y, T" {0 ]
// configure McASP0 receive registers0 s9 E" ?1 s, v: v6 K& A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: c! Z) V: `/ I. F7 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% k3 b8 }& a# D' k8 P ^' [& A: C+ i mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 ]- ` B9 y) ]+ o& i
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) t1 L' }2 k l0 z, c+ l7 t1 o; d) c mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
: ]' ]6 [2 {3 f9 F9 i% a" s" [ mcasp->regs->RTDM = 0x00000003; // Slots 0,18 `( j6 N' x# Z# ?5 ]4 n0 v
mcasp->regs->RINTCTL = 0x00000000; // Not used) P) z# M( [; F( ^8 u
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( D7 c5 }8 ^6 t) l5 D% m. h3 D- X) w1 P- O1 C2 v+ O; q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. j3 @1 @5 s3 _4 j! b) G" } mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! t+ E2 X* p# r7 @: t: Y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 \! z4 B5 G* r& i
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ ?/ S- F) {' G4 N+ {( T
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 F5 p4 U0 j$ O2 b
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& Z3 t8 ?* j$ @9 @9 D" m
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
$ \! u' h- Q5 G- U9 E9 V6 {8 C mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ A6 z& Z1 ~; o
* X# J! z7 B. \& L* s* ^6 l mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. u: m3 |$ g8 h3 T, e8 q# l& z0 q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 _2 K0 o, k, W ]. F1 A9 s8 u
mcasp->regs->PFUNC = 0; // All MCASPs
; d4 T; P$ B: l7 y5 a, [ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: h7 K2 U+ K* W5 g# t/ i
( V# z$ U1 M. f5 C mcasp->regs->DITCTL = 0x00000000; // Not used
# E* l: G- b9 z+ q mcasp->regs->DLBCTL = 0x00000000; // Not used% O% R! y* C8 x( i+ X
mcasp->regs->AMUTE = 0x00000000; // Not used8 ~% p6 H; r+ R1 v; C0 q# }
, k6 G; t5 ]. g; r: R- J) h
/* Starting sections of the McASP*/% }8 u4 |$ U u# ? r
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! |, ?! I# s7 M7 G& j9 V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , v+ Z3 y' Q" r( n# Q; B
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& X1 n: Q/ z. I" a( E. K( p# c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, s9 ^0 z3 R/ J; [" U h% ~
8 u/ [. B5 E6 F8 L2 n) K mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! f$ k& O3 E9 `3 g% J) E$ A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. T. ]" I& v( n% N0 k* i! w
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 `* f! o# G0 ]+ M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( Y3 _ W' B7 O+ m# x' {# J' R7 u7 a5 g5 Z. z/ |
mcasp->regs->XSTAT = 0x0000ffff; / J2 x0 \, y$ u
mcasp->regs->RSTAT = 0x0000ffff; ' I$ X0 h1 R# B+ N
, S+ s* ?, u% b0 P9 T6 Z
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ S) Q/ G9 H9 F1 h! T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 u! U; L9 K- H! n# m l \ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 b& Z! k" Y: J0 g8 J5 o" ]% E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! `! n, H( Z5 R* x6 ^# c8 N- z
# T6 C% b# _6 K! r/ `" t /* Write a 0, so that no underrun occurs after releasing the state machine */; h# l# x# O! ?
mcasp->regs->XBUF5 = 0;
2 J3 n' U: z( \* O) i5 v, y& [ mcasp->regs->RBUF0 = 0;
) A5 U' E/ r- a
) V9 D( N, z3 D" e; g mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# Y$ k r7 z" E/ z* x- R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- D( K+ S7 x: h# U
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - H- |. F& }4 o8 o) {8 }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 P1 m# z/ f9 k y- c! {8 K6 \
, q( |+ }3 O: D, g5 l9 S" j n) _ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) `$ L" U- M- j, ?% N2 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* X% b5 [0 M8 |% B3 r) K
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ D! v& i; I0 H; w) w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' H5 }5 v5 a4 g5 p+ {/ K/ P+ Q# i. [/ w8 v o8 t
CSR = 0x0000;! s3 E6 c N [, S$ w9 J5 O
INTC_INTMUX1 = 0x3d;
& Q9 Q+ f9 Q# W: N# z4 S/ i ISTP = (unsigned int)vectors;/ o; R; x7 ~( d
ICR = 0xFFF0; 4 e* j% I1 ]/ Z1 N! h
IER |= 0x12;
; n" Q/ R& _6 P9 y, O. W% a CSR |= 0x01;
, \; {* Y* L4 b2 }+ H; c
3 b* g; p. p) z9 b. \" C. V* m' ~5 A
; [# q; j T c# R" A还有就是两个输入输出函数:
; j6 r3 y) |1 k, Cvoid output_sample(Int32 out_data)- j( A6 R; F! L, [9 x
{
7 M9 Y ` Y0 w: J AIC31_data.uint = out_data; 7 j9 }- Y" C# N- Q! l5 _8 V
MCASP1_XBUF5_32BIT = AIC31_data.uint; x& t5 q/ _, G6 W
}1 i0 d. p- { I
' o: ?. Z' t: d4 T7 B( jInt32 input_sample(void)5 V% T; g3 v3 U, d: f$ p5 I! B; ~
{
* ~+ f3 j, K: n8 j, @$ | AIC31_data.uint = MCASP1_RBUF0_32BIT;; @! f$ |2 o6 J' _2 _
return (AIC31_data.uint);
8 r5 j! R+ I* h}
. w/ P% |! U1 |
- Q( V. S! e/ T! l6 G |
|