|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ G8 b9 K% e' r& X5 s7 ~main文件:
8 z- J2 w0 A& f) y& U& binterrupt void interrupt4(void) . ?5 T6 \' M& G$ E
{. g) W% d. C8 Y9 a3 O: J8 D
Uint32 sample;$ q5 V6 q" B1 v- v/ r. x
$ l: A K C" @! ~ sample = input_sample(); // read L + R samples from ADC
- O- z: d' J7 E" N7 w output_sample(sample); // write L + R samples to DAC 4 G+ {$ v7 m% B# Z1 a
return;
+ ?+ m/ N3 q8 }" v" j}5 A# X5 T( H( p8 f
: B) c2 y2 y+ v! N$ k4 ?! |! P4 m: @
int main( void )
, l5 [0 K; t: B, h) o{
- I* x" t4 }1 b9 L, T8 w! t0 m7 U/ S% ]1 {, ]
/* Initialize BSL */6 O8 l$ Y) q& M: y% x5 i
EVMC6747_init( );
+ u% T: d; f+ q. e7 g/ J: M7 M /* Call evmc6747_intr function */. }. B& }& e! [$ j
aic3106_init( );* d3 Y9 c# d) N8 H* x4 _9 f
while(1);" l/ a |, P2 t6 k. \9 B$ z( d
}
9 D+ i* ?- j! w3 z3 x# ^. V/ q4 }1 h2 p1 Y. H% [7 C
0 S. n- \$ ]: B& z7 P7 {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ `8 ^* i0 Q5 Q! e) Y2 v/* Initialize MCASP1 */9 Q: j! g: b! [# W7 B5 B
mcasp = &MCASP_MODULE_1;
1 p8 B. h8 v9 v2 a; V1 ?; }; N( G1 | mcasp->regs->GBLCTL = 0; // Reset* O& x; W2 @3 Y5 q' s% h
mcasp->regs->RGBLCTL = 0; // Reset RX
* L4 s6 U0 d2 {- p) r; r2 t4 P mcasp->regs->XGBLCTL = 0; // Reset TX9 H0 h7 v! q: ?( y7 B9 O
mcasp->regs->PWRDEMU = 1; // Free-running
; I2 Y$ N8 [8 u // configure McASP0 receive registers: I# w* @$ L" Y& @9 Z
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* B! C, g' X+ t% j% q7 k mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" p0 F$ n( C+ R( f% H
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& B; [4 D% V* D; v& }8 D
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ U: R g/ d% s; E
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 s/ h# M' {/ X5 Y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
! o7 ?& N+ w: w5 p4 k6 M% Y+ O5 _' U mcasp->regs->RINTCTL = 0x00000000; // Not used
& q8 y/ {4 g2 V' z- h- c mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 [1 c( a1 C3 I5 D0 T
2 r5 D; x9 G `2 N) D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
! j9 ?, w) x# a; G mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ n V5 R: A/ j6 ^
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 H! i/ G2 f0 [" I1 ^ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ g& `9 K) W# r' H
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ X7 h2 X) y) ~% Y mcasp->regs->XTDM = 0x00000003; // Slots 0,17 B9 B% j6 p1 g- N4 p% X, ^
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 c7 M; D+ j& E; {. j mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* z5 B* C' V3 o. y7 M9 ^+ B
% r* q3 r \! r3 e+ R+ ] mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 P( G4 Y6 b1 Y U+ E) T- [
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
U! @! q. w& |7 ~, P mcasp->regs->PFUNC = 0; // All MCASPs
" o0 `& C. \7 p* A8 i, e l mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ c( b+ e3 d9 Y* }1 B) o$ b$ U0 M' u- w" ^! q
mcasp->regs->DITCTL = 0x00000000; // Not used3 A" A$ }' v" H& s( d( U
mcasp->regs->DLBCTL = 0x00000000; // Not used$ ~6 f m( @4 A/ d4 o) J! r4 p$ a1 q
mcasp->regs->AMUTE = 0x00000000; // Not used5 s7 {- Y7 C! w q/ u0 Z, U
0 O* C/ K$ o4 A( o" U" Z
/* Starting sections of the McASP*/% c# J1 u# ^% b7 d7 Z# Y% D
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ G4 Z, g2 u9 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 F" z' {9 w) X$ q3 H7 c; L2 h7 V mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ D. b! ]* Y9 O5 r5 |2 J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& \4 W$ s2 z" X9 z5 S/ e) O- K
/ e7 q- G D' K' O" E4 @' x
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 y8 `2 P6 d" d! H/ ?% Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, t; f- X3 s5 v( o& n( y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 @: ], Y5 `& L- p& Y$ S9 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 ^- \7 a# s: T$ K- s d5 K% t5 \6 k7 P1 T _" {0 E
mcasp->regs->XSTAT = 0x0000ffff; ' Q; P6 C- S# N) _( X" k; o) t
mcasp->regs->RSTAT = 0x0000ffff;
$ I; k# g- h- u2 p( W5 `1 E9 {% u7 r
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! M0 D, d) U+ ~( t R+ n- [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 N2 `4 q+ n0 [7 K" B S1 y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 Q/ O- v0 [- i6 A3 _. s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 v8 p# w `& r
$ l% e5 _# ^& B0 | /* Write a 0, so that no underrun occurs after releasing the state machine */2 o. o" E. R* p' Q
mcasp->regs->XBUF5 = 0;" B7 q; c: t/ `+ N6 z
mcasp->regs->RBUF0 = 0;
% _ Z! |6 _1 d9 i0 F$ {0 a0 P6 O. G/ z$ i$ n
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ u8 V% i. a+ C" d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 ~9 U h* [/ F4 J mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 t+ z6 U$ s/ _6 N# `. T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 o/ K% q+ P' `! z; H+ W$ k0 ?
7 O3 ?3 K6 y5 H: j4 @ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 ~3 M! A3 T, P" k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ K) B- N6 D# X mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 K& _0 ]: o! ]' A, s: R4 [% B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ m6 z2 }) A$ j/ A9 }; x( X) x
$ A" z. K: A) b* F
CSR = 0x0000;
( N0 z0 t- m/ {/ @ i! E4 H INTC_INTMUX1 = 0x3d;8 g) e6 W) r# i/ x$ M( x& z) W
ISTP = (unsigned int)vectors;+ {6 A2 E; T6 S5 J" W9 y+ A# R
ICR = 0xFFF0;
( k) F9 ~/ h0 `0 q) B. f IER |= 0x12; , F6 |, Q% P* K$ D
CSR |= 0x01; : t0 L- d) _% O/ D( _0 `/ A! r1 H
' m- ]# l# B2 K; F: v6 i& |
1 W/ @" t/ M# v8 Q4 L- N' K4 n/ u
还有就是两个输入输出函数:; f" Q9 v3 k% e$ S2 d: \# P
void output_sample(Int32 out_data)3 Q' R. A6 R0 c3 T" b* Z- C+ t+ h
{
% a0 q0 N" u' O5 K& f; T AIC31_data.uint = out_data; ) M. P: k' P0 I& p- Z$ Y! P
MCASP1_XBUF5_32BIT = AIC31_data.uint;3 q, m/ F2 L) |
}
( G7 S& z+ g r0 e* c, ?7 n
- v9 ?, J) Z) V. X6 e; AInt32 input_sample(void)
' Y* `& b' }3 P; C' T* y{ & M& ^' L& D# R0 y2 W
AIC31_data.uint = MCASP1_RBUF0_32BIT;: E9 O* l, L5 x* J. K1 M W) p, F9 M, p
return (AIC31_data.uint);4 V* W# E$ C( N# l
}
8 l6 ~1 v: h( P% o8 ?0 j0 M4 T! [! b! |. T
|
|