|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 D' X! ~: c( Z; p0 Pmain文件:3 H. |( |- k3 U# n0 ]
interrupt void interrupt4(void)
) F& M9 w3 Y3 Z5 T! u{2 O0 K A+ }% _
Uint32 sample; G( i& g" @" C/ T _
1 V( S' f! H, i6 p% f
sample = input_sample(); // read L + R samples from ADC
! \9 v& ]2 k @3 N; h output_sample(sample); // write L + R samples to DAC ; _" |: a9 k2 c$ ]- U$ ] b
return;- X* h& t' q2 u2 v# S( Y
}: L' t; \$ q- C q, t
& N0 y# w" }8 ~; ~7 Z
int main( void )
- `5 Y7 ]" k( o; l{* A) g2 e: O0 d: ` m5 P: d
: G7 i4 g6 ~6 R8 L
/* Initialize BSL */
& e- q: _. \1 h) [ EVMC6747_init( );6 ]# c: t1 d) R
/* Call evmc6747_intr function */9 d9 C. B; W: s, s6 o
aic3106_init( );& _; c: t( h) q8 N3 n
while(1);8 T6 x" f8 V% s' `5 b
}4 r1 f6 G# y1 W2 g4 a
; D0 f4 y$ {1 z6 P$ k
& `$ n: j9 ]( {6 h$ xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. S5 X& W% V8 _5 T- X
/* Initialize MCASP1 */+ t p6 O6 o* F- w
mcasp = &MCASP_MODULE_1;; V6 e" u/ a/ F
mcasp->regs->GBLCTL = 0; // Reset* u6 D% c* q- ]4 `+ p" c( u
mcasp->regs->RGBLCTL = 0; // Reset RX" Z$ o% r' [/ c+ y9 V( \
mcasp->regs->XGBLCTL = 0; // Reset TX' I8 b- D' k0 D
mcasp->regs->PWRDEMU = 1; // Free-running/ E9 G8 `& c3 b
// configure McASP0 receive registers. s, O0 G: j1 \/ E# L% ^ s4 J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. e* d4 ]0 d; I
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 A- J3 k/ `$ v2 H mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* j: T0 }; ~) C" B. p2 `( u+ f mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! I! n, t! ?! V! y7 _+ I- X mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 d) x( }# R3 T4 h mcasp->regs->RTDM = 0x00000003; // Slots 0,1. y5 @, i- v( v; e
mcasp->regs->RINTCTL = 0x00000000; // Not used, t7 T& Y! v }. ^5 b
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 t: d, V, o0 _$ R. E0 n
7 W- Y7 _4 a l4 u, P; |( Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 ^) E5 t+ V: W5 n9 f0 ~
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 I% ^! G/ R: O3 ^ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ X7 L) |: L! q3 j
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ ^, F! @ X8 q! x& m
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 w. K, f1 J# z) j mcasp->regs->XTDM = 0x00000003; // Slots 0,1) p4 {2 o3 z n4 v9 T4 M3 q3 B
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
& C! I" p- ?' F8 y( U8 { mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" m/ ^" C5 I2 c6 o5 c6 ?
- f9 q1 s7 `- [8 x
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 S0 B9 |2 F2 B# o5 C mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT" s5 p0 y/ x) x' j+ s0 l h
mcasp->regs->PFUNC = 0; // All MCASPs- m/ e: k8 W# U5 ^
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' J0 q- Y/ Y z8 ~) `4 j9 L
8 X. G+ F% O1 }& |# D. A7 b. _5 O mcasp->regs->DITCTL = 0x00000000; // Not used
0 m: Q( `5 C. x% b' _9 h mcasp->regs->DLBCTL = 0x00000000; // Not used# d4 B* W: Y; ] |9 R; O% t1 ?
mcasp->regs->AMUTE = 0x00000000; // Not used8 \5 b* O. x: D6 h: x- U5 a
5 L s( B6 }, ^* G1 e
/* Starting sections of the McASP*/
3 j( b* H6 B) ?$ t# ?& d7 {/ P mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; J" Q3 o# H$ ~9 X! `5 U$ |: q4 c& A# w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 b" t0 x+ Z9 b4 w' E mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 R; U5 S# W+ ], w2 A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# r" f1 _8 Y2 i% g( r
3 p! f0 M7 ^2 ?6 T. x mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " ]2 V4 t, }, f( H- g, ?7 S5 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% L* h( s5 S3 m( b% E5 o; l mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . b6 y9 W/ X6 J4 x- k- N6 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: m) d: f4 b( Q8 ?8 J( s- Z3 s$ C) j. k0 d2 ^
mcasp->regs->XSTAT = 0x0000ffff; ; W+ n& @( K4 T" R. j! h
mcasp->regs->RSTAT = 0x0000ffff;
# [% z! |) @& H1 e
* U. L3 t J( F3 ~& M, x) \ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: U) I( W6 D3 P, h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. A' m: E3 v0 ~( K5 J, h
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 t$ N, i; O% C7 k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 C! T: Z# e5 K6 d+ O
% C% h1 J. f! F) {. G /* Write a 0, so that no underrun occurs after releasing the state machine */8 X2 |8 C* q& v+ |2 D' U4 o) V
mcasp->regs->XBUF5 = 0;5 u a+ f, [7 F4 A n
mcasp->regs->RBUF0 = 0;
& p- f! ^8 t* L7 g$ {
% \* D A9 r; p" G$ Y mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* O" a3 X0 R* Q) c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: E1 r7 M& W6 {6 a, A8 U: ]5 C' l mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 Z Y- J, w8 D5 p2 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- }% k7 `* }# n+ g# D
) B# z; ?! H' p" B* o1 [$ X7 @* X mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " s- n% O8 m" w3 ?& L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ q5 N/ f7 I' w mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 ^' h r% C. h* l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 C' L2 O# N& z# i& T
! a1 f7 y( D2 g4 K CSR = 0x0000;
% D/ R0 d* B: P; Z INTC_INTMUX1 = 0x3d;8 S, `# \$ V5 k& w
ISTP = (unsigned int)vectors;
4 K; } @0 J0 v, L7 d ICR = 0xFFF0;
( P; ^# B# B: g3 k7 v1 a IER |= 0x12;
0 d" r2 H: I# w! Z" N8 J CSR |= 0x01; & F' B% G1 y7 N$ Z/ q
+ o" N' e1 x8 d# B6 S) z8 H! j
( d3 m, ^( b9 C* A
5 O$ r5 |% ]7 O; Z- s还有就是两个输入输出函数:% A t+ p7 V: W( R5 i+ h" ]
void output_sample(Int32 out_data)
8 k$ w- M8 W0 g$ K{% @' @. F2 G2 f1 P- Y3 ~$ K
AIC31_data.uint = out_data; * j$ R8 t( a: ]- g
MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ i) S# D" V5 M" V% R3 Y* e& ?}. j! E5 Y$ H. z* b( }1 u
+ }7 F4 c4 H* m5 X8 P' [0 oInt32 input_sample(void)
8 m1 E" `" G5 t o6 y: [{
+ w W ]( {1 O! q" B7 u AIC31_data.uint = MCASP1_RBUF0_32BIT;( h9 B7 I0 f7 L
return (AIC31_data.uint);
8 E" ^* F d9 b5 b% \4 {}9 G' ~7 P5 E9 d2 A" q$ L" d7 P
( k2 {0 i* v/ N5 n/ E; g |
|