|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 d* F6 K* w8 @2 G& h$ M3 U
main文件:
V3 s) J# T$ E4 q* f) xinterrupt void interrupt4(void)
8 m# y% I$ V, r" ^9 O{
% R8 \- c. l2 h8 L Uint32 sample;6 B0 U; H" D8 y; W/ X$ @
3 \' U) ?0 F L+ k+ B+ }! v sample = input_sample(); // read L + R samples from ADC. C5 o |- m; U/ z2 t8 g' e6 a
output_sample(sample); // write L + R samples to DAC 9 m3 f7 C! u4 u' a
return;# v. E' d% E- ^' J8 p8 Y
}
. W2 w$ G' G' z% E; h8 E3 M9 _+ q. N( _! J" E5 I
int main( void ): \1 K$ T8 H1 B
{0 P0 Z7 h' m& U$ [) p
) z! Z( l. c; Y0 x6 o
/* Initialize BSL */
# x2 r0 q! ?: \ q8 Z EVMC6747_init( );
5 O4 \8 u5 F; j i4 m /* Call evmc6747_intr function */; E) g/ M* h. V: P4 N# z7 i
aic3106_init( );# T7 o; P- U$ [9 o: }1 o! ^
while(1);
9 {$ I9 p/ }2 s1 C& r' D6 \+ ^" U}
9 z8 J5 w! @2 }2 |6 p# c- T* f: D" e- E( R2 A' q" A
- G- Y: h2 a5 w1 \3 ^; z( {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' ]- n# b6 A. s3 R% ~0 W: `5 w3 E T9 [& b
/* Initialize MCASP1 */
, Y9 w7 H) j9 n, \ mcasp = &MCASP_MODULE_1;
3 E* S8 m( k7 f9 [/ k3 D& p% A mcasp->regs->GBLCTL = 0; // Reset
/ g/ \% p1 M3 J) R) ? mcasp->regs->RGBLCTL = 0; // Reset RX# D2 H% q; `9 U/ h* Z
mcasp->regs->XGBLCTL = 0; // Reset TX: h; i. ^9 K6 l' B1 A- ~
mcasp->regs->PWRDEMU = 1; // Free-running" F) [' B# K7 t/ @; ] T+ O
// configure McASP0 receive registers; s# W( z2 n1 F0 B2 K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; C1 H7 G+ E! p+ l% X
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 r2 H G* O, ?8 F, e& k
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 i k; A) t1 S- ?5 e8 _+ g9 c mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& c% A9 e' |: H Q
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 l/ X$ b- G+ J6 o( `8 h
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ o& _! d* v6 B5 U mcasp->regs->RINTCTL = 0x00000000; // Not used
( Z) M/ K" T8 s, V3 H; L* U mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( h1 [) W: t4 J, g# h+ |8 D
- D7 h, `5 V% r8 B3 j
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
2 I& x" x) Q6 D: @+ E j mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* L% u: y4 Z0 G5 A U* s! s mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ y+ ^& Y8 y6 P/ p; M& B" |% e4 W# ?
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* ]; r) G+ Y% ^4 U* Y& T' j
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* \# I% u5 F" n; J9 E T! a mcasp->regs->XTDM = 0x00000003; // Slots 0,1% \7 W' m0 l& _; h
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* a- ] Y" |1 T: g. r1 [) @/ V mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 q5 c' Z& b3 U1 A% i
* R; F5 r# E0 m0 D0 [! v mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' C M4 R: x# U' {- [: J' t3 ~
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 n5 f0 L5 A: i4 d( ^' W
mcasp->regs->PFUNC = 0; // All MCASPs, \2 m: e9 ?" E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" E s- A* N1 ^: `/ y' J7 Q
0 N6 U8 N! F% A; Q( } mcasp->regs->DITCTL = 0x00000000; // Not used
0 n- N" y. v. U8 w l. [ mcasp->regs->DLBCTL = 0x00000000; // Not used; A% |' I/ ^$ Y7 w/ g& l9 M
mcasp->regs->AMUTE = 0x00000000; // Not used
7 {7 F+ P4 H$ G) N8 A; v1 c4 J# ^- A' ~9 {: N* {
/* Starting sections of the McASP*/, F# s6 e6 R3 e4 F) C- J' M3 b
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , p! b% C" D$ u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, f# J( `: T4 S6 v U$ ~ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 W8 j# B# a! ~9 x2 H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& a( T( I! i$ F3 N" c9 ^
. H. o# A# R3 ~* s R7 {# a mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 }8 }7 D; S) K% X- u P* j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* L5 V' N$ G g. H% ^& _* K
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' P) ` ]- C* {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" d# ]# x8 V: w' K2 S. y. S! X( k# h& p. r# {3 Q7 K
mcasp->regs->XSTAT = 0x0000ffff; t# J9 d! V, m8 Z
mcasp->regs->RSTAT = 0x0000ffff;
5 K+ P5 a' W4 [. o9 p: z8 H# y, ^- \9 w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" W) \( |8 N, {3 O7 C% m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: C" P: |- q# a6 [$ _3 O+ Z7 ` mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) L# x2 z+ S4 P! u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 S+ \" I- W& v
# p: \% x6 I2 }, n7 V /* Write a 0, so that no underrun occurs after releasing the state machine */
' e! @& y; @9 q: o& V) L4 q M mcasp->regs->XBUF5 = 0;
7 L0 G, |& b# q2 M+ J. s9 m+ w5 { mcasp->regs->RBUF0 = 0;
6 f0 U* X0 V" |" r# {" F
- {" w" a9 w2 y6 q' l& x Q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 N/ s2 m- y; i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ ] Q: L A. r3 g& A: x/ g: ^( E$ T mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* {9 q& ?% w: `! u) t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 c; K- {3 k( m# V
. U) T9 G6 j( U+ _% g! g: M
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 S- N$ E9 q! |% z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! J7 `: d# O5 @0 J$ F- f, I
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- @1 z% ~& V2 J- V, S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" U3 F* u+ U% Z4 P) @7 f2 j
_( B2 s, M- }" k0 O
CSR = 0x0000;
9 ? b* P3 a) [8 F! \, Q% ? INTC_INTMUX1 = 0x3d;
- b9 N) W+ u1 {. l! x& [ ISTP = (unsigned int)vectors;; t2 }" C3 y$ q' h3 x* O
ICR = 0xFFF0; , |% l" Q2 Y* t5 q, G+ K( R$ v, `
IER |= 0x12;
' F4 \7 M/ l. u4 V, g CSR |= 0x01;
0 ~2 G+ g) S" x: l" R( D8 a- K2 A4 _! `1 N' L$ i- Y+ l
: F' m$ V$ u4 a5 O7 Y+ ^! j- \7 w2 I
6 O" D7 n& A" m2 Z+ a! M还有就是两个输入输出函数:/ \1 R$ q: t8 k1 K# K
void output_sample(Int32 out_data)
3 R! g4 H3 ^) K' }0 p( f{
8 I; M" X% \) n) U- C( h' ?0 K# q' { AIC31_data.uint = out_data;
4 X' _) _2 s5 ]% T MCASP1_XBUF5_32BIT = AIC31_data.uint;
. ], B; k: b8 S# z! @}
4 C+ @1 f+ D( S9 b1 b
) u+ q P( l+ h4 a7 cInt32 input_sample(void)
( M: g/ M2 |' k6 m{
; T- d- X- V4 b- B AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 _1 S# z* b/ z# M) U& l return (AIC31_data.uint);( N9 x: @% A& k
}3 @1 a% n' j$ l& A8 C. o
' v8 I4 t8 X9 j |
|