|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) \! y' _9 A/ I M
main文件:
) \, T- i3 o6 R7 S& U" Pinterrupt void interrupt4(void) ' l, A: |( e2 J6 `1 H; d
{
8 V% {7 i$ g) `# Q$ V Uint32 sample;8 ?4 i4 {( j$ q5 K: Z! n7 G
; \. ?, S | N* z3 K
sample = input_sample(); // read L + R samples from ADC
& g( U0 C* Z. u output_sample(sample); // write L + R samples to DAC
7 L& ?1 o1 ]: S1 Q9 r# y, u5 L return;+ c, F) I. V* j4 c. i: r2 @
}
) Q' U; e1 H7 w! @; N; v/ k8 ^! {2 Z) H6 o
int main( void )" D8 t5 {) K9 Z- U$ C8 M
{3 {; _& x( f! i' U2 `* H
0 R2 v3 l8 Z% V) M3 a, ~ /* Initialize BSL */
/ t" Z) N- Z& `# q1 w. m EVMC6747_init( );" I; w4 B# |, G+ A5 M3 `
/* Call evmc6747_intr function */9 d' b P+ Q% `4 T
aic3106_init( );
) n0 G3 K) S6 p6 v4 n while(1);
0 P5 x. _- P$ G( e}
; ^$ u: d( R6 \- O1 j) x& T `" |6 l! ~1 @2 H; p
. y) E6 |& x# V+ ~0 X) x4 u2 saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: ^) ?2 R5 f6 `1 \7 B/* Initialize MCASP1 */
9 R- b! }% M6 j% E: H$ w mcasp = &MCASP_MODULE_1; N5 L! x& T% {) b: ] H( r
mcasp->regs->GBLCTL = 0; // Reset7 U8 \; Z- T3 y
mcasp->regs->RGBLCTL = 0; // Reset RX2 `1 d6 d. t' c A
mcasp->regs->XGBLCTL = 0; // Reset TX4 w, d# I3 W! p" J3 F1 m# x9 Q7 E
mcasp->regs->PWRDEMU = 1; // Free-running( b" ?! C: Y9 ^2 l6 J# R+ o* o( J! T% C
// configure McASP0 receive registers
* a" ~8 X) N3 Z7 c9 J; e4 b mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used {/ W2 Q; X6 z' H& K
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 `6 V4 i# c, d! G7 N
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; _+ R, E1 C. b0 r
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% o) V3 i! t9 z+ n/ ?% b# d, J1 z mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% C8 K1 U l: N, i( m5 t! B- a- b
mcasp->regs->RTDM = 0x00000003; // Slots 0,1" b$ z0 @* H4 ~. ~( e) {) ]4 u
mcasp->regs->RINTCTL = 0x00000000; // Not used
# r) n& {5 `5 p5 C6 ] r mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" R& W3 d u% G& \& J, h
+ p6 Q( T3 t3 u+ r& _7 g
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used* ^) {) o, u% e' e: |. E4 i
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% }2 N( }: }- ?: k
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( H( r7 a' p: w8 ?, @7 K0 z1 f mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' Q* o T: y' Z- j8 m' r
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, s' `! `" S3 `. R9 K' X
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' Z% t) L w9 [; q9 l Q mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) I5 p! z! } n; d a" Z; U
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 U5 d+ a- J; ]2 M3 m; `4 _3 ?) n: x5 r, c3 o" h5 C
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, X- P) _$ W& j- p5 ]5 g
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( e3 N7 P6 [3 Q9 d O
mcasp->regs->PFUNC = 0; // All MCASPs9 q" q1 R$ W. ]' {# W' Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 a: @. k/ t$ X
5 ]; e5 B+ r5 q5 y$ B4 a
mcasp->regs->DITCTL = 0x00000000; // Not used
% t- B* F8 E. m; {: |" e mcasp->regs->DLBCTL = 0x00000000; // Not used
7 c5 l9 H( d. J' u4 l: _ mcasp->regs->AMUTE = 0x00000000; // Not used
- W2 c7 s' k$ c# |( Y P) z+ e7 T9 y E! W! D. p
/* Starting sections of the McASP*/
- ?- X U' ~5 {) G! V# z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 X1 c; X7 J% { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& r; } u/ O% V/ G mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + }# D- [ V- a' ]. ~7 J, o* ?) a D4 B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* K) ] w- x2 x7 r# X2 H$ s( }, v
. j# o: X8 T. I, u+ r: M6 L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: y1 C* U% o. ]# U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: w) O) K! }/ y+ R8 w
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! E; @, q4 ^9 r2 S6 D2 ^$ c9 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 u0 Y: t2 }$ T2 E3 w0 p4 p8 O7 l+ X1 d8 d4 Z6 j
mcasp->regs->XSTAT = 0x0000ffff;
$ N+ R# @1 x) C5 v, \ mcasp->regs->RSTAT = 0x0000ffff;
7 Q3 _& X! }: C* I# w$ H- }1 i3 G8 X2 ~& T e
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) T, r" P8 y8 q, J4 K0 C0 } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) \, n9 ?9 D& M4 r mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 i4 Y& F2 i" P( Q( r' h2 J' f) X% w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 n; Y; I' J1 d& Z8 `
2 L- [; ]4 ^! S |( e- t' E /* Write a 0, so that no underrun occurs after releasing the state machine */
# }: _8 O" Y9 X% o: C0 z" t9 I mcasp->regs->XBUF5 = 0;% k! ^ C6 ^$ X
mcasp->regs->RBUF0 = 0;$ N6 b3 u! X6 v. `; g
% f! [9 X1 X- r! R- X" Q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& ]6 H6 w+ v7 ^/ T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( r( ~0 j w) x; W* T
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ K: H% a1 i0 R& j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& z: C- k4 a. @' m% F( ~' v$ w& ?' ]0 ]! D" [$ A! V- J. A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( A& ^& x" W: M* F- _/ r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); s3 Y7 e# m7 s+ i F
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 p& v) [# @, C9 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 N* a: }, [9 a7 O1 _6 g* C, B$ u- |
CSR = 0x0000;
, R8 I4 ]. Q) x2 X5 b INTC_INTMUX1 = 0x3d; G- l+ ?! y4 h& v. @
ISTP = (unsigned int)vectors;7 v5 H) `5 X8 d- O0 D) O. K
ICR = 0xFFF0; ( O" Y. e' m4 r; n1 G
IER |= 0x12; , w* \- G$ w# l5 l0 |
CSR |= 0x01; 6 h+ j. k1 `; S: x0 n* a3 h# [
7 s+ z/ T% e+ p1 a+ _( W& @4 c8 C0 Y+ [. _
" |. @6 j% w. k; S. K还有就是两个输入输出函数:' h; U5 q3 r+ L# |; G) n
void output_sample(Int32 out_data); f G% J# N% E) N7 M1 I
{: ^1 f( H. l+ R) ~
AIC31_data.uint = out_data; " Y0 D' ?' n- o7 l! \$ E
MCASP1_XBUF5_32BIT = AIC31_data.uint;4 U0 R* N: I' D0 ^% z. p
}. b# A0 ?3 T) C. M3 r+ B
6 u2 [5 @, ]4 R6 g! a, yInt32 input_sample(void)" m3 I! E2 f, _; f! D; {
{ / u" f, i$ U4 A& T0 x' J
AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 F2 M( L9 {: _* U0 H return (AIC31_data.uint);
6 Q* P' E& A% @# A) @( X/ @4 p}
$ A7 G4 B& ]# i7 V# ^- e0 k# }' B0 T" \
|
|