|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: r# u0 h2 T! C8 h; Z" o. }
main文件:0 O/ G V) O/ S
interrupt void interrupt4(void)
! B5 F; f9 G- L- K/ W5 U1 w{. Y2 T' W: |; E: s' W$ h. P4 W9 _
Uint32 sample;9 u. n# C- O9 k: l& u* |8 U
$ R4 o- m% c8 D1 J T4 y
sample = input_sample(); // read L + R samples from ADC5 S1 }( A( f3 p' b) y' C- y/ f
output_sample(sample); // write L + R samples to DAC " x: k1 a. j: w$ e+ ~; \
return;6 i# \- s& ]: b4 }$ H9 o* d6 m
}
; J2 U: G( s* \+ Q. ]1 q' S8 V5 s7 j0 I( z8 Q
int main( void ); }2 l2 p9 ^" O3 x
{
/ W2 f& E& n2 k
, S R6 m3 _' Z8 h Y /* Initialize BSL *// v# k$ K& J# r! ~, {: K6 Z
EVMC6747_init( );! }$ }8 q9 n, J7 Z, ~' S* y3 y
/* Call evmc6747_intr function */
) D8 w* ^0 J% P aic3106_init( );$ m' S1 A) Y; {+ u7 t
while(1);3 I6 M& @! ^7 i3 B
}
8 `: Z; ? T- x& K2 \! X5 y+ m! _& U {3 ]5 E( F
7 R4 U; }" Y% ?0 u0 B; X9 Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 X7 A( [# _/ H: M0 c8 K ^: m; f
/* Initialize MCASP1 */, ?; h' n- R. ?5 G- ]
mcasp = &MCASP_MODULE_1;
' {" |! G5 R i& v+ j0 Y1 S# u mcasp->regs->GBLCTL = 0; // Reset
3 R& x% X& a0 B mcasp->regs->RGBLCTL = 0; // Reset RX
, W _& u" u4 E# q7 P E- N. y mcasp->regs->XGBLCTL = 0; // Reset TX) G' u' @- t8 \6 v n- A; ?2 H" ]8 N
mcasp->regs->PWRDEMU = 1; // Free-running: Q/ M" ?" l* b4 J' w9 Y# M& S
// configure McASP0 receive registers. }0 I# ?9 [) I" ^4 j8 W8 h$ L2 D4 P
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% a$ B5 C+ I* z
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
?, `) O' \+ n8 X$ {2 p8 _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: g: y' B- B) ^/ u6 Z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; B& B' L5 i2 R- S0 l' @4 j mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side); U v1 l- F' p6 ?0 [
mcasp->regs->RTDM = 0x00000003; // Slots 0,1, w3 p% U5 t5 S: |# K- p" F
mcasp->regs->RINTCTL = 0x00000000; // Not used% C) w4 d! e3 ?& ?% j: Z6 q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 p( {4 S# H8 c
7 M+ k& C/ ~ `, M! _ o mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* k% D% W6 m7 w% m9 R* h mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! ]4 X F; c$ w1 k: p7 x2 W mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( @$ w0 V2 y" l4 u
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 `/ m. R }6 L: e( I: B0 L M
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' ?, ]4 Q1 P! a' G) z1 v mcasp->regs->XTDM = 0x00000003; // Slots 0,10 n c7 d: \" w) [
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( i, B* @- |7 }( X mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 b* Z* ?( t; p E/ T
" H$ r1 x: e* {( O" L6 E* ]& Y" G
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 P& ^ [6 O+ L
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ U% ?0 A' } T+ U$ g( a7 Q
mcasp->regs->PFUNC = 0; // All MCASPs- X* l; T9 P' o$ z
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* d; Z S, A( s" }; d
' [% A' j) |' }; X' X
mcasp->regs->DITCTL = 0x00000000; // Not used
3 T3 \2 g1 o1 F; X" I# J" q mcasp->regs->DLBCTL = 0x00000000; // Not used0 s& q% }8 @4 ]) G& [% f/ Y9 r
mcasp->regs->AMUTE = 0x00000000; // Not used. i1 |2 W8 `, b0 ~( T
$ Q- v7 H! y4 @7 Q: u, K/* Starting sections of the McASP*/7 {/ |. l7 e& P
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - q$ n( B/ ?& Y/ K; O% \& y1 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; @7 N- M' ~3 i% z8 y
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * u1 O& h) K$ w; W8 M* z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 }5 @$ g' R' I% J7 p ]
+ c/ X2 }/ j- F% e3 m/ n mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! }/ E- N8 K( \% w# r6 S' O! o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& Z; Q! ~ c! F9 C' B mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ Q4 h$ F: A: @8 i& w5 W5 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 ]4 Z! L; M! d9 W6 p! e, |
4 |. q" ~' u7 [* b/ X$ |! T mcasp->regs->XSTAT = 0x0000ffff; 5 s! E/ P4 _) U# l1 Q0 W, m" M7 h9 C
mcasp->regs->RSTAT = 0x0000ffff;
! U5 V- Q0 a u4 }1 P: l
$ b% w2 A$ A6 ~' h9 ~# p mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; x8 g5 Z( l% h3 y0 Z0 Z# v3 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 l. Z; T6 e2 f
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 S! O. S* l+ @, }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 X7 J0 G4 j# B, ~, K
+ ] D/ Q) ]* Y" f$ v
/* Write a 0, so that no underrun occurs after releasing the state machine */" n4 l" O% w9 |
mcasp->regs->XBUF5 = 0;
! ]* v" Y9 f. U6 B! I g& F mcasp->regs->RBUF0 = 0;: t3 ]7 z5 w1 T8 t k% c
6 l0 `8 C1 w/ o7 ]! X3 W mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% ?& `$ x3 [, S+ b8 V( H% y6 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& t& O# g4 l7 t! N mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 i& |6 y* l9 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" b8 _& w0 N# _3 p& D/ S' d: j# _( D% X* J: Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 Y* D$ d8 ]& Z% D5 @3 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; F: p t2 `; [1 s' w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # [1 u5 P; a* _# ]% V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 o# _: ?8 o! D
- X# `( t+ z0 t5 b/ F
CSR = 0x0000;
6 T4 a1 i9 `$ |4 s5 f INTC_INTMUX1 = 0x3d;; o) Q. D2 x( L2 O( v% V& |
ISTP = (unsigned int)vectors;+ r6 E& \3 z8 f4 G( S9 T9 ^) F
ICR = 0xFFF0; 6 q! _) P5 w( x
IER |= 0x12; 8 x% V; t/ _' F( t
CSR |= 0x01; 3 J) H& G( D: u+ ^4 K' G
9 }5 f4 K: O0 N* \ c+ [3 E7 R b! h4 k' G2 _
: g1 T8 u- ^# Y9 d4 {" j0 ` @8 P
还有就是两个输入输出函数:2 N- L+ n* }) ]' z
void output_sample(Int32 out_data)7 g2 a. o, B8 g7 j
{
, e& `! Y; _. {9 n3 p AIC31_data.uint = out_data;
0 X+ l7 A/ e4 ~8 N: p MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ E0 E# k$ i, y}
+ {5 i# c; G3 `7 {1 d1 P' D) G0 |2 V5 o
Int32 input_sample(void)
! ^! n) C* D; ~; ^& q* O9 K$ ~{ . M" P7 B+ e6 y2 o
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. `+ m& y( t+ T6 n6 r1 p1 G' L1 @ return (AIC31_data.uint);
9 Y9 \) s3 h M$ U* i' U# ^}1 s- }9 i. ?# d; e3 [
9 M- s1 f# S/ f. Y# h
|
|