|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* x% ?( N, e7 O3 p& b- `& imain文件:
: E* y8 Q6 a% B/ N' G' E8 {- ninterrupt void interrupt4(void)
3 `, P' X( D8 l; O" E{. D$ {+ X/ D. Q/ g
Uint32 sample;' S" Q; }; i4 |/ e3 w L* S+ o
/ y1 g# d1 {7 G% I. j& U- m7 g
sample = input_sample(); // read L + R samples from ADC# I, s6 ]3 c% U( O
output_sample(sample); // write L + R samples to DAC
4 B; x |9 @% b) H5 }% ? return;: r- E- ~4 |4 ~* m8 r' Y3 m- F
}
# b/ v& I* d) j, j1 X" H; H$ Y4 e( Q4 s5 ?3 g, k
int main( void )
3 o: [8 [& i/ {" ] _{/ V4 b& b1 q& p# V5 S0 j
" h& G; s5 U0 ]* u5 e, N /* Initialize BSL */) u0 A/ V9 a6 V' c! F7 Y: C7 e
EVMC6747_init( );
& l/ F# K7 z! ? /* Call evmc6747_intr function */2 D: g9 P K e, z6 r( R/ n+ B( G( Z2 K
aic3106_init( );) U1 e, K% x$ k" K
while(1);
4 X" w1 G* R, ~# F2 X}$ q3 l3 b2 `! s+ Y6 P
. l7 F2 z- t: J9 A9 ~3 [
1 J. k; g7 V Caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
[- \0 l8 y) n* t9 x3 E/* Initialize MCASP1 */7 v- ~3 j+ P$ s% N8 a" Q
mcasp = &MCASP_MODULE_1;
9 {& }% [ ^3 K, }; p0 [6 R: U9 F mcasp->regs->GBLCTL = 0; // Reset
* a+ I- l6 o- r0 e/ r, ` mcasp->regs->RGBLCTL = 0; // Reset RX h5 Y. C' B' w. V" c E( O
mcasp->regs->XGBLCTL = 0; // Reset TX
0 S" J3 k- M& H, [$ ~4 V mcasp->regs->PWRDEMU = 1; // Free-running
o( {$ S( |8 A: p // configure McASP0 receive registers+ K% @& }, i- e. M C' \
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 X8 r9 A. g( [ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. P9 U5 Q+ t$ h F' j mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- ?4 F/ G& Z4 u
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ v* p* w, c/ I
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
1 O! ~# l1 |! G% ^7 b' v/ G mcasp->regs->RTDM = 0x00000003; // Slots 0,18 {3 Q* L* x" ^6 x) x6 A9 x
mcasp->regs->RINTCTL = 0x00000000; // Not used
6 x$ B/ z7 S/ H9 i5 m k$ r mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( R2 J- p; r0 q
0 C) V/ j( f' |4 F K0 d3 t mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 ?+ ^" w, r' ^# m! q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 ^/ Q$ y+ a) h0 C8 `) ~
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word U; S7 v0 Y+ t( V* l8 `; B3 U
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) c1 y& g9 _9 [2 [% y mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 A1 ?; b9 l% W
mcasp->regs->XTDM = 0x00000003; // Slots 0,1# V! q2 e: ^0 n2 r' ~3 n2 z3 B
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; ] _5 i+ `6 e- ?# X0 G1 M8 G mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% h( q% G2 \( @8 g. H* P8 l! s# D
0 J! q, H% v/ L- E. Y mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 B2 A& Z+ Y/ ~4 ]- T- ^ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 |% p$ k2 \# o) e% b( s
mcasp->regs->PFUNC = 0; // All MCASPs
: ]3 v( k* m# D4 b: L mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 F/ e, J& @, m
" x, r: U6 t# e7 y# `- n mcasp->regs->DITCTL = 0x00000000; // Not used
+ {' M- g9 X: g0 o4 w2 g" j7 c mcasp->regs->DLBCTL = 0x00000000; // Not used
% N u% o) M& |: g- D2 E2 L) @! z mcasp->regs->AMUTE = 0x00000000; // Not used2 \" O% L% J. z6 }4 i- _
, x, ?9 Z e: _( Y1 N/* Starting sections of the McASP*/
D q; C4 |7 y& ?7 o/ T# B# S* S mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; _! u+ E$ s6 o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); + C' g. a) l4 i
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 O9 a" W0 F1 O/ V! N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' }$ T! y: P m* z7 H7 g5 D
5 {; ^+ L( S T8 ~: C8 F mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' _1 u. `" e) q a+ ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 I; x$ d/ s% X1 ]" K, W; } mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . n4 r0 P! I- E; c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 m/ o2 A( m, `7 u3 Z% U
8 P) |, z1 B. ~4 {5 @
mcasp->regs->XSTAT = 0x0000ffff; " x( T$ U: H6 G& }5 [7 O
mcasp->regs->RSTAT = 0x0000ffff; ) x6 q, Q7 x9 m$ B9 Z
3 [9 }* m; B, r6 V3 g' R1 t
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 D+ W- o2 D. U7 o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
C' D5 W Q% @9 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; Q2 W3 ~- ^4 `+ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; C& g* ]" W$ e6 q1 [- g) J- M6 T' A* }* ]4 d) i- H5 G! O
/* Write a 0, so that no underrun occurs after releasing the state machine */
/ ]; @$ J9 G% T+ ^' Y% P$ W( h5 ^. t mcasp->regs->XBUF5 = 0;
: p/ e+ {9 k" G6 J$ y' l1 ^ mcasp->regs->RBUF0 = 0;
. v. Z8 K1 H! d' ?4 i/ f6 `7 I8 i: {7 `% T- J2 B! z/ f
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 A: w! ^- J7 q. k4 r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' f6 ]5 e# q9 S9 x& E
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 K# S7 l6 x& w: k% l2 V! w1 e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ N6 o" i) r( y6 v i
- E" s8 R& v6 J
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; @7 H% ^5 M" c+ \, z' F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% r0 H+ O7 o5 I& y! S mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; J$ k: X# {6 e: m/ }* n. {6 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# R: O6 H9 f9 i+ q* z6 t, O
: s% v* q4 V0 [0 U) ^& p CSR = 0x0000;
$ L9 H5 U: t: Q) ~ INTC_INTMUX1 = 0x3d;
6 H+ e8 x+ m0 ]( t ?4 Q) X# h1 ^! ` ISTP = (unsigned int)vectors;+ d2 R% H5 i* k" j8 C
ICR = 0xFFF0;
% S r% S( m+ [. N( b2 `+ z IER |= 0x12; # }; [6 `! r( V& F, {/ z+ j% q. e6 R1 S
CSR |= 0x01; ! g7 p R7 r, C' y% f) H" H
* s+ }0 c' L9 _1 \
* z1 D5 m4 S) _3 P- t
& O, y) K$ \( t# k
还有就是两个输入输出函数:
- `8 J! \/ Y o. Y2 i9 r% R4 lvoid output_sample(Int32 out_data)- l+ S% d7 p2 A) M
{
2 h9 [# A% @0 J: M AIC31_data.uint = out_data; 8 ?, L% J3 a, f( l" F
MCASP1_XBUF5_32BIT = AIC31_data.uint;* x% e% ^1 \0 Z- N9 X
}
- h$ X" F( p% X( p [ X, C9 x
0 ]& ]0 w6 \2 T% w4 N/ I, }' QInt32 input_sample(void)
3 t0 }. A- V! A+ j) a2 ~! ?{ + c9 J+ q3 p5 ~5 R6 n' ?: _
AIC31_data.uint = MCASP1_RBUF0_32BIT;: l9 q/ Z! E6 U2 b8 Q* L/ Y
return (AIC31_data.uint);
4 y/ z9 _8 U# C8 {/ V2 e# {3 j}3 E+ k) @3 p' y" m5 k: e) B! x
/ Z: U+ R9 D2 k! z% B |
|