|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) p ?6 A0 j2 ^- A2 h/ G, H7 l% X, Hmain文件:. k9 B4 L( y% y$ ^* l; R7 k
interrupt void interrupt4(void) + _% f$ [% K2 g; D& B @( G
{3 T3 Y, ~: y$ r, Q
Uint32 sample;+ k& Q/ _5 @ l2 t% d3 h0 z
( a% S0 Q9 P* M! S( r/ n sample = input_sample(); // read L + R samples from ADC
$ w( e9 c3 M6 [( h output_sample(sample); // write L + R samples to DAC
- h3 k% \: C* ?! N; e; c, J return;
2 ?7 Q. |1 G& d, N. ]7 ]2 l5 ^}
; q* a/ M0 h1 i/ s
9 K. Q. A: {! Bint main( void )7 y2 p4 I- R$ f6 b, |4 M4 T
{1 h4 k- v; H9 [; C( H, g
& C3 E* e5 L' B; o$ o! F9 m /* Initialize BSL */
. y3 I2 \# ^/ u8 R r9 K6 B( G EVMC6747_init( );0 h4 G2 Q( W& a
/* Call evmc6747_intr function */
& S# x U) z, M4 x aic3106_init( );; X7 n. i6 r5 @! t! v
while(1);
2 \8 Z; u) j% H% x: U$ M}
3 ^/ ?9 Y+ x7 g! ~+ X4 h- U
* H* u8 p' V1 E: K# o% {1 g4 S' Z5 W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ f6 m1 B) k8 j/* Initialize MCASP1 */
9 _. ?* X- i8 H- | mcasp = &MCASP_MODULE_1;
; Q( f' C; h; h$ y3 M mcasp->regs->GBLCTL = 0; // Reset
3 `/ |9 z6 V G+ G, Z; p( _+ d p mcasp->regs->RGBLCTL = 0; // Reset RX* @1 K! K" O1 n1 |/ Q
mcasp->regs->XGBLCTL = 0; // Reset TX
+ r+ O- h4 b$ N" s3 S9 G$ @ mcasp->regs->PWRDEMU = 1; // Free-running d+ h( h% L) M2 O; Q3 L1 @# U
// configure McASP0 receive registers, ]5 S2 l) N6 ?+ R9 X" ]; r) f- R
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* a* V3 A2 d+ Z1 ^/ j' L mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( F/ G2 t2 M3 L
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' n4 D- I. w: V, d% H9 q
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! r$ l$ r) v( i
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) P2 s9 n% I5 P$ Q; Z9 z mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. J: f7 z/ n/ ` mcasp->regs->RINTCTL = 0x00000000; // Not used( i( p) H/ s& e9 \
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 P% _& N* q! _. N
& [# t' c; R) T1 E mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% W) ~9 W$ p3 x' D& v4 _
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 y9 a- I) P8 v) R2 D7 o
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 k$ K0 F9 I, T2 p
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, \/ ]& [3 W1 O. C b
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- w" u% z2 E$ n
mcasp->regs->XTDM = 0x00000003; // Slots 0,1: S% Z. T( ?$ u- d$ H- ~8 i
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: c0 h' r. A6 q) H) K
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 y9 w" x3 K' B/ v
) o, f! I; Q4 k# p
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* e( |2 `# r* M) {, M; E4 g
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 Z% Z/ V, i6 M" n% r R4 Z8 C mcasp->regs->PFUNC = 0; // All MCASPs
, w% @/ [& A$ k$ Z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* ^) z2 [6 O+ e0 Y6 A! e7 |1 O
) F& f; b( s6 l7 _ mcasp->regs->DITCTL = 0x00000000; // Not used8 ~+ C' }6 \. M3 B
mcasp->regs->DLBCTL = 0x00000000; // Not used( d. m4 s, a1 e8 S
mcasp->regs->AMUTE = 0x00000000; // Not used+ C/ D9 M2 f1 ~1 Y
% R0 C6 B* I) l' @ U2 s
/* Starting sections of the McASP*/
. x$ j6 K4 \; g- r mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. Y& p6 f, f7 b; W% r& g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); y0 A8 C* b2 _6 {
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # N) p" E @" _ E* N# T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% d+ U5 G0 o" [% K( g
3 [ f* Y4 M2 Z5 _; O
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 ^- Q9 z- P3 Q4 ~, }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ v) Q9 H; |# y' E4 X mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : M9 s0 m( \* t4 o/ u( h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 c1 V+ |1 k+ @* S: v. I3 O+ P9 }5 T( X/ y
mcasp->regs->XSTAT = 0x0000ffff; , z7 w- A: r8 }" ^$ n/ x- k# F
mcasp->regs->RSTAT = 0x0000ffff; Q5 g6 q3 s+ ~) r
1 K/ l3 {6 N( S mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 n5 j! j# ~( p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 O7 |; k, D4 R mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & p, y; N, X/ R8 N' l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 G" s( d" K2 ^4 F; F n
5 T) ~6 t% m" l5 {; `+ B3 u
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 e# s* _7 j0 w mcasp->regs->XBUF5 = 0;
; \% z& U. C( n mcasp->regs->RBUF0 = 0;
! ^# i' I5 c8 i9 {
5 ^" n' \9 d1 X# S/ Y4 r mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 i8 w$ Z+ I' e$ a' _" U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 M/ z! o+ l3 E5 Z% e mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 Y8 f9 `4 J f1 k2 c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 u) g% E- ^- W, {
$ r: ^9 O! `% l$ `2 G& F9 \ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' `9 s+ k' @* O" C" N3 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- \! p) A/ N! v* q) V+ w, l
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 K- M: [1 ?/ x5 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ A- G% e( h$ [1 n: M
+ C: Q W1 s/ e& c% A: A CSR = 0x0000;
- [( ^3 k/ O& F7 ~ INTC_INTMUX1 = 0x3d;
6 I; _3 i( e3 u' R; ] ISTP = (unsigned int)vectors;
. z( d' _- G+ r0 L- G) Z ICR = 0xFFF0; : ?- }/ E: ?7 u6 A4 o8 o0 h: h0 Q# l9 B
IER |= 0x12; + X; K: C% Q" E8 L: n2 A
CSR |= 0x01; " Z6 J3 Q4 O; w2 m" r
3 W* p; f6 r, W, E2 d" l0 C+ A& l) N- }$ z% A+ s+ U
^. X @$ @7 X1 q' X还有就是两个输入输出函数:
5 R5 D2 O! P! o( mvoid output_sample(Int32 out_data)! R; z9 z) w l/ N6 Y$ i9 c$ Y
{" u4 \' [# a% k- m+ W
AIC31_data.uint = out_data; " s; H9 X! ~& X
MCASP1_XBUF5_32BIT = AIC31_data.uint;3 l% F: t# n) t7 f/ r/ }8 ~
}2 ]2 I- o1 g. @; |8 i, x- P2 @
9 z4 f7 s! W3 M6 x1 }9 N7 B/ |Int32 input_sample(void). }% |4 `5 C& b& h( B
{ 8 i Z( v) u, ] v1 ^* K6 X: x
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. h8 ^: d/ O+ ?( }4 ~3 j return (AIC31_data.uint);
( H* j8 S7 B# w2 V6 @}) W% t& K# a s+ v7 j' {+ m
1 G6 X0 u) d2 K: H. a
|
|