|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) I8 H) j7 w* T! W
main文件:
5 l4 q' |+ X# r9 o, Sinterrupt void interrupt4(void) ' r& X$ ^$ u" z- ~0 x$ v
{$ c! r8 H x7 H( W% F
Uint32 sample;: }( U7 K: v3 \) y5 q& y
0 s3 m$ e# F" f* V
sample = input_sample(); // read L + R samples from ADC
& u8 k7 L3 S) e( H: B1 s output_sample(sample); // write L + R samples to DAC
! N( E; T, N# V$ y return;
4 C- e# k( E# _# v/ ]% {, s, J" g}
. |5 I) L' [) Q. Q) Y7 z
4 E1 K6 o! m" G7 i% v1 @. L, _int main( void )9 {0 ~" F/ x1 D
{9 k5 g8 i& `% \) N$ h% F# E. S, [
; M1 Z/ V- Q' V; ^5 B! @5 y1 Y
/* Initialize BSL */
. I1 y) A# X+ l& ? EVMC6747_init( );
2 T I+ n- x6 c: B- |$ i6 y /* Call evmc6747_intr function */
* g( D4 J" L* l& q4 @8 Z# B aic3106_init( );- m `( Q: {, Y" r3 Z' s& E" }: w
while(1);
3 K* Y' K. G. [9 X4 A}9 |; ^8 X3 A d
! k- h% h6 ~, ?$ W# x
( f0 S/ M& d, C. v4 I* U( T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: N) p, W1 I# Y0 X1 M+ N
/* Initialize MCASP1 */
8 O" T/ `1 b+ w% o mcasp = &MCASP_MODULE_1;4 f$ ^( S) \; R7 {- w
mcasp->regs->GBLCTL = 0; // Reset
* X! J, s; z( W mcasp->regs->RGBLCTL = 0; // Reset RX1 w/ G4 M8 A: _1 y% l% X" ^2 X
mcasp->regs->XGBLCTL = 0; // Reset TX z/ r: ~# ]# G, V- Q/ @
mcasp->regs->PWRDEMU = 1; // Free-running- `) y9 K6 F! T* D3 G: B
// configure McASP0 receive registers
3 _% ~( V# u r mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ T& u, h) l4 E% _3 Z
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 A+ V8 h3 M5 l$ J4 Q1 S
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: ]" C% D }) s) \8 S# ]' B mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* C `+ k! T4 ]% q: L' g( ^ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) D! l' b+ A9 L8 M# P5 b
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) N+ v2 y" T( _0 T mcasp->regs->RINTCTL = 0x00000000; // Not used4 R5 g" W2 s2 F O5 ]
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; K' V9 d% y* \; s) Q- ^
, R' h2 x, K; L+ F
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, j0 @ B0 t0 E) {
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; O& x w5 Z# w" ?! f$ f3 z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* L0 `" M5 G+ u! F0 I
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 c8 T* L u' w& c D mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 G) c6 I! H i/ e mcasp->regs->XTDM = 0x00000003; // Slots 0,18 f( h! C1 _$ B5 c. o. Q8 @# `0 ^, ~
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit3 @3 a% {2 k" x1 Y" n4 Z/ O
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ I( i: l( C) m* A% n
0 G& X. d4 f6 Y1 T/ S, f, N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN& W5 o0 Z: T! F0 m
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. c7 ^' G6 [* q, B mcasp->regs->PFUNC = 0; // All MCASPs5 x3 U B# _- j
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, `* A6 ~6 t1 l8 z
9 A" \) X& e2 p$ E) J4 S mcasp->regs->DITCTL = 0x00000000; // Not used
4 x9 k- i/ i; c1 J mcasp->regs->DLBCTL = 0x00000000; // Not used; {6 f1 ~5 y& Q6 `( X! Z
mcasp->regs->AMUTE = 0x00000000; // Not used
& g; @& y4 R/ ?* a/ C$ A7 F
8 K* E, O7 V: f/ v# F7 [/* Starting sections of the McASP*/
: m7 F2 e" s* C# @" o mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 M) \8 M0 [7 [: D( G7 R' `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : C& e! V+ B( J' i% {% q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 [1 X, L. n& t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ ?# f0 m# s. Z: ]+ l0 z8 C
/ p+ G$ Y6 p8 _4 `' ~, Q' ]7 @
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! t! \. B+ F; q* c" k& W& g* S, a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ [% [3 P/ _" f2 F
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 h" k K1 G' Z; Y, e, D$ q$ H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- K- R3 \, f5 l# n6 ^4 Z" E. c
% ?' v. ]# l1 T+ C mcasp->regs->XSTAT = 0x0000ffff; , `6 h' u) }( c
mcasp->regs->RSTAT = 0x0000ffff;
0 E" v6 y* w) D' d5 c! N# g T+ L- G0 N4 J# C. c( A8 y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 ^: p, R0 |) x0 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); c p2 L9 a2 y! g+ A' u* D2 C
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; t7 p1 M/ F: k( S+ T8 M# L5 G4 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 t7 I9 Y' ]" B, b% S6 v
& }# o1 ]) V6 {+ e /* Write a 0, so that no underrun occurs after releasing the state machine */8 h# r) n9 d* s1 `
mcasp->regs->XBUF5 = 0;$ p5 E9 }$ b1 F& k" S$ H
mcasp->regs->RBUF0 = 0;" V; h% u6 ^ k$ x, A" G8 e
( ^( ]. X2 I3 P6 S" p mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 c8 O, A* o! M4 n' q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ [' i3 ^7 C+ l4 [) D9 K3 v1 E
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 `9 V* G* z0 u* o7 c3 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; X" {, Q. G; ~ b2 K8 a
/ z+ j0 r- M3 F$ X+ e mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; ?' w# V/ I4 c& \% M" I& p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( s6 e9 }( x$ k) J/ ~- Q- i! U
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: p3 o' y& H9 M/ G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" L5 c# n! E" u" Q4 B
) n7 \% c/ m9 y2 g6 p# N
CSR = 0x0000;/ ~/ _+ L% B- N5 F5 N
INTC_INTMUX1 = 0x3d;
( ^/ L0 ~ h' ]! Z5 d7 o ISTP = (unsigned int)vectors;
, t, P4 w/ Z' @: }' E$ _# B( \ ICR = 0xFFF0;
7 _1 K$ |7 @( r9 i! }6 B) X3 D% b IER |= 0x12; . E" S6 }) r, ?$ Z! S& K
CSR |= 0x01;
/ p% s9 o' {' }% }: p: d' ^7 W, m. J8 h0 g/ u. r
% _3 M9 g7 R/ i/ ?8 l7 d. V
! I3 f+ ~' m, a- |0 v4 \8 k还有就是两个输入输出函数:
6 }8 a- k/ Z, j0 J$ k' N. Q& kvoid output_sample(Int32 out_data) {6 c: h4 W. j! q" O
{: n: j x/ Z' d0 `( `+ x4 C0 G
AIC31_data.uint = out_data; & g1 Z0 e/ L# F) o4 {1 @
MCASP1_XBUF5_32BIT = AIC31_data.uint;
# ?" s* U- C1 O& R5 |# F( s* M' K}
) y* M4 G5 W+ ~* M9 ]* _
( l% J2 w. C& ^- Y0 k" zInt32 input_sample(void)3 D6 K/ X# f7 Y6 Y6 T4 y
{ & i3 {: e' }4 \
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. L* b* `: D6 `: @$ R% S return (AIC31_data.uint);2 ]4 ^6 n9 f* I) `, n( q
}# J6 l8 Y: x6 A8 H
3 k2 O2 b1 g& S4 R; m% Z- w! V |
|