|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 _" \" M" L2 k9 Q: c
main文件:
; K- G9 y: j/ g& n; J& u& A# kinterrupt void interrupt4(void) u$ k2 `* n, S+ ?( i2 }- W
{
! p1 E' O) S) ~: \& R Uint32 sample;) p( Y# {4 e5 d/ W) \- L
4 o1 p: ~6 S9 y4 K7 T, {
sample = input_sample(); // read L + R samples from ADC
' ] v/ _9 q% H; C; ?! f output_sample(sample); // write L + R samples to DAC
( {4 x4 Q# U: a7 f0 v5 O+ r+ y; I return;
! S2 E/ ^: k5 |+ r% @}1 k; A' D* g+ W5 k/ L0 o3 b- Z
4 f |5 O$ X0 F P7 K" Qint main( void )/ `( D' t8 ]/ r2 I! O
{5 `8 ]3 P5 G- w$ o' N8 `- s
# L7 Q! T( \' p i /* Initialize BSL */% K! Z( U R/ ~" a. Y7 F+ a7 ?3 {
EVMC6747_init( );$ e$ }9 p* e1 Q, e$ t+ C# C
/* Call evmc6747_intr function */
/ l( k6 s: h. {% E& M aic3106_init( );9 m4 Q B. O; h% V, n7 |
while(1);! E* z! P( ^2 A0 `7 T
}! F1 q6 h* Y6 F% \- F
+ ?; Y. k' R3 L& H& M
. B: Q- [8 f8 Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 d' K1 g1 `( U% U( \
/* Initialize MCASP1 */' G) l8 C6 R: P( H4 z4 T3 R7 M( ~
mcasp = &MCASP_MODULE_1;
, E' C- G- ?4 P! U- Q mcasp->regs->GBLCTL = 0; // Reset$ I K6 M5 G$ s2 G
mcasp->regs->RGBLCTL = 0; // Reset RX+ T3 v! t5 x+ Z, ~$ l
mcasp->regs->XGBLCTL = 0; // Reset TX2 N' R* l; E& d
mcasp->regs->PWRDEMU = 1; // Free-running2 r* O) q$ ^8 i$ |- O5 @$ Z
// configure McASP0 receive registers
. m$ L9 l& R7 H, K7 z- ` mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
l9 C) h/ e9 s mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: l& g% a! p4 e5 }; z- }
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 h# l ?/ i( C2 u1 p. G
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% W# r3 H: [. j0 m7 D
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" g: K* M0 b* x% J! |: a mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ T* e9 q, y8 z0 W; s/ A2 ? mcasp->regs->RINTCTL = 0x00000000; // Not used/ C) i3 q0 a% ~; I s
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 l6 [ q1 W2 L" g1 h+ u' g
) a* G! C& v3 a2 z: X1 U% q- D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# I* ~7 ]# r* `( T& s7 ]0 _ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 k# B1 l6 a4 p0 q) p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 Z. V6 }) U1 _7 ~- C- d0 N5 B8 ? mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# J2 F: F3 [* C. F6 t0 k: d1 a mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" r; x8 _7 W5 c' o/ L, D
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
# u7 Z0 A' E- c& x8 x7 o mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: V# D& b h" q/ P2 e/ E; R. ]$ s( {
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 n+ }0 \# E/ r( E ]& s
9 k# m5 _" k( F8 Q2 {1 G
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ \7 H9 b/ Z+ R( b mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
" s1 I3 ^) Q ?0 ~ mcasp->regs->PFUNC = 0; // All MCASPs
, X3 ~3 W/ R* o5 ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! g4 z( O8 J! {
6 r% m1 g4 m: [; y# A
mcasp->regs->DITCTL = 0x00000000; // Not used+ T' e1 Z' _( `
mcasp->regs->DLBCTL = 0x00000000; // Not used$ ^, @# T" j3 I
mcasp->regs->AMUTE = 0x00000000; // Not used% y2 B$ I2 K- K9 u
$ Z- e l6 O4 I: Y! N% i/* Starting sections of the McASP*/
; l! r+ ~8 K) k. k& |2 }* z# H mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 y5 P% x( _8 E2 Z- D" U R' _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 M0 D! h- `0 b7 M/ T# j9 m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 W6 }+ |/ O# D4 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( {. v/ E7 w( F) U M6 n( z
2 n9 H! T- q& R mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 O9 w5 z: N& g- A$ I( J! V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ M) w8 r7 G( \8 j3 q" g6 H; T
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ ~& V7 \# J( N. G( m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ X3 l7 c- l. L& J% N- ?. N5 ]; J; b, o* B+ a2 p
mcasp->regs->XSTAT = 0x0000ffff; % L1 v, O; e! i! y
mcasp->regs->RSTAT = 0x0000ffff; 2 x! G% j$ P0 W7 s) h9 U
) p* n- {( f5 o3 ]! O# v0 }; z8 P mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( f/ W8 a' K$ K h) e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ~, e6 P& [0 J# c mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 t' N8 o+ {1 J) w# N$ r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 ~5 N. p/ g* d. `% E; Z: F4 B4 n+ k3 _' M) R' M; E5 \
/* Write a 0, so that no underrun occurs after releasing the state machine */% a$ E" X/ r8 s* Z& k
mcasp->regs->XBUF5 = 0;
& z# b/ J& J, U) ]+ z$ J ^' x mcasp->regs->RBUF0 = 0;' c" x {8 y3 R# Q0 j% |& h
: a3 G3 G& a+ E5 r
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ @ f+ |6 s: d9 ?% X+ a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; C c$ l( e$ R% m( ~! F mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 j) A: ?& |5 a0 J- ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# x5 C$ f. @' `+ E$ S- h5 l- y2 |0 f H+ c
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ {8 r" P2 q! @' F! x* r! o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 f" h) _; C+ s- @% I1 L mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* _3 u9 w3 n; R) _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% L. n8 i5 s: P( [+ U5 \6 ]
1 Y' Y" m Q* S; B# F& } CSR = 0x0000;6 _! V0 z9 r) U- [& q
INTC_INTMUX1 = 0x3d;8 Q# a/ V Z' m
ISTP = (unsigned int)vectors;
, n9 a7 \4 g/ L0 M/ H, w& ~1 D ICR = 0xFFF0;
& R& i' u5 X- I1 b9 q* E% g IER |= 0x12;
5 l* V; q: q( e CSR |= 0x01;
3 i9 [" x1 a- o" s2 G2 |, O; A# E6 k- i
. i6 y1 @- g4 j+ ]2 a( s& D
6 w0 N, l3 H$ T" C) p
还有就是两个输入输出函数: |' H4 |0 V& l0 d3 B; B5 t! S1 W7 J
void output_sample(Int32 out_data)
$ ^8 N! x7 q- a{
+ S" h- J; J2 }3 l! m AIC31_data.uint = out_data; / l. A$ {; n: t7 k# e, A
MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 R; H/ Z4 e4 {, \1 w; c}0 C1 \) V% u- \" R: @# Z4 C
! }5 O" Q; {: \! U* J8 B( ?Int32 input_sample(void)6 i* b9 K- G% u5 D: R- E
{ - o% s% k2 G) ^3 o! S; y! f( Q
AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ r% V4 e8 b" _- F' ? return (AIC31_data.uint);
2 _8 ^4 {0 j; {! R6 u}- k! m) K. z3 k1 h- G' g% [
1 X$ ^, v" S4 G2 S/ ~7 i |
|