|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" t: @; D+ t" ]! Q8 ~+ E! n. l) m
main文件:6 y; _+ ^% H; V* v Q0 j. G. b+ \. ]
interrupt void interrupt4(void)
, ?4 C1 r; s- h( t: j v- f% [1 n/ ~! X{) x- ~( u U3 E# f" n: e
Uint32 sample;
1 G9 n2 |0 K: p" w; G
, U, R/ l% q8 p" J- c* d4 ?2 V sample = input_sample(); // read L + R samples from ADC) g9 x' ]- X" |' v
output_sample(sample); // write L + R samples to DAC
; H( M2 R4 L9 S% J: ? return;6 O/ J6 g- b+ p. j, X T
}
0 l' m4 q0 j# a- J' ]# }/ Y2 I! X( p' Z
int main( void )/ C- Y$ W. v1 s9 d
{( p2 o( |/ U' L# G
: K {# ~, o) W" L8 V5 Z3 i' @ /* Initialize BSL *// F6 F5 ^3 I$ k4 {" x
EVMC6747_init( );+ ?; D" S3 [$ v& ~3 k! W
/* Call evmc6747_intr function */
8 E' q2 O9 h, [ aic3106_init( );
# c, f+ o, k/ \7 j7 d3 d while(1);
" }3 ?# s* e5 i}
+ d' S; T; B+ y0 ?% g
- w7 R: K9 G% z n( O4 U, g( @5 B Z( T4 e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. Y8 X4 Z B e) Q4 D& Q
/* Initialize MCASP1 */" g6 I C+ v) k/ Y% _) }( V
mcasp = &MCASP_MODULE_1;; O* F/ q; n4 B5 y( g' u
mcasp->regs->GBLCTL = 0; // Reset' f9 o% Q8 ^& N0 N' r$ \& |& E
mcasp->regs->RGBLCTL = 0; // Reset RX
% g7 K4 o7 u' B& [9 y$ v" M mcasp->regs->XGBLCTL = 0; // Reset TX R: m% F' A+ h+ R/ K
mcasp->regs->PWRDEMU = 1; // Free-running7 Z4 q; G. b: z! m' E1 d
// configure McASP0 receive registers
7 s) n Z1 I k- l* @/ C [! P mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) Z2 b$ q- A4 [# N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 X! n# x1 A; n$ Q w( e5 r mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) `& ]$ f( A% i% i) P) V
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* n) p9 q- A+ `6 D
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& Z- |# F2 \5 T V$ b
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ q# S7 B2 K: u6 F Q# d$ c' d: M
mcasp->regs->RINTCTL = 0x00000000; // Not used
) S- q: k6 ^) P1 L' o H: B7 j mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 x2 g7 o9 k2 L7 w: y5 ~% i K0 d7 j7 U6 m1 A
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( z- g7 {3 u/ v$ Q4 J1 L$ y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 o: J+ Z% z. G. K6 R/ J& O; F
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; p+ s- Y/ b. H* u2 v5 F$ Y2 U9 C% k$ G
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 l3 N3 [$ o4 a/ r mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, H2 D# d. ~0 ]" q+ ]( ], H! K' V5 E mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, v8 i$ q& k0 m4 G7 z; X) n0 {1 o mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 Z& x: P/ K: q: I M9 q% L& b5 @
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 Y( x( @- n d! r3 E
* C5 v/ N! y/ T2 z) B$ [ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 }( u; \; f+ d( ?
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 T& G6 ?' ?9 D4 o mcasp->regs->PFUNC = 0; // All MCASPs
+ Y# t+ o/ o* S/ ^ J0 U. R! p mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 w7 g" @* a1 j1 _ M# N+ i; s0 I* E- x" p ]! j
mcasp->regs->DITCTL = 0x00000000; // Not used5 U% r. P" \6 b+ n, o9 }$ N" b
mcasp->regs->DLBCTL = 0x00000000; // Not used( [/ ~; g' c3 Q/ p: e
mcasp->regs->AMUTE = 0x00000000; // Not used
* s4 N" ]9 _: \8 G2 \
; v% `+ J# z$ B* Y# ^ s1 u/ W. H/* Starting sections of the McASP*/& q. e: x2 K4 j8 }( H% |. J$ W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 o8 N& R3 g% K2 x; g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . j9 s* H( x: B c' O7 J5 b8 j
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . s. R* ?% b* g$ M8 ]. [1 P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ F8 Z. S% R( d2 B3 u b: W/ l8 _$ o! [
8 ]. m8 M, Y5 O4 c% l mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ [4 p4 c! n# z! r9 ~1 S( z7 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 A/ V9 J f! r) W- I
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% {6 d" x- j+ a& T2 ^' p6 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 E( K: h) n: @$ N k; ]! J
5 L4 d7 t, T: g# W& k; n" k mcasp->regs->XSTAT = 0x0000ffff; ; ^9 E7 D- u! w4 i( x% B; K2 n* w% i
mcasp->regs->RSTAT = 0x0000ffff; 9 ~/ T- y* r" ]- @
' u5 u% T2 x0 V) H2 U* V7 t" j! |
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 y0 N j' X6 _# G! @7 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ N+ q+ }0 H! N mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * }( i* w& k$ K/ `$ G, A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 g. W9 L0 {2 U# W* E' B# F4 e4 Y0 k
/* Write a 0, so that no underrun occurs after releasing the state machine */
0 |; `% T9 m" z, \% ? mcasp->regs->XBUF5 = 0;( ]) c1 B$ p* `! I" ^
mcasp->regs->RBUF0 = 0;
$ y' l1 ]: p6 B) `2 q. t8 T1 A
) b: r4 h3 V9 {% J. Q3 D mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ V; `& v1 |/ ?9 e# ~5 z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& P0 r2 J/ M" p8 r2 L mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# Q+ x) V# k" A- O0 V/ Z! D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- S8 ^. N" T- v0 W' x7 u u
* \0 w# U8 v. @5 z) W mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 i, g" U8 w, S( \5 n0 b6 D9 V" A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 R: c4 n' @$ Z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% A% z5 {) L: B# r0 n4 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& c4 z7 Z! |6 `* d0 w! s3 I* [' C5 S5 W# _& v
CSR = 0x0000;
/ `5 X0 r: Z+ U$ |% v, t4 t& L7 J INTC_INTMUX1 = 0x3d;
2 e/ k/ \" v" i# V ISTP = (unsigned int)vectors;
^% B# n3 `8 `# C! z4 e+ o ICR = 0xFFF0;
' p1 D% ^: C; b( k& H IER |= 0x12;
1 y" R5 G( i' H$ S) u CSR |= 0x01;
* B, s+ s/ d7 v4 B9 Z3 W$ K; k5 _$ Y/ i) g8 W
0 P' O, ?5 m$ k8 P4 j' u5 v1 e
, h8 W0 X- ~" {7 ^: x7 F还有就是两个输入输出函数:
- H- ?& o# j1 u. a; T. Avoid output_sample(Int32 out_data)
7 {" P3 ], I T V& k, w{/ K! |, S: [0 l, s
AIC31_data.uint = out_data; 3 j1 z5 w1 T. E% Q1 z& N4 B
MCASP1_XBUF5_32BIT = AIC31_data.uint;
- V; B4 }& V$ g3 Q- K}/ b# {8 d7 K% n" m6 B8 H
H( E/ [' k" [: Q% Q5 M
Int32 input_sample(void)" i& L& R% R/ D& }, x& H
{
- c, {* a; n; L: e$ |4 C3 {/ C4 x% o AIC31_data.uint = MCASP1_RBUF0_32BIT;
* j8 N& D2 i, N0 }, c6 B7 y a return (AIC31_data.uint);
' q Z. m; d' q8 K}$ L V0 r) n, l
$ K6 d; l$ u3 }, V8 f
|
|