|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 r" Y' W4 {; N y* @1 {main文件:
7 w8 A- Z; B4 u8 ginterrupt void interrupt4(void) 6 P$ }5 v6 H- p
{
+ x5 z, S/ e# y8 \7 Z) [ Uint32 sample;) e4 h8 S. F* N4 y4 x
7 Z1 N6 t9 d5 e" u/ u4 {" n6 f sample = input_sample(); // read L + R samples from ADC
' _$ d; `4 R1 I7 W/ V f" u output_sample(sample); // write L + R samples to DAC
2 k- ]0 J: [( E* q$ Y, n return;
, X' n s' t4 Y) n2 o& F3 F}4 e3 g, l# N, x; B" g# D8 S* i$ X
: v; J o# c) P3 Jint main( void )1 _. w& E3 V% R$ N# |
{
; M1 k, A4 C+ t% D# T
1 _! T& O& |; L: W# u /* Initialize BSL */
4 J4 g# H' ^& I3 K8 e. V7 { EVMC6747_init( );; `% G3 o! T2 `9 `; ]" l
/* Call evmc6747_intr function */
1 ~- k" V1 A- q aic3106_init( );- ~7 c% e {6 o4 o- j
while(1);: l g: q. I" O2 u! Y1 g! m8 ~
}
$ ~- Y- p! H, Y9 n! T& \$ Q% G! E5 R' [, H. l
$ ~( _7 U4 y! qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 C' i' D3 r- _/ x/* Initialize MCASP1 */
/ A N6 X2 S2 m% v$ B) P1 p! U9 ` mcasp = &MCASP_MODULE_1;
2 |1 L; [; E8 } c ~ mcasp->regs->GBLCTL = 0; // Reset2 }. h) a+ e& G# @- O
mcasp->regs->RGBLCTL = 0; // Reset RX" }0 P# k9 I7 u# v) ^ k7 W
mcasp->regs->XGBLCTL = 0; // Reset TX
1 k- z" H% N7 F. H mcasp->regs->PWRDEMU = 1; // Free-running/ s' O/ Y% s. x6 L! H: k3 g
// configure McASP0 receive registers; G5 p. f8 e' v* S4 E! r# T
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 I5 h( R* A0 G' C
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- _! d0 l# o) y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 V! X3 e' D2 k; c" q5 K
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! w- j5 w0 y4 _3 w4 f" x' X mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- i& w4 Y( O2 `" |- j3 E. h mcasp->regs->RTDM = 0x00000003; // Slots 0,1: b1 n' c& O e. g; x7 @
mcasp->regs->RINTCTL = 0x00000000; // Not used- b% ^- A7 N9 G9 s
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ s5 A( x9 n/ J- Q" q5 A! G3 O; x7 r" B
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 ^# F5 U, Z- Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( e; I0 E5 X9 M: P
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 |0 j# [# G+ X5 c/ v+ g; I4 u `6 w
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 J5 r) w7 T: O# u mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: A R' f) L6 A/ E
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
# \7 r2 x) ~3 o% S8 m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ i, m* O( {3 Z8 K. h
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 [. k! M8 J+ T6 X5 s0 \/ O
4 E& d1 B0 `' m0 D" A7 _' b& S& ?
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 [2 y9 A# q2 `" I
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! J# t7 D7 f" s( _ mcasp->regs->PFUNC = 0; // All MCASPs
" h6 ]5 @5 d) u& \4 _4 Z* x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! R# A5 `! d5 O) g; N! l. X0 f! ^2 x' t2 I* J& y) o8 p5 y
mcasp->regs->DITCTL = 0x00000000; // Not used
- m1 C0 t! R$ w( U/ Z mcasp->regs->DLBCTL = 0x00000000; // Not used
6 ~7 z2 |) [3 c3 ^+ H" u0 v mcasp->regs->AMUTE = 0x00000000; // Not used
- L4 ]0 @- j4 l, ^* q
# F& Y7 j N: j/* Starting sections of the McASP*/" Z8 f/ ], s2 _2 _# U/ p5 e
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 v6 c3 @, j* q. Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ w& X0 c8 m) D9 _, g* w, K8 P
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 v {( J: V9 V. W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ u3 x2 }8 l7 U3 d7 f
7 ~" Y h0 Y u2 S" y& ?6 e: N mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . c' O( _" H9 y' M7 R# k! x) j0 L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( h2 ^1 n6 L! J, z0 Q7 I8 E
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* T$ t) Y" d* g0 A9 U8 U' n7 K7 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 I, }% C z& A9 G( K
& C/ W! l, Q: G$ }/ }6 S
mcasp->regs->XSTAT = 0x0000ffff; 2 j6 ] O: v& P
mcasp->regs->RSTAT = 0x0000ffff; ; z$ l! T5 r4 Y& T+ m/ [- y
7 G* u( F9 H' ]: n' Y& A: d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, r6 v# b5 e; v4 r6 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' i* H+ Y# {- S
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' o$ G# ~. ^. H7 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ C: z) i- ?1 W0 y* m7 D% x7 h2 ?
: }4 e- z6 M$ Q" m( W8 h$ g /* Write a 0, so that no underrun occurs after releasing the state machine */
- {( x6 \0 y- S W* L: T% j! y mcasp->regs->XBUF5 = 0;
4 y6 x5 W" b% k( X) c& p. g mcasp->regs->RBUF0 = 0;, _% X6 @; w5 R! F2 _8 @# c
' u" O$ u7 f+ g) ~& d. K9 c
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; J* \0 o2 F0 ?' L4 [7 X9 y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 q" E$ }, z5 v/ ~& x0 e( K' w. }
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! f* N7 P5 R P7 M; B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- w* h/ j3 I1 A9 Z/ b1 A
, q. K* P3 a5 S& b mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, X5 r0 i% j" Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 l9 g; B& I% A6 l2 q T mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * ]+ H- g( p: E* U& L. }4 U( l0 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( {; i: V% O3 _
9 L! y: a. R- E% y$ G CSR = 0x0000;' i- O+ l5 H$ S2 l+ A0 \
INTC_INTMUX1 = 0x3d;" e" \1 _! E* J1 Y5 u
ISTP = (unsigned int)vectors;
7 B: a V) l6 @: Q/ i ICR = 0xFFF0; . z$ q. e) c7 \
IER |= 0x12; % B! p! ?( g* h- \' g% a' I
CSR |= 0x01;
% A/ \3 Z' Y/ Q' F( q$ l3 T) ]" L. ?
' [, U {/ K5 D5 T9 H [$ v
! n G& u- x" Y* e4 k3 b/ R; M# h还有就是两个输入输出函数:5 K$ n2 \: U, R1 l! M* Z
void output_sample(Int32 out_data); ]! m8 w7 U" m" n
{
; j' T- t ~: x! x/ a+ M AIC31_data.uint = out_data; 2 ^* z' Q/ e3 s) g% Q2 M
MCASP1_XBUF5_32BIT = AIC31_data.uint;
' U9 e ^: m7 x7 u}( Y% M/ D. L, p2 t0 q3 J
2 u$ f' t2 S4 m A4 ~0 q
Int32 input_sample(void)
2 n7 [7 j _5 |3 C{ * i+ }2 S, \* `) u' r- Y
AIC31_data.uint = MCASP1_RBUF0_32BIT; T# [0 N4 s# d5 t2 l" y- Y/ \7 S
return (AIC31_data.uint);
. B3 c8 I+ n6 p8 R# d7 Q}) Y' k9 V9 I. j9 M3 W; m$ c
5 t) c, b6 p+ q8 ^2 Y. `/ e |
|