|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ @, W- J% A5 E4 A
main文件:) c' ]% G% `5 Q; H& n
interrupt void interrupt4(void) 9 o- @8 x5 B/ u$ O+ a6 _+ A( e1 c: P
{
; p6 V ] e* q: a Uint32 sample;
' B( Y7 M" `8 w8 o8 E P% C5 o* _5 T" ~5 k. i, b
sample = input_sample(); // read L + R samples from ADC
3 W& j3 z% x, \6 O$ T output_sample(sample); // write L + R samples to DAC % l6 o9 h. a8 v/ [
return;
- z/ `+ L9 C* k" ?* L}7 A: b5 e- b: W4 D5 c4 k; z* t
$ I/ I( H# ^2 a+ S5 @5 \int main( void )# n* @! Z5 c/ o: p9 k w
{: f" m1 z2 L+ e; T9 e F, J
8 Q6 P# t( a" d1 M /* Initialize BSL */
* ^- M; w m, j EVMC6747_init( );
6 S- v- M" ?3 i! M3 ?4 W /* Call evmc6747_intr function */" ^- x9 ~% O9 p# I$ T/ G
aic3106_init( );/ l. K7 H1 Y2 I0 O: o9 V
while(1);
; a7 \8 c; Y2 V* Z}
9 l6 k4 k/ y& q& \5 |* J
2 ~8 s: D2 S: M, |5 l+ X9 M1 y& Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 ^7 Z$ q! ]0 ^; h4 s7 q/* Initialize MCASP1 */+ D, {5 F+ a! L! P- [: {( I$ {
mcasp = &MCASP_MODULE_1;
4 n1 Z2 f; E$ e3 Y* {# S mcasp->regs->GBLCTL = 0; // Reset1 u: l& _0 C2 m; C! S, ?, X
mcasp->regs->RGBLCTL = 0; // Reset RX
" j, k9 d6 @% R B$ H mcasp->regs->XGBLCTL = 0; // Reset TX
! D3 X. C/ N% O mcasp->regs->PWRDEMU = 1; // Free-running
: F6 U* U3 E$ x ]- i/ Q0 V // configure McASP0 receive registers
9 @& _6 s4 I( s* Z6 | mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% r% r+ ?( a* a% v! A& s
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* @' v- I% r- r4 i$ J$ M mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ c% s* o6 y, v
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ W6 q1 R, ^8 @' F mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" ~( b/ q4 z1 M mcasp->regs->RTDM = 0x00000003; // Slots 0,1
" ^* S3 r# r ` [ {7 Y mcasp->regs->RINTCTL = 0x00000000; // Not used
) U [( |! D6 L2 v d mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, z2 x; G! u! i. s
/ I- K$ a5 D% ^# f' B# P mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. R+ ]' I4 Q4 }. @# `' T. b ^
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 W$ A4 O1 n3 x7 u% A z; o. }% R) E
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 x! x. Z5 G6 o1 h1 h/ i
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# _0 r" m0 J/ H. L
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 G. ^0 k O" H3 \4 E
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 e: J2 q) v8 |) ]/ Z. U+ w6 o mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
Z3 t/ R3 k& V5 c# b8 Z% M8 H4 K mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% J4 \: J' r4 S7 J/ @& _; q4 [+ x
; w( F, c, Z! i9 q7 @
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN O/ u% i& ^/ T
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, |$ X( U3 o8 o* V7 m$ E mcasp->regs->PFUNC = 0; // All MCASPs
4 m: X1 [3 O( S8 [: T8 _ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 H9 @* l, |/ g+ i \' t3 y
/ O$ X+ g2 O ^ S% [) @& x* A mcasp->regs->DITCTL = 0x00000000; // Not used
$ ~3 x& y4 f# `- ~ mcasp->regs->DLBCTL = 0x00000000; // Not used# J4 q+ F2 N5 u' M e, T4 I
mcasp->regs->AMUTE = 0x00000000; // Not used3 h6 t5 l# P: D4 D9 O1 N
" j2 u" L3 D- m/ O8 l3 N' E
/* Starting sections of the McASP*/! F$ _' ?. c& r, F; l) }
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 ~1 F7 p; j7 S# [" D& l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " W3 H, @' W9 h/ B! u) T
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 q4 e( n9 J1 g7 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 h0 J: U' x. ~
, Z! N" ^; q8 [5 m: Q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! `- I& K) D# p9 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ J" i& j. p( a4 \ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" t5 U. n" @3 S; I& D+ W5 i& [" \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, X3 ]2 _+ f, I% P( G o8 }0 _$ |. Y- S/ J: {0 I
mcasp->regs->XSTAT = 0x0000ffff; * W6 H/ Y' ]8 B% w' ?$ w3 `* V
mcasp->regs->RSTAT = 0x0000ffff; 2 n# j/ V9 l3 N4 Q( X: |# X
, Z9 U1 z3 t+ M. k
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 j$ U0 f' y$ Y6 z( _( w- N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); C5 G1 n% {9 A( v9 V3 S# W4 G
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 c u( Z X* F6 L$ ^% O, c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 ]6 w F; w6 c, M1 f- B
- m( m% |; U- F' `! K" `& Q
/* Write a 0, so that no underrun occurs after releasing the state machine */- s* b: \* r& \/ h% ~1 n! {( V
mcasp->regs->XBUF5 = 0;7 H& W3 ~7 w2 Q( U
mcasp->regs->RBUF0 = 0;
# ^( T$ `$ h# U6 Z
/ g3 @3 P4 @2 D. ~ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : x; L. e E, M& ~( z) z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 u( G2 `: X2 N$ K; V
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ ^# ~. S" O1 a7 q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% N* n: p5 ^+ @
, t. {. w5 P- F7 U1 m- L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! @: v+ d9 A0 }% r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, M- `' `& f! y& J/ ^& u mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' J$ w9 K. J' E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- _% S/ y! x9 t* w3 }: X4 d
& ~! B& s. ?7 P' C' o+ v% N CSR = 0x0000;
; T \8 u/ A$ I. p4 H+ J INTC_INTMUX1 = 0x3d;
. o ~7 T4 O2 H* k8 ^5 F) O% b ISTP = (unsigned int)vectors;
; H# u' U; d; }5 U( Z7 h$ J ICR = 0xFFF0; + T/ V& C* d/ W
IER |= 0x12;
* `0 s4 T0 Y; E J CSR |= 0x01; & _; I3 |, E# U" ]: F" r5 ~2 ]9 E" X
" l7 s' ~* P' n
& X+ V, ^9 T( ]* w8 p- ?
+ X7 K& d8 J' t还有就是两个输入输出函数:9 B7 V* y; U4 X$ t( |, t( p
void output_sample(Int32 out_data)0 r& _0 M4 b0 m$ a! e3 ]
{" u G$ z+ s/ k) X6 J0 I
AIC31_data.uint = out_data; 7 @+ n: L* K9 X2 `
MCASP1_XBUF5_32BIT = AIC31_data.uint;
" p" x) i0 w0 w O4 W" O}4 ^& d. e# Q4 G( @8 H5 h
1 N3 x/ P2 o. N$ j. Q' j1 [7 JInt32 input_sample(void)
( U5 W# A- a- ^$ x, f{ M+ \( Y9 n2 Z; r$ I% ?' D7 @
AIC31_data.uint = MCASP1_RBUF0_32BIT;6 G. H$ _' a x5 e$ p/ V
return (AIC31_data.uint);$ q0 M; m. N3 r' k9 V
}) w1 x2 I$ x8 O, p2 M' k/ b) s" U8 f$ |
! D- p1 `% J# k( |3 ?: X# T! J |
|