|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) E) S \1 k0 V
main文件:- J1 v' ` D0 y
interrupt void interrupt4(void)
5 L* r7 b# G& d- ^0 ?- d h5 ^{
& q. b" K8 I( @: |8 E Uint32 sample;
) ?" W5 h$ W) L7 W! Y/ ~
`. D; e) i+ h( W& L/ O. @ sample = input_sample(); // read L + R samples from ADC$ Y0 y a @, K+ _# L
output_sample(sample); // write L + R samples to DAC - Q* c* l0 U+ G, u$ c/ M" q
return;
% k7 P) f$ [+ g- R# Y8 G}: I7 ^% L* \ V, t$ C0 |5 D
. o, J* p7 ]- ^0 O! C7 l% V
int main( void )
" n$ k! i9 Y$ w a, r7 A{
5 v: g8 u0 X& W; r. p3 m* y& F. ]8 D
( J( x* L# `$ J /* Initialize BSL */$ Y1 _, s" c! R2 ~) F- q) \
EVMC6747_init( );6 }' p# O! s- a& }2 i' x: x
/* Call evmc6747_intr function */9 H: ^# P, M9 n
aic3106_init( );% H: V* n- M8 r! \( L1 E# |9 j
while(1);8 d4 x* G8 Z, a# W4 s$ p/ ^6 R
}6 W) `/ V, p! [) d7 ^
; U) @) c6 y! ~" d1 Q2 f5 B
7 {4 g8 @* |# ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# j' G6 |3 v6 v; M( T7 `/* Initialize MCASP1 */3 o% Y& L; j- |1 P
mcasp = &MCASP_MODULE_1;8 U! R7 G2 _% [7 }
mcasp->regs->GBLCTL = 0; // Reset+ x. L; [: k. ^( p% ~
mcasp->regs->RGBLCTL = 0; // Reset RX
& u7 N- O7 i$ V+ A8 D$ Y mcasp->regs->XGBLCTL = 0; // Reset TX
! C8 ]5 }) u1 O! Z) Q mcasp->regs->PWRDEMU = 1; // Free-running
3 x' t/ @$ }% K* s7 Y* ^& M8 \0 Y) A // configure McASP0 receive registers+ _! n& I& A# ~2 m# }: ^( D
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. Y5 u3 I% g1 W3 z( a
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& V1 G L6 g7 ~+ o7 [
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: A$ V3 H! y6 K- a$ K+ I/ C/ |% c mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, {2 P2 ]# u* ] T5 w6 { mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 P/ F+ o! `: R2 | d: }, Q
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* I7 s6 L6 r$ i: O7 ~0 U mcasp->regs->RINTCTL = 0x00000000; // Not used' z0 n' ^1 Y6 n7 p8 `$ K
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 _9 N- \4 m9 D0 A# J
. ~% O# y7 L$ C7 `( b mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
5 s8 b, w% x6 Z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 \ I* n" ^: ~ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' q0 @ x0 h5 A1 z/ G7 z' \9 B
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* X0 a' s& Z, j% r' X( Y mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( t( |4 ^7 ?/ g/ ]2 {8 K
mcasp->regs->XTDM = 0x00000003; // Slots 0,1; ?; C/ B0 ~3 L' W' y4 V4 p& D
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit2 \4 ]- J) \ P8 D- ]/ w3 G/ T
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 C k, B* C7 m) u/ D: G9 y
; S$ e& [. U) ]+ E r, R) ~: p mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
X f- f7 ?- A' p( ?7 r mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. V& b. l3 H* V6 v mcasp->regs->PFUNC = 0; // All MCASPs5 v+ ^( q- p! g5 b4 S- S) t; H
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 g/ V7 K# _/ i5 b7 K' e; j+ E) h! X) e7 A; |2 X- P
mcasp->regs->DITCTL = 0x00000000; // Not used
1 H$ H: v7 B" k4 D8 F3 x mcasp->regs->DLBCTL = 0x00000000; // Not used& ?/ w) r+ I9 n; h9 D$ w) y; e
mcasp->regs->AMUTE = 0x00000000; // Not used! D! _* n- H0 ^% E7 j
2 s5 S1 a1 k6 x: d- T8 X
/* Starting sections of the McASP*/8 U5 z z( G1 M$ K& G) f! [! l
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 h1 T& |+ l" d. m9 a2 U. M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! x* [0 e2 e1 w s; Y8 } mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & v$ Y4 U) H0 u( M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: V1 s4 f; p5 H1 Z' a7 g+ f
4 D9 Y# i+ V8 J3 B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# @" q# a- c. a$ P$ k( e' c* \' w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) W4 l( s+ H& }; t" e1 w( {: X
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 i6 _ L# R1 U0 b7 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 t5 _4 Y3 k+ N6 |4 h& y" p
- A$ d% A1 `% U2 j$ A
mcasp->regs->XSTAT = 0x0000ffff;
, C+ k1 o# O: Q mcasp->regs->RSTAT = 0x0000ffff;
% B7 T. y0 V7 y; r3 N' a( @( v
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. n1 }8 ?- _9 o4 }% D9 u) a$ J" H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ `! D: e6 p" Q+ e" K* J mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! u/ ^2 ?- `2 B) ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% C/ @6 Q3 Y+ T& \5 c& R
. r) n) z* K# Q4 t% ~$ n$ g1 { /* Write a 0, so that no underrun occurs after releasing the state machine */# C9 z- O* }; W5 q6 X
mcasp->regs->XBUF5 = 0;
2 G6 v4 t4 u" F' a' b# N$ d mcasp->regs->RBUF0 = 0;5 E: F9 [. }5 F, ~+ T! M% g
2 |) B7 {7 p, r( ^" O. P mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! j5 \+ b6 |' ~4 O3 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 P% e9 \: G$ q4 c4 Q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* w' B) p. D) i* ^1 J5 z* A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" {8 t8 W2 I( w# n( c
: X l+ a* X1 t, Q0 b3 q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , s) l1 c7 l& i; v z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, e! J( g2 U8 R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * _- Z9 Z) ?, _! W) i6 d8 i4 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% m" ~- h4 i& l$ ^7 y
8 J, m! ?0 [2 ~$ \8 _( P
CSR = 0x0000;; h8 x- J/ l0 L: f, G
INTC_INTMUX1 = 0x3d;
R# E4 _4 q1 K9 j1 J ISTP = (unsigned int)vectors;; h# w* i2 u# D) r$ t
ICR = 0xFFF0;
, W( q1 j8 K# T( q; [9 Q9 Z" ?2 s, g IER |= 0x12;
% k0 k z7 z+ J: u* m CSR |= 0x01;
1 R2 R6 [5 E- q9 o9 t- V' e+ r3 e1 k% J7 A C# H3 [
) _* G* e% h/ @- p# k" m1 r
2 g# X i3 T6 s' O还有就是两个输入输出函数:
$ ~3 _: \$ r7 b4 r5 P( b+ ~0 l& _void output_sample(Int32 out_data)5 W" I5 S* _! N( i8 E
{9 e: ^$ b' ]* P1 r' t; q v
AIC31_data.uint = out_data;
- T/ c$ K+ c9 s9 ?( T" `6 `. n MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 A3 e2 l- A: ?; B6 ~}6 v( W, H/ s' p5 L" j# v7 ?, u
4 T; G! Q( b" |4 p( V
Int32 input_sample(void)
9 r8 u- {% L" Y5 s# G{
' j* l5 u+ M2 j+ F AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 Z6 Y$ J5 h n4 }! f return (AIC31_data.uint);
& s0 c9 s8 V5 p; s6 ^}9 n* W1 k0 X% N, A9 G7 M
6 O1 b+ j- X' o b% ?6 O
|
|