|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; U) ]% B" N' ]
main文件:
6 W/ U0 h+ W5 `- d4 Zinterrupt void interrupt4(void)
4 g1 {3 T) X1 K% t: p{# b ]3 P0 {( ^' b/ ?2 o) b$ z
Uint32 sample;
$ T, \8 T9 F" e- b' d9 R6 T2 a- d+ i1 P9 _: H4 K* |
sample = input_sample(); // read L + R samples from ADC
8 r. T2 s- J. P5 L" h output_sample(sample); // write L + R samples to DAC
, J2 o+ _4 C1 S- w return;
6 S2 ]/ B- g7 a}
6 o% t& F' l1 _: y; o. t% Y* C6 M& Z# L4 f) n2 {9 U) V: c
int main( void )
! B# r: l1 F) a{
+ f" R( h9 i, ^% Q4 z( \1 } }
# q8 e. W) X+ j: g# i+ ?5 `4 t. _. F; ] /* Initialize BSL */, q; p5 o" }$ E6 K
EVMC6747_init( );
: c9 v6 F0 x/ ?$ L. d( f /* Call evmc6747_intr function */" ^3 }6 [; [2 x$ n: e% p, P# w
aic3106_init( );$ C/ B0 W% F% }- g
while(1);
* [# H$ L$ D1 M/ @- }2 x: J}( M, V4 V2 G+ O9 E1 O* u1 y" d
9 D* u( l$ y5 R
0 f+ z$ F/ k6 Z" |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 J" v3 @* h% x4 T0 n A Z4 t' N/* Initialize MCASP1 */
4 s9 e9 }5 C# r5 e. ~$ P mcasp = &MCASP_MODULE_1;8 ~. O" S0 I- @. A+ Z% c5 S
mcasp->regs->GBLCTL = 0; // Reset3 n9 A1 o h, ~% B% `8 }* H
mcasp->regs->RGBLCTL = 0; // Reset RX! v" K# m0 `8 c" v; ]4 z$ f
mcasp->regs->XGBLCTL = 0; // Reset TX8 N1 |( r6 I* J F
mcasp->regs->PWRDEMU = 1; // Free-running
f0 _( `% f3 N* _# k6 N. y // configure McASP0 receive registers
0 J# b3 H% H5 [9 u4 B# H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ L3 j6 G+ N0 v& p6 _; j& I
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 ]- m$ e& }- t& Z7 j4 U+ ]
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 Y! w( F9 e3 u3 h: d! c& S4 J
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ K% z; V. Y& c2 q D7 I
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ M- f% o4 N3 W ^+ d4 O
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. d( U6 v. y: _$ W3 N6 \1 k mcasp->regs->RINTCTL = 0x00000000; // Not used1 J8 l" ^4 ?% c3 G$ r5 I- x# s* B
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 q. [' D% {* i* H; h4 e: w4 n/ t/ z, `% j O
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. s+ t& O0 O8 ?8 W. ] mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! O4 I$ ~. t! `! x+ ]3 D# U, D) S
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 H7 t# I7 o3 F$ c9 Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ A2 V! T4 Q+ n3 w: ~ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! s9 b. H' F4 F0 O5 K: l mcasp->regs->XTDM = 0x00000003; // Slots 0,1% H7 t5 \ f8 C" \) k4 u* j J
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! {7 f9 w) P0 ?5 G mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 d5 [" ^2 D6 n( P
% Z/ ~' e0 e3 }1 P7 U+ B! p) {
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# m# L$ i* s: a9 y& t% T* H- p1 r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ {& @5 H. ~4 ` k- n! `
mcasp->regs->PFUNC = 0; // All MCASPs" ^7 W3 G4 ~( P4 S+ B
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 G# t7 m" [4 }" m6 C1 q( G
+ f& g2 O' B& @) y& G, L7 Y% a+ z" R mcasp->regs->DITCTL = 0x00000000; // Not used
, a+ b8 {# @( ~; g" a6 O) J mcasp->regs->DLBCTL = 0x00000000; // Not used. y1 b, ]: X" {0 [! ?0 f
mcasp->regs->AMUTE = 0x00000000; // Not used( ~6 T5 h0 K: ]2 W- r9 Q. u: E
S" X4 K% G7 W9 S
/* Starting sections of the McASP*/
0 f* O) c. Z" t8 B mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) ~# R( U" z! P e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 S4 _8 b/ C& d mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 U6 b, l# m! M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 a6 \4 T7 x& X2 i0 L/ i$ O4 P' G- v, k% ]5 m3 l- B# I" q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , B% Z# g `+ n, Y( ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ Y6 L( ?2 K7 I3 T; m$ Q: ?
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 B' {" S6 z' P* F* a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& ~2 m. y7 S0 k# e! }- e& {( j4 K8 g8 r- e" i
mcasp->regs->XSTAT = 0x0000ffff;
! j7 ]/ [6 X; `# M( x, L mcasp->regs->RSTAT = 0x0000ffff; 8 \4 f1 @8 J! _, G! u% M2 l) E
6 c0 X- O5 K# `9 q% { mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ J1 z: m5 [5 x$ j6 x8 g' {3 V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 `$ l9 c1 W4 P O* g, @
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 p0 d3 I7 h# U( q+ w' D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 h4 n8 m0 n6 v3 x' `# C" S, y) B+ G* w1 u7 J& x9 ~9 ]
/* Write a 0, so that no underrun occurs after releasing the state machine */
1 A6 k$ n( i/ ] mcasp->regs->XBUF5 = 0;
% M1 ^- v( M" N }8 u% i( u' ^: x mcasp->regs->RBUF0 = 0;
6 b* z1 H/ w$ H
5 \9 L% A9 P4 O mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 C0 m; \5 }' U$ T; q1 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& z7 f6 _+ h6 W; p/ N( K0 Z
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 R, p5 O' K( G% l% y. W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ U' E* T8 X; H+ V# C5 @
: ^3 P0 N6 @9 T% v mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( o- t. N% E7 }7 G& V" [, T+ \2 Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 ?' Z0 W9 ?- c& d8 s" A
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- c( v& s2 h8 C" a- F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ T* G9 K! b" X& _: q4 Q9 ?6 Y' k) j
& Z- d- j+ @. R" B1 K* U+ a CSR = 0x0000;( I( A4 E' j: [6 q3 A8 D
INTC_INTMUX1 = 0x3d;8 z V. A6 T h3 R+ c
ISTP = (unsigned int)vectors;
' y( |; J" d9 H5 z7 Y+ c5 P: N ICR = 0xFFF0;
) C+ n2 `2 }% a; d1 ^+ V$ T2 s IER |= 0x12;
/ ^3 `+ W# A4 J1 T CSR |= 0x01;
! \/ R% D8 h, t) L* p; ^ q
$ B& G3 r2 X- w' ~
. }. h4 I+ D9 p: U6 W3 Q* k
, n' x4 @7 ?7 P& F. d! K/ ?还有就是两个输入输出函数:
3 k1 k; ], Q5 j3 M% ?void output_sample(Int32 out_data)
+ _ p9 y2 D9 f: K: u{
; f3 d6 |4 [3 l, T% s AIC31_data.uint = out_data;
0 d/ U ~! H2 }- z u) H MCASP1_XBUF5_32BIT = AIC31_data.uint;
: x3 O7 H2 n v0 S}- j2 E# y' _5 v- l, x
, |0 T& M( l: r2 l7 e, j* n
Int32 input_sample(void)/ V Y5 N( S7 d! D" w
{ & g+ ~) I- t/ S, k W
AIC31_data.uint = MCASP1_RBUF0_32BIT;
# N1 O4 q6 y1 a- C return (AIC31_data.uint);0 \" r! t# N- K( s# d; S
}
) a; b* w% m& t) H1 w6 ?5 `, H$ V4 p L0 s4 K
|
|