|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* o% Y+ [; x X/ L% \! L1 {
main文件:
6 P7 f2 ^2 c- winterrupt void interrupt4(void)
1 U) E( P9 y9 ~+ i9 y{$ X5 G% C) O; e
Uint32 sample;5 D. k3 N. C" {8 o) U
1 x, C( Z, {* c
sample = input_sample(); // read L + R samples from ADC
. r9 C/ c4 n2 { output_sample(sample); // write L + R samples to DAC
( r9 y$ M* j, p; e0 J- O return;
# c3 I- @) ?6 k}
6 E# u1 L9 k1 a4 }/ |# L$ t' E! m
int main( void )4 A/ B% H3 T) J' B
{+ p X$ X' F6 k, q- L
" t3 J" y6 e2 y
/* Initialize BSL */
; z' O9 ?8 X/ Y EVMC6747_init( );
& }2 {/ j+ Q4 G ^' Y1 A" Q8 ^ /* Call evmc6747_intr function */1 m- U D0 P1 y; K" {% s7 ^. I
aic3106_init( );3 j: x3 f/ a- X; R
while(1); a1 k3 L( A) Y1 i& f( @
}
9 o; r2 h' v& I# v9 X, Q
# |; c9 h( @) @+ \: T4 m% Q2 o" K1 @" I; U/ g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 N' a. k9 } j! o! C, Y
/* Initialize MCASP1 */
& ]: g* n' k+ A mcasp = &MCASP_MODULE_1;
7 x: f8 B5 R" s* ~/ A( z mcasp->regs->GBLCTL = 0; // Reset5 h4 a9 ~7 v' r1 z1 @- J+ `
mcasp->regs->RGBLCTL = 0; // Reset RX) n' l) a2 n" ]! S9 k
mcasp->regs->XGBLCTL = 0; // Reset TX
5 A! u5 U' n) y+ P7 {' \5 ` mcasp->regs->PWRDEMU = 1; // Free-running
8 _- V$ p1 P n6 R! T- E; w6 R1 y. d# } // configure McASP0 receive registers
" h4 [, e$ p7 J& f, M: u- k3 I mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used# |# @' t1 ~; T# e, A9 T
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 k# Q' X. K |. n/ a6 R0 `; Z/ J mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' _: w) J+ M7 F
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ s q- O* r* [- V mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 ]7 C7 H4 Z' I8 x2 O
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 l" A) n2 _$ b9 Z* e: E mcasp->regs->RINTCTL = 0x00000000; // Not used
+ Z1 m5 D: }) c% h5 G mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; r, p/ M! y$ u$ N1 o0 y( `; `. K7 \ M: r* ?7 u1 \4 h
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used$ @1 q1 M" G1 r* s/ S/ P& d
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* _. S9 j) x- ]/ f6 Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 _8 F7 a* |5 o0 T8 b& o+ A mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' H9 U4 ^: y1 k6 ]/ c
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 ?# Y- t% m5 O8 C8 L M mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ B; `+ z9 h1 S
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, n( z" Y1 u" H) Z6 o' E mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 P4 k, D2 w8 o) {+ H; Z, V* y' x2 p9 i7 ?
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 M& X& K: } M6 J/ m# S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 z6 \; [8 i7 ~: b, @. [
mcasp->regs->PFUNC = 0; // All MCASPs
( a# g! x2 Y4 P% |$ F. T+ T+ l mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 ^5 V; f, J9 g! ~2 H" Q" G, T1 q" U8 {, o1 {! g* I7 o
mcasp->regs->DITCTL = 0x00000000; // Not used. }9 g: K) b' q J
mcasp->regs->DLBCTL = 0x00000000; // Not used
, @" U2 i4 x3 G. E/ ] mcasp->regs->AMUTE = 0x00000000; // Not used0 W* ~+ x% z' ?& @; Q8 T3 C
. [3 I) J' _( ]+ Y, J9 T
/* Starting sections of the McASP*/
- h) c: Z) T" I# G! T* {$ n mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + ^. U: n- ?% |4 z1 z' U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 W+ [. Q! l, ]: f mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! `' Z. z( y* R3 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' E6 ] N" N, ~; \) M/ m7 D
# O0 G r) S5 t4 N6 B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , A' E8 T, S- {% C. `2 g8 q, @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- C9 e1 c5 t/ H0 q mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, ]1 P: g( q, ]/ z6 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( C6 Q) p+ I% T3 h! k
3 G- e0 D7 W4 a2 |4 T) [ mcasp->regs->XSTAT = 0x0000ffff;
/ X6 k+ |: R0 |, G- L0 n mcasp->regs->RSTAT = 0x0000ffff;
1 i$ z# W* o+ d& t, G3 V5 Q5 E# E
9 D$ L- C9 _5 A! A! K mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ W: N* M3 a. u/ p8 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; ~% R! G2 }$ h& n
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # ]8 R4 B9 j1 h; [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
g/ J6 X1 g& n" t- ~6 c2 y* o6 O# T; G4 P, I
/* Write a 0, so that no underrun occurs after releasing the state machine */9 {) M- F% o" v
mcasp->regs->XBUF5 = 0;' i2 T# N6 L" X3 h8 _* x+ P0 q
mcasp->regs->RBUF0 = 0;
V& M& H2 D8 \0 b9 D% t. z* k2 }# d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 R: {5 \' Q, ~. `) z3 Y8 B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 t2 }/ W! v( m. }; |9 J3 g mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 o9 M6 m# k8 _6 T# N1 {' w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 ~! r) ~9 V" p, R
0 G9 e# |( a- L
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - J+ @5 o% m B7 c: t& z) z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 J( n& N# }/ Q) ]2 R0 l$ b) b
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 A N( W" Z' N3 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ U; S" u# u! e; s! U0 T- A" F
7 g p' O C+ D$ m8 o! q2 h
CSR = 0x0000;, ?% s0 ~: Y0 B* ?1 y/ p
INTC_INTMUX1 = 0x3d;
( g5 x. R8 d \+ v8 e ISTP = (unsigned int)vectors;
: U- D2 T7 ]) B" _( H8 ] ICR = 0xFFF0; # `) r' ~ H& ?
IER |= 0x12;
b* H7 p! p+ E2 L; k CSR |= 0x01; 2 Z6 X6 c5 z) s
% w2 V' T* W7 X$ c+ r8 L
/ [% r' L% o" j
. X& H: W2 c! [- s3 G8 I还有就是两个输入输出函数:
% o' q" ]# D2 E' K: ~ u) Ivoid output_sample(Int32 out_data)
' c7 ]8 A. v$ I$ J" T" [/ ?{
2 `; E' e. ^. {& R/ { AIC31_data.uint = out_data; $ c8 `5 Q: P/ f7 v& O3 O# N
MCASP1_XBUF5_32BIT = AIC31_data.uint;
- g0 d- {8 W1 w' D+ R}
9 d, s5 X8 z, O, k" t1 [) N! f3 Q7 w/ P3 |" t9 H; l
Int32 input_sample(void); U: }& G# K) u& K9 n
{ $ I( w$ Z! c* K7 m: P+ P" [, J
AIC31_data.uint = MCASP1_RBUF0_32BIT;5 ?# K0 p5 h `: B# J5 v
return (AIC31_data.uint);
; K$ j6 v/ ~$ b# K9 a2 }2 k}! D1 k) T# H6 A* @! b# [( m
& Z1 u w- A5 r/ B |
|