|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 w$ C/ J; Z3 J* f+ Omain文件:
% T& s; I# @% Q% m3 Tinterrupt void interrupt4(void)
& V9 c) l' Y3 G4 b! H( ?4 A{
3 v0 N) o3 `! ?$ E Uint32 sample;
4 A$ \6 w) ~! R) Y- \6 U, H( [% u. m* X1 I3 u
sample = input_sample(); // read L + R samples from ADC! a0 _0 I1 Y* q9 p5 s
output_sample(sample); // write L + R samples to DAC % ~8 m) @; r' i7 a1 M
return;9 y- z- \4 T6 G! X+ @
}1 S) _+ D1 C0 ^5 _
" {3 k6 r# w4 @5 E3 mint main( void )! d8 W- Z) E. A5 r2 w Z
{
" H7 P- {6 E: o' p8 i3 l
2 c& R* c2 r! B/ g9 v /* Initialize BSL */
7 K5 ]6 q8 y( L7 P$ q3 H EVMC6747_init( );8 T) k) P* O. m9 J
/* Call evmc6747_intr function */
( v# g' Y' b ?- Z1 i( H aic3106_init( ); l# |; t2 p% f
while(1);
% Y" `6 g3 t7 e- \}0 `0 v+ q. Z, {2 B% `
) V2 a: f0 Q# p3 i3 J4 D4 `5 d, k* B( S7 l# E8 L/ z% c Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 S" p" @$ v- I9 _' R W
/* Initialize MCASP1 */. A5 v$ e$ W4 ^
mcasp = &MCASP_MODULE_1;
! S( K" q% K& H Q" B mcasp->regs->GBLCTL = 0; // Reset
5 B; d3 c6 B6 M i/ { mcasp->regs->RGBLCTL = 0; // Reset RX" p! b% M4 C; h1 d" |! P
mcasp->regs->XGBLCTL = 0; // Reset TX
$ d* o' p/ G# [ d. P mcasp->regs->PWRDEMU = 1; // Free-running, Z9 n: U2 V/ T
// configure McASP0 receive registers
9 F. [; N, z' i: S/ `) C v mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 K. b# P: y4 _' Y mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- y, p5 S) |- k4 X; ~ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: T, u" u+ E" [4 F; n) l, s; ~ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
C5 P3 U: ~9 C1 U9 Z/ g mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" J5 {- P9 [7 ^& i& j6 k5 O6 o
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, d* N/ c; {8 R mcasp->regs->RINTCTL = 0x00000000; // Not used
4 W( ~5 O6 G$ M' Y/ q mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% T; e% `( }9 i8 D# P! m
" G( O" E7 z( j& Z( ~" d( | mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) {& d4 A8 a8 q7 @" z3 B% W+ A mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, T5 D% e @ c8 L( A- a mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 t" x- e' T" U/ @
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' |( t+ E8 ?' C$ k mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
2 g; o# S# M! a- p! `+ Y mcasp->regs->XTDM = 0x00000003; // Slots 0,15 i" p' d+ v9 Y2 c# h# x9 o7 Y0 ?4 F
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
# ?0 O& ~/ b4 K+ ] mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 B. M6 d% K1 E0 y: z' [
6 r9 P8 o# e) w0 e) }7 Y mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 m1 P4 U7 K; Z) } mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 G7 t3 E3 B3 f' R
mcasp->regs->PFUNC = 0; // All MCASPs7 G4 e4 f1 v! N1 r9 q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 a+ E1 \7 Z# q: t% G5 O
# U" `/ T G' G mcasp->regs->DITCTL = 0x00000000; // Not used1 {4 x6 R: ~; g* e y/ x
mcasp->regs->DLBCTL = 0x00000000; // Not used, q; l1 s) j7 }
mcasp->regs->AMUTE = 0x00000000; // Not used4 H" b5 o( H" _( g7 `9 S `
8 \# f1 p) A7 U% s6 i3 `2 q: N6 j
/* Starting sections of the McASP*/
- _; Z- ]7 u8 K- } mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& Y4 w6 A G4 s% q0 P# X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 O; P: y$ C5 ]8 w mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" f3 M4 Q/ N" i& k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! g. a8 e/ H: N' l: g( x2 z, S/ S6 ^7 X% d5 ~
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + G G0 m7 D- U" b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ e- E- C, n# o, s, H
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : a* H0 U9 q# h; K* }- E1 X# v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' D/ k, c7 ~6 L
; Q( u* ^2 N0 G0 n+ w# a mcasp->regs->XSTAT = 0x0000ffff;
% O3 f g d) M) n4 e mcasp->regs->RSTAT = 0x0000ffff;
# S6 o% B& X0 ~8 n; e: S H5 f6 q" l( h9 Y+ @* f& E: _" c
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 h4 S% n9 F: W( _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. `2 b) @ E8 t) M0 N+ Z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 m3 \3 c1 Y3 e+ a4 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 @* Z* P' C# x t' `8 k3 _8 e, e q+ I
/* Write a 0, so that no underrun occurs after releasing the state machine */8 j* e& D3 {: ~( O; N
mcasp->regs->XBUF5 = 0;
1 c+ G' l' @3 | mcasp->regs->RBUF0 = 0;
) S2 x' e7 R8 e1 C4 x
* u% ]' L7 ~8 r s: P2 `; @/ y mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 f2 ?& v! |2 D6 i# R1 z+ ?" _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) v2 h8 G- B p) I( n4 c {
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! J* \7 S/ `3 v6 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( z! M. t7 i; i6 B( c+ H
0 x/ u* \7 Z8 E: v! N
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / B: @. g4 \) P4 |2 ?3 j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ t/ H8 G; N2 g2 _
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - c1 a, Y* T, @* i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' ~6 L& \% o1 [; w5 C6 X% r, J8 |
% `, X7 X9 ^/ y+ N- F CSR = 0x0000;7 s9 J% A( Q) W |" q6 w
INTC_INTMUX1 = 0x3d;
$ K9 y2 n6 g, L! w3 w* d" s ISTP = (unsigned int)vectors;% U4 {4 r1 }+ \# r, n: D7 D
ICR = 0xFFF0; $ E" m& j B0 g
IER |= 0x12;
4 m! }+ Z: P9 p3 k) t3 ]1 f CSR |= 0x01; ; C4 L# |% X+ W
& s2 u; \. y1 z- r7 J8 j5 h
1 f, n4 U) l+ ?+ n
f; Q$ b7 B1 X( D1 a还有就是两个输入输出函数:2 A. V- r: b8 ^2 H `
void output_sample(Int32 out_data)5 s9 S4 J: {* P7 C) l: `
{
- j6 z) W1 g# E0 \ AIC31_data.uint = out_data; ' G) E( E+ U. ~2 [, ?4 F/ A
MCASP1_XBUF5_32BIT = AIC31_data.uint;" f' U# F o* P4 L
}3 T! h3 [- H7 }1 ?# K( o
$ M' D3 L+ q0 t3 z/ T$ V3 [Int32 input_sample(void) ]0 ~3 F1 L: r1 ?
{
5 A4 h+ B. o u4 m( [. U' s AIC31_data.uint = MCASP1_RBUF0_32BIT;3 Y& `" _7 ?# U6 J. F+ j
return (AIC31_data.uint);( r4 ~" d1 X' S" Q* R
}2 ?8 ~: M6 k2 g8 S9 `: d( u
9 f% J! M1 \6 x. L
|
|