|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) Z# U( Q/ r- j5 m
main文件:
2 i' n5 i0 s; _/ [4 ^# ]# X+ [4 cinterrupt void interrupt4(void)
- _6 ]4 \! |' m) C& U) J{* J1 w- g7 c+ E- }# D5 D+ j
Uint32 sample;8 A h8 H' {3 p
V, k: K5 b% Q1 u
sample = input_sample(); // read L + R samples from ADC8 \* s7 @( F' X+ u4 I
output_sample(sample); // write L + R samples to DAC 3 S& {1 z# e# q
return;8 E; s4 K$ v6 C" j' c: ?. x: T# W3 u
}$ S. p8 N) O: W g$ `
% S3 n8 g& |( }3 x1 M! M
int main( void )2 b! G" R; g+ v9 e0 ^ H J
{# F J1 T3 y" p1 z! S, A* j, ^1 j
) o2 T. ?( ?& M: S4 a5 |& ?) y$ b /* Initialize BSL */
2 k# Q! A, R' e EVMC6747_init( );
5 g* N" B' A2 v- S8 u' e /* Call evmc6747_intr function */
0 Q9 t4 N- m) `& Z; D aic3106_init( );
% ^; X- B! \6 C' T K8 } while(1);
0 Z0 M+ J5 `3 {8 B}
" X6 K+ S% T4 H }, \% O9 C
3 r0 _: `0 o: c' M# j
7 l! w0 W( }/ E2 z. v9 Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% E. O% y$ Z8 h, ]8 m% f8 `/* Initialize MCASP1 */
# F* q; |, I* [0 V: v* K mcasp = &MCASP_MODULE_1;
! E1 h( K0 {7 N: E+ j mcasp->regs->GBLCTL = 0; // Reset
* ~2 T4 k' {! d( s8 y3 }; L mcasp->regs->RGBLCTL = 0; // Reset RX
* {6 l7 Y+ d6 }8 D9 h1 B mcasp->regs->XGBLCTL = 0; // Reset TX
) y) o3 ~2 z6 a" G mcasp->regs->PWRDEMU = 1; // Free-running
7 I& ?4 y) O4 k, `! B& O# { v // configure McASP0 receive registers/ w7 k7 j* r1 @9 O5 U
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' b5 T5 n: X: S" g mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 T+ W- R& N2 g: `! J; @9 q- \
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* i# ?% O% b' c e$ G
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, Y, F# T* l: w3 h+ M mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 [/ K2 m: n% Q5 [9 h* O mcasp->regs->RTDM = 0x00000003; // Slots 0,12 o4 @$ S, ]$ o* A
mcasp->regs->RINTCTL = 0x00000000; // Not used2 |) h- y2 v& m" I4 J4 e$ @
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 ^; |1 O7 a* p! g
7 z2 i2 ~% a' m1 Y2 I- L) t mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
/ i0 W+ B( u2 a mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- {+ S! P5 s5 X7 U/ t t& j mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% l# w. V6 Y" X$ h7 J7 A8 l mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 H, _8 z, ]5 C, _+ I4 W
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 Z) V; ]7 W) _
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ S5 b/ z! X$ D8 N2 T& q5 P+ ~ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 k7 N# Y& m1 Y% K' z mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 ], J% j) F' a- s4 E( u. y8 H
* b7 x! Y+ C7 ~6 ?% h* n
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. r* G2 D5 ~, d3 L9 a# ~# @: d mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 q' P; d& [. S/ ? mcasp->regs->PFUNC = 0; // All MCASPs
. H" k$ O: [+ N6 n: M2 c5 W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 R9 M7 j" s) C: e
5 c, B' H. k' y6 u8 s
mcasp->regs->DITCTL = 0x00000000; // Not used
2 k+ d4 M) B5 e; S0 v5 v mcasp->regs->DLBCTL = 0x00000000; // Not used+ q) b9 V3 R- b+ r. Q. F: n8 O
mcasp->regs->AMUTE = 0x00000000; // Not used
# n5 s) j! ?% X( a* Q" H! c, j6 ^. L8 u- E- H9 ?6 ? L
/* Starting sections of the McASP*/4 i7 i: T5 w4 ~1 i
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' ^% a1 D# l1 z3 ^ h& f: e+ z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % M; p$ j: i$ f; O, U& D% Q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # a0 F5 ?$ q9 w& T% j! a9 \ G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% U( a E1 c8 Q% G0 J
( g6 Q$ ?! j O$ ~
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # d* _# U1 M4 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 V$ A' q& b* F1 H$ `1 c! @# h
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. c, N! X/ [: A1 h. x" [; J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# C/ d4 u/ a; [) X8 p5 P8 g
3 L2 J" b. O' C+ | mcasp->regs->XSTAT = 0x0000ffff; 2 X- c3 G. D& H, K ~3 g
mcasp->regs->RSTAT = 0x0000ffff; 3 T4 D0 r9 D' j" s; n1 Z4 Z% K4 h& c
- l8 z% e) C3 k+ f% ? mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ T- z w9 K! O& _1 T9 S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. ^; p+ G. Z/ \8 x! N% c mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 k7 A: c- h& `- F3 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ }' U v! j- c. n; W g( E5 E
4 A K2 j8 r# m* j7 e* _/ c' [) g
/* Write a 0, so that no underrun occurs after releasing the state machine */0 |2 @0 s' N* S4 h, v
mcasp->regs->XBUF5 = 0;
1 H! R. }: ?1 q6 w& \ mcasp->regs->RBUF0 = 0;
0 T# \. k1 T- y; n
4 Z7 g. g% b! H& C' B$ M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # k( o. k' ^: D; v0 U/ H8 y4 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( i* C8 C$ P* m
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( L8 L" K) C+ |' k7 Z. u3 N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ e$ R) ~- h$ Z! ?5 L% O3 E! `" G; f) Y% U5 `" O5 E5 C( k& j0 w H9 D! Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' G( p8 i# c8 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); a8 N8 L9 t3 b
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . @7 e, H5 T7 z' _. z- |3 U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( V- ^# I2 \+ f& @4 A1 n2 g7 z
+ O% O: i& P8 x3 ?# e4 _* b CSR = 0x0000;9 |2 R& ]5 J4 s$ T# k8 P2 ]$ P) E
INTC_INTMUX1 = 0x3d;% P( Q1 F6 d0 t, l+ C$ V
ISTP = (unsigned int)vectors;
; O# h, T8 Q4 B7 \2 N& A/ q! p1 U ICR = 0xFFF0; / F; U8 I+ [4 B5 B* [7 k6 k
IER |= 0x12; G* e/ W) ]1 k5 n4 o1 y7 g
CSR |= 0x01;
' B3 E) v2 V2 {( M
) B: V9 _$ j3 L; Q5 b3 W$ V( C. I# S) b6 [* t$ I" X" R
; {% [9 M h' ~0 {' k6 R; L
还有就是两个输入输出函数:
+ K9 a( j+ d! tvoid output_sample(Int32 out_data)
$ ~3 E7 ]& {0 Y" D' {9 M" L/ \{
1 \$ {* f+ `; e7 k4 M AIC31_data.uint = out_data;
3 F! U' k' \: z+ b V# s MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 n% E+ W0 Z. {}9 H K0 d% E0 t/ j" D
; g' ?% j0 D/ wInt32 input_sample(void)# I1 N2 a1 }( N1 b ^; r2 K3 |
{
# q9 [% S, h6 R W0 F/ L AIC31_data.uint = MCASP1_RBUF0_32BIT;6 c/ a' m @" M# @2 b
return (AIC31_data.uint);+ G9 _5 S$ u; n7 Q7 C& h9 k
}
& n" ]3 U/ s0 V' o4 `: T5 _) E+ i8 y ?% ^6 P
|
|