|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:- E" w) j1 x: U3 z' V, [& m
main文件:/ Y1 X' n7 ]0 w/ a
interrupt void interrupt4(void) : x6 ]6 F3 Z( R
{
' f) V- S6 q7 G# d Uint32 sample;$ k2 e! T7 X5 A8 _& C
! r+ Z# o1 J v
sample = input_sample(); // read L + R samples from ADC
% ?6 X. L" ^$ H2 |7 f) q output_sample(sample); // write L + R samples to DAC # q l/ i1 u" @$ f7 k* t
return;
8 S' T) j$ {& c+ R/ \" ]5 Q [: m2 B}
, w/ _; u- G; N) I; Q3 B4 P; p! k
int main( void )
2 }" ~6 J9 @$ J9 M1 l2 y0 W{( v/ y9 |( c' k) T, v) i1 q
1 z0 k5 v9 N4 o ~! f5 l
/* Initialize BSL */
( k: I) L5 r# ~; i- U" c8 Z EVMC6747_init( );
- Y9 o9 w; W) x' D' D# W /* Call evmc6747_intr function */
. s6 ]+ ^, d7 @1 L- M aic3106_init( );9 k( l7 j+ m3 S" p9 k# C
while(1);
, Y/ a2 K8 g8 I! s8 M) a, H}: U c" a. y: ~2 y& E r1 a% y
" _' V0 i, W! {3 s
q. s+ g! N. k. {' G @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# B8 i1 \' B4 e3 F2 Z
/* Initialize MCASP1 */) I9 l' S) [8 m1 f! t) [& C! ~0 F
mcasp = &MCASP_MODULE_1;
* s: X; E7 \2 l: O" H9 F mcasp->regs->GBLCTL = 0; // Reset4 K/ o( D8 z j j1 ?, J6 L
mcasp->regs->RGBLCTL = 0; // Reset RX _" U6 z7 Z' K
mcasp->regs->XGBLCTL = 0; // Reset TX5 l& y0 f% I7 o$ ]
mcasp->regs->PWRDEMU = 1; // Free-running
- u1 x' X a5 f. e0 `: W" j6 J; L // configure McASP0 receive registers# @# ~% X* R2 @ Y: a5 i5 Y
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& u/ n; c7 p$ f# ?" p6 g* O
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; W" O9 m0 l( j
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* j' b1 I, x5 S3 t6 Y
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 { F" ~9 S% L( c! o
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 d/ N, S' q: E9 A mcasp->regs->RTDM = 0x00000003; // Slots 0,1
! k" ] U% T- _# m% m# n/ v mcasp->regs->RINTCTL = 0x00000000; // Not used" A( L7 A# Z3 A2 z H) m1 m
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, u, G% L% m: j1 t6 P; P, a6 N3 f! G6 i& v; B; @
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 M3 z0 V2 j5 t6 F+ ~, J$ ] mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 C0 n) u' Q( i) J mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% R7 U9 F+ l. ?* R1 z! e5 M mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( E% `8 L6 @, z, M$ I s+ f
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ q# S9 `3 X8 C2 o mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ D9 E0 e+ f0 L- r; Z: H% h
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit* j% v. A, f" d
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 s9 N% `3 N9 P: ^: H
" M$ J# P. u0 r7 ^) V X# J. w mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN8 W3 m5 t6 n% P8 H; d. F9 E+ t: d
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( i! Q0 G0 R0 m0 ]! c, Y
mcasp->regs->PFUNC = 0; // All MCASPs. k Q3 z) [) _' E1 e
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- a, Y9 z3 `9 f" W
* O& `$ H0 K6 \* p' v) g3 B
mcasp->regs->DITCTL = 0x00000000; // Not used1 F) Y) p! e* u- R* T
mcasp->regs->DLBCTL = 0x00000000; // Not used4 {8 w! {) t# L
mcasp->regs->AMUTE = 0x00000000; // Not used; b: t ~* f7 F' W
9 g3 v& q% i# R6 o- k
/* Starting sections of the McASP*/+ f6 N$ ^, a7 B* ?, @
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 v1 J) |( I: o- L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ' o/ U8 b6 z I* |" j' X
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 a7 D1 P' }* o4 @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 d+ J& I) `6 u7 q! q" v
4 F9 ]7 u, J; x' g6 b0 y5 O
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
E' x7 h# S- Y3 V, b' P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 ?* R }. O, Q. f6 M7 m( n mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / ~ f: Q8 r& B2 \, l, L! q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( @, ~% K, t% S+ `4 C& g, N$ y
1 w' X5 F1 o3 O4 J; K/ I0 m% U
mcasp->regs->XSTAT = 0x0000ffff; 5 l' R- a( h/ x5 ^2 }
mcasp->regs->RSTAT = 0x0000ffff;
" z/ |! s) N9 Y) i' G$ K; j( H4 u+ X; {( u: v& Z C0 s
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, D; V( P9 D' Z4 c. P+ P8 y( c+ X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( g `4 o5 }$ L. ]8 K mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 \3 q1 k( M9 ]+ C& d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# M; u/ {+ x. O4 w' r
, P5 c8 i: j6 h$ k( b) E, i /* Write a 0, so that no underrun occurs after releasing the state machine */
! A6 ?. P; _. E" o7 u# \" b* ? mcasp->regs->XBUF5 = 0;0 A t3 L% D* M! L+ n
mcasp->regs->RBUF0 = 0;
! R. g% x4 Q* C" g- b2 x
+ ?- Z6 l9 X2 J2 Y mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, ^6 S n8 U9 z+ u) r' x3 e- t4 Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- G+ H4 d8 w1 o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" V! ^5 |1 s* Q$ M+ H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; B$ `+ q) A, ]$ d/ N. f G& J
0 E! @0 d' F5 @6 K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 y1 g( _7 p) Y/ ]' A; b9 [" i* f& W5 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" w: Q v# J* s9 ~$ W! l& K mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ ]& I3 E2 S. U7 ~4 J( S7 Y0 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, [+ v9 v* j; k6 K+ o* Q! K* m
" x- L; u; r S7 H' E5 z: _
CSR = 0x0000;% A! z. T v5 T1 N8 Q9 s u
INTC_INTMUX1 = 0x3d;4 C# ]" u( f4 R4 A) T
ISTP = (unsigned int)vectors;# ?1 b; o9 _; _4 k6 V D
ICR = 0xFFF0;
, M+ F# A4 i8 ~ IER |= 0x12; ! E1 Q1 D/ {2 z: C. ~
CSR |= 0x01; & P+ N" S5 R8 }1 J* ~
- G/ E( Q6 t( G/ \; q8 [4 Z+ q
R6 ^6 [5 U m$ m
' G6 q6 T8 O; ?4 _还有就是两个输入输出函数:& j/ x5 p! `9 G5 r
void output_sample(Int32 out_data)
! \3 ~2 V0 {" h{$ A6 k9 l( |3 B+ _4 s/ {4 i
AIC31_data.uint = out_data; . R F. m$ s$ r2 N$ S8 s/ e
MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ ]. u6 w: Y: I4 L! g1 u b}
. {- x4 A9 ~% o7 D0 ?7 q( A
$ f* Y; U9 o D" h( RInt32 input_sample(void)
/ E- v: N6 }7 \: Y, Y+ `{
, T \; }( k/ @1 j6 N AIC31_data.uint = MCASP1_RBUF0_32BIT;
" c" q# [5 \' B return (AIC31_data.uint);; i/ h* R: c5 Q. Z
}; i1 P/ P& n4 j' m& c1 q
6 a1 s) u) {5 u9 y( t# G( i$ O |
|