|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: {! F% b' f# r+ [9 v% w& z1 L
main文件:) g ?* e) Q8 q- w3 C9 [: @
interrupt void interrupt4(void) * Q$ h+ g$ v/ @3 V
{
" R6 k6 ] Y% T. x! E' i& a/ l' b Uint32 sample;
, \4 N2 Z* h1 x4 F
4 L* {( B5 z7 F& _2 F2 B sample = input_sample(); // read L + R samples from ADC2 X$ Y: S6 `3 i A! V- F
output_sample(sample); // write L + R samples to DAC
" V. `7 Q" |; d, j& ? return;5 C& K: M7 q! B! j- C; v7 y
}
4 _! P* f, R4 u$ _! o. P5 P% e4 u9 ^/ o. t) W8 B9 _/ q9 L- O g M
int main( void )/ ^; j% V8 l6 k% p% n- y5 w
{
+ P+ j. r4 z0 a/ K4 U2 `
3 f- _9 e& t7 t5 f) t/ O/ S. I /* Initialize BSL */
# y7 z1 z4 o2 x# q EVMC6747_init( );$ S( ^2 c, |, Q
/* Call evmc6747_intr function */; T; K# W# U' R9 E# M" G" R4 U
aic3106_init( );
/ f7 O2 d1 U7 E7 S( ] while(1);
% N' I! T5 T! } v5 T}
# z2 X6 Q5 B# K* O2 ]! s5 p. P" a; J% s2 J# G: w7 r
, A( W7 W* i0 m2 ~' ~( x) ~0 waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" E: T3 d: m. ^" d! p
/* Initialize MCASP1 */' i- E! V e { ^7 x3 k
mcasp = &MCASP_MODULE_1;2 [3 a& q+ }' y& D+ Y
mcasp->regs->GBLCTL = 0; // Reset1 E9 K2 ]" A+ ?- K
mcasp->regs->RGBLCTL = 0; // Reset RX
0 y4 v+ r7 U2 T* T9 b. w4 v mcasp->regs->XGBLCTL = 0; // Reset TX0 B: e4 w& [' @0 a2 E
mcasp->regs->PWRDEMU = 1; // Free-running4 x& m# w+ z1 E0 S& M% N* w
// configure McASP0 receive registers4 U) x5 Z4 q- Q* e: x
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, X2 i+ [# ?, z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 H# Y5 g! E; X$ P* [4 }3 } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% P& F( w$ k, C( M: R1 v
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). i ?# L% F- p8 N: F' w
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 l3 J) t4 P* O$ l! V
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* G2 k' R5 s O& b mcasp->regs->RINTCTL = 0x00000000; // Not used
( |0 r) a7 s5 m+ o1 D$ M3 P2 [1 i mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 @, C t" K3 p
: r6 ~; G! G: q2 ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
! c) ?- S9 ?4 i# q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; n" m0 l- w' }% }
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 O9 O: [# u4 ~: _; ]. d5 Q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 [2 i8 ]/ i% g; R) o2 v
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: [1 J2 A! W5 m8 Y6 l- G9 F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
3 i% o& X ~, C mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( l, L: Q- S w3 P1 |) h mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
R @ }) y: k- p x# C5 E3 W2 p6 O' m8 n$ F/ h) g
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 R9 L4 x: p& t' U2 E6 [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
$ V4 k4 s8 i" D4 f& k) d7 G& P mcasp->regs->PFUNC = 0; // All MCASPs
4 K( @* Y {& N7 t mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 e; T% L5 ~/ d+ m# E' H
) B! e2 ]- G. T* {+ H e
mcasp->regs->DITCTL = 0x00000000; // Not used
2 _9 C" o$ q# P1 h( w) A2 H mcasp->regs->DLBCTL = 0x00000000; // Not used
" a* D* Z$ w. ]; m/ f" I mcasp->regs->AMUTE = 0x00000000; // Not used4 f0 u* H3 r& O% g
: i# S+ K% h; Q
/* Starting sections of the McASP*/
! m' }6 m* I: {# s mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 W$ C- M. Z$ E% } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 g2 k D1 ^' O ] mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; H& Y" W8 M5 x. g7 Q1 p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# Y7 P9 S, f$ ^3 p+ i) }0 J
' I3 b% f. J; t1 d# D1 I" R( r mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 |5 u" c- F& ]3 o) O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% l/ s; w5 Y. h: |0 m mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# w* n; y; v, @1 S+ q0 p# a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! ]' l1 R- A- N; H* ]1 n
5 c; Y) z$ n D1 d# e! c mcasp->regs->XSTAT = 0x0000ffff;
+ _$ H) ]; b$ N' Q mcasp->regs->RSTAT = 0x0000ffff;
5 V$ g: \6 A/ |
~+ X9 S9 t2 `; _ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, A3 h+ F* _* n0 p9 X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% y- v7 @3 z7 Y+ Y- F
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 g% A% Q6 ^/ q- ~1 v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ I5 S1 r6 {9 B0 d) A9 J! E4 n0 z' a* `6 M0 j- \
/* Write a 0, so that no underrun occurs after releasing the state machine */
6 O. k- g1 |$ i% V mcasp->regs->XBUF5 = 0;
" _7 F/ v& I. q9 P# d& T% G mcasp->regs->RBUF0 = 0;
6 F; Y" y a5 I2 i2 @! N6 q4 B$ F2 [& q- I! |7 C! b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' u3 t, ^2 a: [1 v! W2 } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 z% p& Q5 M3 B8 C- M0 e: `% h4 T$ p: n
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& n! t. M% P, O: c$ n+ [+ L, E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" m9 s8 k- T, g) X
& n; l- {& z1 t( p7 I% G mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 m6 e- y4 o J6 p! D/ T3 e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' @- O% i6 Q0 S6 v4 p mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 n+ h& }% e6 C$ r- x- m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ G6 ~( [6 C" O/ V: W& I3 }: M- c. f3 K- h+ i1 w( J
CSR = 0x0000;3 O8 n1 j& y8 Y: t0 @+ s
INTC_INTMUX1 = 0x3d;; u8 K/ T, Y; X, H! R, q Q: L5 b
ISTP = (unsigned int)vectors;, E( R4 v$ f8 ], s4 q. t) l
ICR = 0xFFF0;
% x) M5 r, _9 Y IER |= 0x12; , s/ p5 l5 `7 e# C! h+ C- w
CSR |= 0x01;
8 ^3 b/ Z1 j9 V" J$ ]. J( T* L
/ j& i- I% S- t; S' o3 j! L C6 W* A* W" ~0 ^& Z" u
2 e U! I! \2 Q; c) {- c
还有就是两个输入输出函数:
8 M4 L/ I) @! P! evoid output_sample(Int32 out_data)( n, y$ Y I/ f7 r# L/ C) U9 T
{
: X% J7 ^& M {3 {# O4 R# ? AIC31_data.uint = out_data; 7 F* p- I& I- u, H/ e
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ W u4 d/ j$ D8 Q4 S$ F8 |# m
}
4 ~1 h e4 S. n# t3 k( N2 r! r- |, u$ e( }9 [! ]8 v" y. @, u& l
Int32 input_sample(void)
- M5 e$ k" d3 }: d `{
* b) ]0 q4 h4 U" \ AIC31_data.uint = MCASP1_RBUF0_32BIT;+ j# c4 e3 f4 \, @1 B
return (AIC31_data.uint); }# r9 _+ @; V, s0 }) N V+ Y
}
- {5 F8 {- Z; K: w2 `& g! B+ \
! N- q0 ^) }# a; g+ e5 Y5 t8 Z- ? |
|