|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' v: T- x& W# \3 w6 Cmain文件:$ I) E' h7 d0 q) ~2 N8 _7 _% R
interrupt void interrupt4(void) % Y! H5 g+ J* v# j4 q# [
{
, B" }0 t. s" n, d Uint32 sample;
! B2 A U- U) k f$ ~/ v# I: [) l }
sample = input_sample(); // read L + R samples from ADC+ M% Y8 G3 H* }$ D8 ^$ V- H
output_sample(sample); // write L + R samples to DAC
0 W. P: @6 n( D( l5 N! B" Z+ N" a* D return;
" K" P# c2 Z) A0 X5 ]9 M- g8 W}8 _7 B2 C% A0 h/ {( |
+ k( @2 S+ k! a% i
int main( void )
' P: ]9 ?7 T1 Y* E4 c& y" K8 w{
8 K$ c" a" O7 j* F/ h8 J' A
3 s# l, a; x6 Y1 x% } /* Initialize BSL */
/ c( H) g) }8 w8 H# j; c0 y' } EVMC6747_init( );
@' ^( u/ s" n( Q c /* Call evmc6747_intr function */
! D/ g/ T5 I* _6 a aic3106_init( );
, ^$ W' T/ L+ b; P2 n' a while(1);( o; |9 m, ~: ~1 s0 L5 X
}
! L0 U7 O' m( A7 i5 [+ l0 A6 z- Z; e5 t( k* \
9 D, I( V" ?5 U* @* I9 g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 Y+ l" e7 ?: m, y* Y/* Initialize MCASP1 */& N* r+ l( N/ L5 v
mcasp = &MCASP_MODULE_1;* ^) x* B' V H) R
mcasp->regs->GBLCTL = 0; // Reset
/ ?! H) ~* {3 l5 t' j" x mcasp->regs->RGBLCTL = 0; // Reset RX
- a8 E; X( J0 w" I; l mcasp->regs->XGBLCTL = 0; // Reset TX
( q1 [( v7 W7 h+ n3 a: A+ X5 N0 w mcasp->regs->PWRDEMU = 1; // Free-running# c S+ v4 ]) h& Y/ L
// configure McASP0 receive registers
. F( |( S Q8 m% r5 T6 ^ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ e: G0 d- A- }4 E
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 U% X) n# \9 f3 P/ B
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- J) w( K: n6 d8 Z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( }4 [, F5 y, |0 a# T mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 G% t3 N! k& I/ W& A4 t4 p% h
mcasp->regs->RTDM = 0x00000003; // Slots 0,14 q9 d8 G1 a6 n, M3 r& o0 [! {
mcasp->regs->RINTCTL = 0x00000000; // Not used
# r! m! J; {. Y3 n mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& K8 [2 ^5 B3 G' [1 H
3 D# P0 N0 O: `1 E0 Z
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used& F4 O+ i+ g5 z2 a* A& [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 n7 m* p2 Q1 H O2 d' N' z8 U
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" i2 `4 p* \! T- z: F mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& O9 B. M: U' B9 X/ I8 ?+ l mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
1 ^. \ E' h$ E+ r* D, Y' p1 ` mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' a3 ~% T. K: Y+ `% V mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 d/ a. T8 Y' Y8 E, @
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* d, B4 {3 f! X% g" J& \
5 G2 J& i' E0 ~# D3 J" P7 Y" ] mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( z5 X% O/ a! D
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 w# }8 p7 W' ~5 m; r p mcasp->regs->PFUNC = 0; // All MCASPs4 s# ~6 |3 r' m
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. j" E; J2 o: z* _8 ?2 G5 o7 _* x" r# s; C. _
mcasp->regs->DITCTL = 0x00000000; // Not used
9 C# H; Q4 w; ^" H5 S mcasp->regs->DLBCTL = 0x00000000; // Not used- H2 n* W# l$ ^: k$ O$ f6 S) |
mcasp->regs->AMUTE = 0x00000000; // Not used$ J; U0 N0 H, e1 H# E$ ]% a% e/ r& p
- l3 s. j, O- a$ u* U, K0 R
/* Starting sections of the McASP*/
" ?4 ~$ t ~6 H5 t mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( F" ?( i; C3 ^6 E5 W' m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
: R/ }& N/ L& i! l/ |* j. m, n mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 S+ s9 }" h6 }+ y1 }1 @- U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, s7 r+ r" |" k+ v3 G i* ?9 U: A8 @( V: R' g( R5 ~& |, i5 h
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% [* C/ k- E# z. |$ g' U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 i6 b' T6 s$ |3 A6 k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - h( A& G; P' s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* C! S; X* h" ~( ?" c3 H/ J0 Y' w
1 c7 S. W) F, F mcasp->regs->XSTAT = 0x0000ffff; 9 `& r1 Q7 N" Q. V3 X. a
mcasp->regs->RSTAT = 0x0000ffff;
1 f. G$ m2 b, c
2 ]3 B; U; w& y% R mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 A) Y9 I5 q$ B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, z- B* \& V- b" k# P mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 w9 u6 m5 V0 I: l& x( x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) i# _0 F+ C5 @+ a( k2 J: w6 \" B$ G; M) ]+ Z; N: V, M
/* Write a 0, so that no underrun occurs after releasing the state machine */$ N o* h; W$ @# g& \
mcasp->regs->XBUF5 = 0;- s- }- B) i: H' [- {2 D3 z
mcasp->regs->RBUF0 = 0;3 C# y# K- [5 y9 y$ I$ b: s
1 P$ Z1 M3 {! S e4 ~, d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
i# D% O! M( G1 @# K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 s. @/ O+ x. A h4 F
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . l! w! K L0 P2 }$ Z# [4 Q& ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% w+ S( ?* W2 g& N3 t5 y& t' A3 c' i& ~( ^0 A& ?
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . n! ?1 C. ~+ i* s0 T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& l. _* n) i2 R" k6 r Q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 ^1 w; G' L6 G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# o0 ^4 H4 v* |: k' |# `* P+ U2 W* E- ]
CSR = 0x0000;; R" F& V9 b9 r' D/ l7 |; D
INTC_INTMUX1 = 0x3d;
- x+ ]( F. x# q% n) U8 ^! O' C ISTP = (unsigned int)vectors;
) [5 } f6 f( k' J, T, r' y4 { ICR = 0xFFF0; 2 S. a) n X0 s0 P: [) _+ E
IER |= 0x12; ( U0 y3 e! t. ~* B4 Q
CSR |= 0x01; 0 O+ @& d. ]2 r/ X( J
* g: t! w- ~6 I" @5 R
, h' |) i6 {$ I- a% v+ V$ _
3 D; Q) ?- ]( ?" y还有就是两个输入输出函数:3 s9 M& U, Y; t# i2 O$ y6 {
void output_sample(Int32 out_data)" O* i, z) t5 S" C8 E
{1 ]- e0 ~9 x3 t& t3 Q2 z0 P. z
AIC31_data.uint = out_data; 6 `6 `9 L# X+ k- [, d! s4 f
MCASP1_XBUF5_32BIT = AIC31_data.uint;# }$ I# p! k' U: q, d+ k1 E
}
2 S* Y. N; ^7 |( `" t0 X! W
! n* S8 Z& G, X% u* B. g, @Int32 input_sample(void)
5 L$ D- W: u' Q Z7 B{ ( _! J9 r* v! W# [, A) A* B! z
AIC31_data.uint = MCASP1_RBUF0_32BIT;- z L' B0 W0 Q& w9 U; a7 U8 U
return (AIC31_data.uint);
$ ?) q ^+ q0 R7 y}
2 z8 g6 s7 |! B* {, B) f. t0 v0 H) L9 o
|
|