|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
@) ]8 Y7 k2 [3 _$ r4 c7 rmain文件:, z. C- I8 f: `) I0 e
interrupt void interrupt4(void) % a& n2 k0 V( ^. W, B. x2 \
{
# V$ b; u$ v9 d; C5 Z Uint32 sample;
# Z7 A+ G8 J, t: Y$ @+ h9 n0 z$ }9 c
sample = input_sample(); // read L + R samples from ADC3 P3 j C# ]0 ?
output_sample(sample); // write L + R samples to DAC - T9 C: e6 p/ H0 u: @
return;
7 i2 O* c: c5 l! w}% j6 _! u- d2 X0 ?# ?) U! _8 E" ]
; p, O, B; l3 [0 W" a. @int main( void )" ~! g* I2 X8 K( t3 ?. N% B
{. b# _& v$ j6 z, w
2 w, V9 B4 D3 A: C /* Initialize BSL */: B# x4 I# L% N. R( W6 h/ |
EVMC6747_init( );3 e6 I- u' \4 B+ y! P! \ b9 J
/* Call evmc6747_intr function */
) m: G- S/ t u# o aic3106_init( );
$ D3 w# S; P/ k( o7 j- u# }2 V5 z while(1);
1 Y" m) W3 |/ g# j# \% j1 m}4 r$ q- W1 y) J1 e4 u
* G6 d# ]& z, G6 {( s, e h; P4 j% j3 R) m6 T/ Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! I' a5 v7 L' ~! B/* Initialize MCASP1 */
0 ?: h4 }. ?/ \3 R mcasp = &MCASP_MODULE_1;, I8 D) B) o' x/ F' [
mcasp->regs->GBLCTL = 0; // Reset& }5 x" Z/ s& C$ w' ~
mcasp->regs->RGBLCTL = 0; // Reset RX
" b/ y: X) d% p6 _ mcasp->regs->XGBLCTL = 0; // Reset TX* t4 f+ J# c ]0 o3 M2 S
mcasp->regs->PWRDEMU = 1; // Free-running
! T: ^5 o- C( W# S( v // configure McASP0 receive registers( b* a; v+ C% b. R0 I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ |: r1 q$ A7 L# u7 u W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: p/ {$ N4 {2 i. X2 G- r. `
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ j$ _. [; E# C0 Y! W
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; q; m3 } T( {) m& V \3 { mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 Z6 w+ t% O2 i+ x mcasp->regs->RTDM = 0x00000003; // Slots 0,16 i, D7 ~5 r: a6 v7 i) |
mcasp->regs->RINTCTL = 0x00000000; // Not used$ ^. v0 a3 Q( h2 A
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, a4 I. [* | y; v# R. _, q
9 b! u* F9 ]0 _8 r* L mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
N+ X0 v; W/ G; m* g$ @: |& ` mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 b1 P1 i& T4 z7 }: f% M mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- ?/ @! ?! G: c Y) [9 Z9 k* L
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# d- }; m3 b- A- H
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( W+ v4 v; [$ H7 w( F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1# k |. P- m$ X! R# h% N
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& q3 Q7 @% c, T0 u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 U" B9 z/ G# \. u9 ^$ c
" S3 I5 ^, j9 x9 e; Z6 x9 H mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" Q2 w9 \! U) |* Z% c mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 z/ t. N0 A! l8 C) j1 e% |1 J
mcasp->regs->PFUNC = 0; // All MCASPs
0 o% p2 A W7 G! i4 d4 w mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 D$ l- z& @" \; B1 H' t! X. Y- G `
; ]3 P+ E5 i$ Q' f+ |6 ]. g
mcasp->regs->DITCTL = 0x00000000; // Not used6 x/ b3 k" r" R$ m' k4 ]7 A2 x
mcasp->regs->DLBCTL = 0x00000000; // Not used% R% \1 p; |7 l- _. M# S$ P6 G
mcasp->regs->AMUTE = 0x00000000; // Not used
1 c+ r- X T3 @0 j; L3 \. Q) Q, |/ c' C/ ^& R/ ~
/* Starting sections of the McASP*/
# |2 v* y/ {) V4 |/ F* L8 a0 W mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( h, [ r! E! y+ d8 |, s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! X2 a8 \( S2 Q7 ] mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 C" N! N$ i) p- p9 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 }5 K+ s, b0 V0 k' S; B% J8 O6 r0 `: E; Z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 y0 [$ L# l$ O( v- I5 ?% t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, W5 y& q+ |1 R: S) H
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 T% t7 S: K" H8 O; k+ K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& x! I1 v2 [4 t) d# G2 z% e1 t
' f0 Q6 o: T `0 M% l0 S2 [2 B; W9 S
mcasp->regs->XSTAT = 0x0000ffff; ' P+ B* @! h* f9 a! m
mcasp->regs->RSTAT = 0x0000ffff;
, T/ p1 h, J7 m9 v' q- G9 @
2 w+ x7 {3 {) R2 ]0 E. g mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! ]- L7 [; g) p9 G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 ?5 ^. M: H8 B& d% e mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 r; m& X! }1 A& g. K# D; ~7 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. I5 I, `; `, T' F0 [4 F6 C- p! J! Y" t) G$ @" \+ A- I' W
/* Write a 0, so that no underrun occurs after releasing the state machine */& m% S, s" r1 } l6 F3 h1 [3 ~
mcasp->regs->XBUF5 = 0;
4 j7 |5 r8 d6 Q" f9 H! T# c2 I mcasp->regs->RBUF0 = 0;/ {, w" m2 j3 d/ C
( `9 e, d) k6 o. u" n, x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 X) E. M+ h5 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' F0 S) L9 k6 }$ x0 t mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 b$ Y" Q7 Z, w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* T- n! A- Z0 j |/ j7 L9 n4 A& K6 D D) x5 C
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ u1 Y4 g8 ^% P$ v5 O; i& T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! {2 A- C: [& Y8 K) {, I* [ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 N$ ~- B3 m5 x# D3 u: z% E' G* Y% a- ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; g" c/ A2 W& G* p J6 [6 \. w6 g: |5 s! b" Q2 p7 I$ C* q
CSR = 0x0000;3 u" E) _* k" u5 u" ]
INTC_INTMUX1 = 0x3d;
% D( [2 L! b9 d9 c, T ISTP = (unsigned int)vectors;
; N) P1 ~9 l- J8 e/ a9 ^; _ ICR = 0xFFF0; 6 Y, J# S, T7 i, _+ N/ x
IER |= 0x12; ! U! z7 v/ `, o
CSR |= 0x01;
% ?8 o: ?% Z6 j% P6 {
" y+ f* c- e1 c, m# H. C
* ^. D. O* n& Y: W
2 i, P3 d: `" O: ]还有就是两个输入输出函数:: z2 l- o3 ]5 f3 ~7 u q2 G
void output_sample(Int32 out_data)& q7 g! _5 Z6 x! D/ w9 S! k
{
- L4 s: {2 Y$ h1 G! U" s: U AIC31_data.uint = out_data;
" g Z1 U( x7 o( |! H- ~9 q MCASP1_XBUF5_32BIT = AIC31_data.uint;
: a7 C! h4 j; ~" h) A- s0 w& b}% j8 ~& {3 w; K
+ s& h& ?5 D/ R" a8 w
Int32 input_sample(void) P' I- v+ D# M& h! `- n# z. F0 k
{
# r# y, }4 `; y& {8 b AIC31_data.uint = MCASP1_RBUF0_32BIT;- j% o, C B! o a8 s) Y! A
return (AIC31_data.uint);* r$ C6 U. L8 L: H3 ?
}
' {+ C6 c! ~$ Z$ y( ?+ [1 V5 K; H, z6 n- D& N
|
|