|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' u. h+ V4 {; }& b5 Bmain文件:* J" {5 u/ `$ s# e
interrupt void interrupt4(void)
. S5 s+ E) F9 |1 O9 f, Y) b% m# \3 ~{
! _- m: m' U ]+ f U Uint32 sample;/ A# M' \8 ]$ q8 ]- e+ }8 ^8 D
- P) f) s# N. }1 x* J
sample = input_sample(); // read L + R samples from ADC" A; s8 d' P* E' L3 c, |
output_sample(sample); // write L + R samples to DAC $ Q! V' h- E- H7 T- L3 o
return;
: l( D2 q. w7 E2 U- x0 }}, T2 t S0 p; x( l7 a5 E! Y
1 c1 a( H1 P9 p: R; M- P+ zint main( void )
0 Q- ? U% D/ K9 v" v{7 u1 `, d2 b& e0 r
1 \5 }. Y% b/ @6 | G& P0 y! z7 v7 F /* Initialize BSL */$ F! {; W8 E4 z. g
EVMC6747_init( );$ p7 B, }! n: J5 o) Y
/* Call evmc6747_intr function */
* H$ N, t7 h2 g: w aic3106_init( );
( b: v1 M! m$ N$ D H! `8 ^ while(1);
, K+ d& z$ m7 m3 a2 R1 \2 c}
/ H' P% h! _" [3 y' s4 Q/ h# y
{5 N6 ?/ Q& X/ ~4 \( ]* Z5 ?0 J& t- B5 \ z" @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 W; K# P/ `6 L5 n2 Z. T. y/* Initialize MCASP1 */
7 H# H/ W) z; u) ]0 n' I8 O% f mcasp = &MCASP_MODULE_1;* P, c/ [+ b& @% {5 E
mcasp->regs->GBLCTL = 0; // Reset
# L0 ]. D. } W7 N: ] mcasp->regs->RGBLCTL = 0; // Reset RX
; @% v3 s" v* @( j h- h mcasp->regs->XGBLCTL = 0; // Reset TX6 V% F& _9 ?4 w. j$ P
mcasp->regs->PWRDEMU = 1; // Free-running& y6 O9 I9 l: G: h! S
// configure McASP0 receive registers6 y+ \' g6 y& O; @
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 w" c9 q+ E, W- u# Y# E( L" D mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 b& d& a& q6 t5 p9 b
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: |" u5 _7 ~2 I6 c* m! ?: T/ Q! ~ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 o- F/ k, o' a/ y4 B1 r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), a9 ?* K& d, ?7 `
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
" E$ ? E8 [% p4 o& | mcasp->regs->RINTCTL = 0x00000000; // Not used* r6 e! n M; m7 J( G! ~! _: H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 F- G' b7 K3 H: ~6 f0 L( W( R
7 f4 P0 Z4 n7 n. N mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
t6 J. C) m$ q- B% P mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# f- x h4 k* ?( V
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 |5 L& h; H: z, s4 z+ Q mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 ?' |0 b& Q& `8 m8 `3 `
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK# v# F- b: a! G, h
mcasp->regs->XTDM = 0x00000003; // Slots 0,13 K' m: f( Z8 F% m: H' G' O8 [' {
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) M. j" y' k+ O; n mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 `2 K" h- F# I, ^+ O2 e# i3 g* R2 [& @, t7 ~) U9 Q6 E
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 A. `% b3 [2 O: y! a z+ B1 D/ O mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' J- e+ W4 @- T mcasp->regs->PFUNC = 0; // All MCASPs
" e! E r) c! G: o- I1 Y0 t" i3 b mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 O6 ?- m S/ S* A% o9 N0 N
6 _2 s9 S) h$ ~. S mcasp->regs->DITCTL = 0x00000000; // Not used
9 _$ @! X# E! B, A3 B. y1 _ mcasp->regs->DLBCTL = 0x00000000; // Not used
5 h( H' O) w* B) P0 v9 b( W mcasp->regs->AMUTE = 0x00000000; // Not used
0 j$ o8 W2 Y4 q
- R! H2 D- h2 m* k) V+ K/* Starting sections of the McASP*/0 m& i+ ]9 i0 L5 a, `& |
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 j. ]* j" a9 O+ S: P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # B, H9 F' I) \" o( ^6 F& I
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* H! S/ e+ a6 z p4 E1 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' T" B# u% c3 W
, T0 o8 j& `, V9 z mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 J# u0 E6 \% {" s1 {. d7 K9 i- i% i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
q R" |' a: j" H: k mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' {7 D9 J6 A. [% a U! X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 S; Q# f# u' c0 O5 L \7 u$ }7 I. a* x! j% ?2 O* p! {
mcasp->regs->XSTAT = 0x0000ffff;
; i: X! y3 S# j! D2 B+ Q7 Q) } mcasp->regs->RSTAT = 0x0000ffff;
. a% n i7 v- a/ B+ y
: K7 \1 B, j, f. f mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: ]0 b& @( y5 V# m$ C2 R/ `% G3 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 B" G7 Z( w9 E/ g/ c6 j% w6 ^ G mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 X/ X' d& ^. X9 |' }4 U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. b1 H4 R0 c8 s0 h9 p% S, F, I( E6 b) }7 u5 T: u2 m6 D
/* Write a 0, so that no underrun occurs after releasing the state machine */4 q3 i( Y; G4 @* ]( ^% T; u+ s3 l
mcasp->regs->XBUF5 = 0;( j, W1 k# k& `0 K( R6 ^: ^7 Z
mcasp->regs->RBUF0 = 0;
2 n. T! {! A% y, a7 |0 A6 W1 I/ a" w
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- ?% G) W1 I! \/ X7 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* I p4 x- R: `% A* w/ B
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ B7 }# H3 K9 y- u/ X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 d( ]' g% U4 E. b
7 Q$ d% y! S8 y- G; Y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 |+ k: T$ B9 ^" m/ g0 Z$ q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ I8 u' d' _9 z+ X# G
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / n, ?3 {+ b* N+ i6 r m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 V! F- {5 `/ I3 f' |! v
' i. ]# ~: A# A% ^$ g6 y CSR = 0x0000;
, j* ~, J2 F c$ J- W" J INTC_INTMUX1 = 0x3d;6 D" I; l& i9 \4 x/ j
ISTP = (unsigned int)vectors;# ], Y. v% V* V1 [4 l, j+ I
ICR = 0xFFF0; : S4 f% V+ l+ \; z
IER |= 0x12; $ X0 M8 m# ~4 r5 l! J. r0 @) x$ C( }
CSR |= 0x01;
8 @) n( H+ d. C' a& e- N; _* b) Z& s2 c! Y- T/ o& h1 K0 X
8 m6 X$ Y# @7 D; ]! D1 T
; v* \4 L9 E* w5 N5 a
还有就是两个输入输出函数:7 N2 ^' A Z" h" x, s
void output_sample(Int32 out_data)9 @+ i2 m8 @' g2 ?9 i U) q
{
l5 t- a# _- P( N1 X) n& J/ Y AIC31_data.uint = out_data; 7 E9 p0 W/ r7 r) a
MCASP1_XBUF5_32BIT = AIC31_data.uint;
& Q" a. D0 l5 a# }9 @( \}
- h3 k+ r5 `) k$ C2 Y( V9 _6 c$ J$ K+ f* H! c# d: n3 [$ u6 L
Int32 input_sample(void)+ C, N% F1 r# i* R/ o! R; X0 M
{
6 e% E2 R5 S/ g- {) _ AIC31_data.uint = MCASP1_RBUF0_32BIT;7 c. f$ F6 y& K# G6 C
return (AIC31_data.uint);2 M! H0 A+ Y9 v! F" T
}6 E1 E6 M; [& a/ y" D) n1 c: O
' t5 O7 i! z+ G( L6 b3 c
|
|