|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
{% ~& O4 n" S+ k( _. Cmain文件:
; h4 P/ i2 J, {, K. n: Dinterrupt void interrupt4(void)
1 H* E. |6 s5 N+ Q6 |- I{( r2 i0 q+ ~- K
Uint32 sample;" x: _# v; H# ~3 M
6 F9 l& v! ^! `! I sample = input_sample(); // read L + R samples from ADC6 I9 t1 e5 Q, ^* c8 c
output_sample(sample); // write L + R samples to DAC P& ?; H" ]2 b) u, ?4 w
return;
Q, E; Z" A( f, ?% R}! ?9 b1 K0 Z9 h1 e4 q$ e6 H( d
- A; {+ D# p) \' a yint main( void )& E g. T! b' [% P3 d4 @
{. a$ D9 ^7 L0 `
. o: S) r) X' `0 q' a! Z d0 X
/* Initialize BSL */
7 u1 h; Y) v5 j EVMC6747_init( );
( q9 k% l7 Z1 u, {, e; m% }1 M /* Call evmc6747_intr function */
0 y ~, S6 ^1 {$ u7 Z- U, v aic3106_init( );+ ^! E5 W/ p' H3 E7 q- n
while(1);
* x- ^" L9 g3 v/ v8 C% H}4 i6 e: `1 f, n9 ^
2 B9 C2 S( V) }4 D8 k* s& u
* E1 D x: k" `- U' q+ |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ K8 H/ U6 x* B3 ?9 C
/* Initialize MCASP1 */
/ R1 K+ Q% Y0 A" L mcasp = &MCASP_MODULE_1;+ E' M8 i7 k% }) R
mcasp->regs->GBLCTL = 0; // Reset* I! f3 u0 c" ]7 b
mcasp->regs->RGBLCTL = 0; // Reset RX
% |) A& u/ G' ]. A) g# v/ n7 D3 s mcasp->regs->XGBLCTL = 0; // Reset TX
5 p9 k& u1 |+ G* {! C) ~8 I# @ mcasp->regs->PWRDEMU = 1; // Free-running" A0 E" C( o p [1 j
// configure McASP0 receive registers2 P: v/ S" z2 F; E/ y& Q5 o
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% E( G+ \5 l& J$ l; B; J1 F
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ q: `/ U; k8 z$ l1 g* @9 S% k
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 u! n1 L# Y- f \0 A2 w1 B% z7 `
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; r( B4 s' n3 h( x mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% U1 F' T9 I) U. \: b( R mcasp->regs->RTDM = 0x00000003; // Slots 0,1
3 Q* O! e+ m" w3 D1 d mcasp->regs->RINTCTL = 0x00000000; // Not used: z! C6 P4 D5 V
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! y! F9 I2 s# S1 S! k
) {8 C) E0 {1 q3 L
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
" F+ c4 f/ s# t+ Y5 q2 _ m: { mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( U* ~6 u, H8 d) C6 L' q1 Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
r- T$ u" i: S; x$ M mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 b# j3 t4 ]6 A2 \2 N mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; ^6 b( D& R3 C' y: a mcasp->regs->XTDM = 0x00000003; // Slots 0,12 i6 x) l9 w6 z3 ]- I+ X
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) Q- _" T+ H! R; S! {/ o% d, _ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 D% a, ~2 u' C4 {9 U. R
- r% B. m! |2 O d3 H1 k mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 E/ Q4 @& g5 e& }* x, ?+ \: T
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 r Z' \3 A3 _% m# ?
mcasp->regs->PFUNC = 0; // All MCASPs+ J% A. K- O2 d% K
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( N; d2 U; U; A/ p6 j* n" }& E& {
( x* j) j$ _6 k, c mcasp->regs->DITCTL = 0x00000000; // Not used0 I4 O1 \7 A* e @( M$ C7 b
mcasp->regs->DLBCTL = 0x00000000; // Not used
: ?3 A: ~* Q3 O0 b2 x mcasp->regs->AMUTE = 0x00000000; // Not used
; v7 Z; @3 y- y5 [# i+ Q9 _3 Y
6 Y/ G( p" L% t |0 ^' i" |: n/* Starting sections of the McASP*/5 f% h6 ~/ Z: P. D1 f
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; V' Z( C4 p) T2 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 v: r4 V% D2 |. v. M9 n mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 r! Z! l4 o( ]: V8 G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 @3 l/ M! D$ w' {
+ A1 C9 H8 C/ w, e" b9 F+ o mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! I, y, K- L! e! S, \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& k. e1 T$ B4 ]; J8 D mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ z8 C/ j! v3 F% n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; i& t+ U/ O! _: B# X( X, g
0 s6 l* \) Y5 b2 [ mcasp->regs->XSTAT = 0x0000ffff;
5 ^* n5 S6 K) O+ }9 r+ O mcasp->regs->RSTAT = 0x0000ffff;
0 c1 E3 N0 |4 R3 n! V" r! @" S' j# \( z S5 V
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 j; b0 [6 }: I8 s$ v1 G+ @# q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ H) \* C+ e" M Q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" E4 k0 R( f: T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ K+ \9 r5 { ^: }+ N/ y0 j4 J" H: D: A- Z2 N. B6 r1 f
/* Write a 0, so that no underrun occurs after releasing the state machine */
9 r7 t- {0 v2 Q3 h* ^* r; d8 Z mcasp->regs->XBUF5 = 0;
- y9 Y3 j% w6 j1 n mcasp->regs->RBUF0 = 0;
7 ?$ q) B' u, [- {. i$ M& l% C9 G2 b$ g' j0 m; f
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ L% {' l# |& \. [8 w! O, _1 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 b8 N4 ]' J6 C1 v D# n2 J9 N
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " Q8 O3 E c" ^5 q7 }' F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: o4 n- Y) d) D5 S* D* T
0 g# Q% {, F/ ` mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, @* \& ?! ^! W( }. {: r- A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 u5 X) ^' S- H/ E mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- V* l0 k9 D% i* x0 v; V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 Z0 {: }1 N4 h3 \9 m+ V) e
" @! r7 q j8 C( R% }
CSR = 0x0000;3 @4 u6 N0 G" E5 D/ i9 p* U
INTC_INTMUX1 = 0x3d;2 y; E7 `2 f, R; ^; L
ISTP = (unsigned int)vectors;! J/ o+ {! r3 Y7 B. a$ y
ICR = 0xFFF0;
8 j7 w) K" |9 F9 r: [7 A7 H IER |= 0x12;
) K# o; S9 o* Y1 Y2 C CSR |= 0x01;
- M% W6 u# f6 L: c
6 N7 V6 J5 B$ C" R& F3 q
4 W7 H' m# l- n/ y) V* D+ p, w
/ R# I7 x% B: P% x2 k还有就是两个输入输出函数:! k R$ ?) M M/ y ]& B
void output_sample(Int32 out_data)
: a, q7 j+ F) a* a7 J _{- q9 g* T& L% ]. Z% I6 o1 L! P
AIC31_data.uint = out_data; ( j' A/ }( l' y8 L$ O9 T
MCASP1_XBUF5_32BIT = AIC31_data.uint;3 g' O: z$ |6 U, O
}
( a6 c) G. f4 X- K) Q. ^( d
( g1 X, Y/ x& X2 D( p% BInt32 input_sample(void)
# ], \' k+ ]% e. w* k{ & ?( m0 H2 c/ ?# E
AIC31_data.uint = MCASP1_RBUF0_32BIT;
" ?7 }8 ?* l& |" h0 b return (AIC31_data.uint);
m/ `7 B1 D, I( A* P}
6 Z; _$ O9 E3 e2 V, p/ e1 D% w: `& _ j& B6 T
|
|