|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 T2 X- u5 j& _7 c+ j5 `2 P6 {2 ~! Vmain文件:
& s2 r- X9 i% c7 Q/ kinterrupt void interrupt4(void) 0 e0 K3 R O; c D+ Q# U
{
/ Q# X5 `( K* c0 n Uint32 sample;( i! l) @5 t! x
& I8 a8 u9 e" [% z
sample = input_sample(); // read L + R samples from ADC
3 f- H6 E2 j; M, R+ H' c) f output_sample(sample); // write L + R samples to DAC
, V, O" x4 k1 A6 ]2 k& g return;
& ]2 f! I& V9 @. f$ c}
9 w2 N8 R% K. @) b+ O J
8 n ~" ^7 v+ Q+ p2 \) cint main( void )1 G) \; h0 o: B* O( `
{
* Y$ }( A b2 {4 J
# f& V) S1 N: U' D. V% p* e /* Initialize BSL */
/ b; a# w+ b$ m; S EVMC6747_init( );: A3 }- M1 s) F1 \# x2 Y# s! }
/* Call evmc6747_intr function */! _* u7 Y T4 {) z+ E- W- n+ `, Z
aic3106_init( );4 J5 W# T: i; \5 J0 g g
while(1);
2 W' I/ y2 X% b* | I/ X}% ~9 \# i" \& f
5 y+ ~/ I9 g5 w# C J& d& `
& B% R" M) G) q+ ?2 Q6 aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ H& X+ _) c* i/* Initialize MCASP1 */* a: A; d( C0 e( S5 r5 _3 O; i1 H* {
mcasp = &MCASP_MODULE_1;
% W' i; }/ T6 w1 u mcasp->regs->GBLCTL = 0; // Reset
+ A8 F; s# U+ @3 l# Z& Z2 A8 i. X% S. ] mcasp->regs->RGBLCTL = 0; // Reset RX
, d/ J2 ?% H8 {4 d; F; L3 I mcasp->regs->XGBLCTL = 0; // Reset TX
7 J# e- D1 i5 |# n, V9 c mcasp->regs->PWRDEMU = 1; // Free-running; B7 l+ y" Y6 G; T9 k1 _0 D- v t& K
// configure McASP0 receive registers: O) a; J: O5 i. t
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
6 @5 n( E6 h, p- n, C D mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 i7 g" b& t/ A( Z1 L( p$ n
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 v2 Y A% A- j* z; X& Y mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! F! `- H0 @; ]# O1 a
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 h% ^* P3 q( |( `+ @$ ?& ~. K mcasp->regs->RTDM = 0x00000003; // Slots 0,10 @; q2 I2 L8 q/ Q, V
mcasp->regs->RINTCTL = 0x00000000; // Not used
8 N7 L; Q5 c: G1 [+ D% f& W/ A; v& a mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! Z O1 N+ p' k: |
8 K. d; c4 p* H" e9 h/ h( I/ H mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used G- `# Q4 w6 K
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 ~& J) R) o& B* O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) `# [+ P4 W7 {8 U U- |8 C mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, r& z. p; a8 Y7 B mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& |5 ]7 }9 n( l3 U% S& q
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 m* a5 L9 j$ p6 g mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, l1 Z% U+ e7 ~& I& ] mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! n9 K% E' K; B) Y9 v4 p3 z) I. j. d
' C. B" D% w1 u, E) {( O mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN8 v8 n( T( f) |; P6 @6 ~
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ k7 r$ d" g! D9 c( G9 | mcasp->regs->PFUNC = 0; // All MCASPs0 H; Z$ w) B! j
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
Y4 R7 h2 j1 i+ x2 y6 P
8 ]. l2 \3 L! E2 F mcasp->regs->DITCTL = 0x00000000; // Not used
, G% e8 L/ f% _; u! J- ~6 B& B mcasp->regs->DLBCTL = 0x00000000; // Not used( \( \, G2 @7 E- m, m
mcasp->regs->AMUTE = 0x00000000; // Not used$ W4 F/ V( D5 |
+ R& o" [* T% J5 Y% Q* D3 u5 y
/* Starting sections of the McASP*/
7 T; U# S" O. `# J6 g1 k& x mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. n- s8 H7 h6 Y# ~9 I4 r$ k4 ~; s$ X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 Q" `) r% a8 ^6 }6 D mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / o9 m G7 N- [9 w. t$ [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ k- m2 N3 X: I; n$ C3 n. {7 \
& O+ R, W U( c7 \% {( s mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' B2 h% |# S5 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 F" S% L8 g" Q
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- F! u4 y- e$ @$ E) F9 a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 E: ]0 e0 I# R8 j" C2 H+ `4 |: ?
; P* ]1 d; ~; P* R mcasp->regs->XSTAT = 0x0000ffff;
. a, b. t0 W# i9 U% G* V mcasp->regs->RSTAT = 0x0000ffff;
- R$ O5 B1 G' ]2 K+ g' d: Z! E% K) n
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ P5 r' z4 K+ ?" S8 ~4 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 z- h8 X8 o$ e; w
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ Q' W; `8 F U1 ~6 a7 L& i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% B/ s; `% ~* K( h5 H8 u* Z; g
C+ G+ @) M9 y) w! h* a: P /* Write a 0, so that no underrun occurs after releasing the state machine */
8 e* k$ E+ X( L5 s* [7 ~! \ mcasp->regs->XBUF5 = 0;7 e5 y# y/ |* A& k( |2 [
mcasp->regs->RBUF0 = 0;
- b8 l8 c' H9 R0 D! A% n
) u) D4 E1 }0 |' B. L' O2 v2 ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; c* L9 ?+ v" I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ H3 H4 V1 C# _* [9 Y! a/ G mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 Z. i% {3 y* C+ f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) n; N* F4 R/ w6 o
% A& S! A" P5 W& z5 ` mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; @9 R3 {/ d5 `# o: V/ _" C+ F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( L2 D# }! A% o2 ?' U mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 _8 M/ r5 w* U' C' _8 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! D8 M4 q0 r8 ~8 b3 f
7 O" E% N( ]# o% [; Q9 c* | CSR = 0x0000;
( }; w0 `* M5 s% ] INTC_INTMUX1 = 0x3d;
7 ?' Y3 k/ L2 I1 L5 V ISTP = (unsigned int)vectors;4 ~ i: v0 m% b8 l
ICR = 0xFFF0; 1 J4 \, {9 t) w! }
IER |= 0x12;
- N* u5 v7 `" k CSR |= 0x01;
- C; g5 {& V; k q$ u) ~4 f1 S' H% ]1 S6 O/ u2 n
, y* k- I8 k7 u! C, C: [, s% D- D+ Z7 Q
, q( |; S5 E7 e% @$ g还有就是两个输入输出函数:
?; x0 g6 ~: _( A- f( ?8 Rvoid output_sample(Int32 out_data)0 d; C3 {7 z, l1 p* [: ~1 X
{( x4 `& w! ?' a# a/ \" \
AIC31_data.uint = out_data; ! \ I7 {/ F1 a. s
MCASP1_XBUF5_32BIT = AIC31_data.uint;2 X0 @: I- A& c! f! O: ~1 t# V
}
* J c) @1 ~1 i, r- q x" X3 [% n# j
Int32 input_sample(void)
) C! K* p$ Q# x- [" U+ u{
3 y o: H* B# L/ f- } AIC31_data.uint = MCASP1_RBUF0_32BIT;
' h* L# P8 R$ \. p7 L1 {% J( v return (AIC31_data.uint);% O7 k9 f2 U7 ~, f0 E0 E
}
9 O4 T& h$ a0 q7 X8 p" {, l( f+ j) G7 k4 A6 k. X4 L2 v( q# H+ `
|
|