|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! n, Z) c9 U0 omain文件:& r9 _5 T/ h6 l- [$ M' }7 }- _
interrupt void interrupt4(void) ) C/ u0 y* V8 I4 t7 n2 D8 s
{) x3 R- ]3 B( ~$ j
Uint32 sample;6 A. C7 o! a' G9 z8 P! B
9 O" C" t. D& f* [- Z7 f; k sample = input_sample(); // read L + R samples from ADC
+ V, K9 H) `* @2 m9 j; C% J: ` output_sample(sample); // write L + R samples to DAC . W+ z m" z, q2 x; L$ d+ a' M$ b
return;) P% R8 o9 z ^$ g
}
0 X4 s- `6 R; q9 b7 l) O1 u1 x
4 _/ g0 o; U1 W2 K A1 bint main( void )
# k, Z( M( p7 S2 |+ H. q{* W% W( _3 Q- c4 Y3 u
9 B' ~3 l$ Z4 A4 M /* Initialize BSL */+ Y- l5 y2 N' {% X
EVMC6747_init( );3 n& O' r* H3 R' ~; _
/* Call evmc6747_intr function */& Q4 A1 q: ^: G, }: r) t
aic3106_init( );( y$ y# }$ Z. N6 W6 r
while(1); P; B9 {. V* I% W# D& X
}1 Q) o" |* q, x+ k, J: l
4 F+ N* U. ^8 T& O2 H& u' N5 I
% D$ d/ j7 W4 T* laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 ~& ~0 ^0 y1 p/* Initialize MCASP1 */
+ V \* L: R# L/ ? mcasp = &MCASP_MODULE_1;
/ {' X f: V; c; J# s mcasp->regs->GBLCTL = 0; // Reset
2 B q$ H% x9 t* H mcasp->regs->RGBLCTL = 0; // Reset RX
6 N' v! e3 z6 T7 R" s4 g9 Q+ E mcasp->regs->XGBLCTL = 0; // Reset TX( o2 q. {$ c M, ~ M6 n1 u& n7 \
mcasp->regs->PWRDEMU = 1; // Free-running
9 M# R# t4 [1 X9 Y+ l# h. C" d // configure McASP0 receive registers
( T+ G {, F; L: e- d: r mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 x/ [* _/ k5 d ?8 P! u& X5 @7 {
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' r& J3 Y% G8 G mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
}" E# `* ?9 l0 y mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! s# H- `: r7 T2 x5 v8 n8 l. G4 G
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, j5 G2 J) ?/ z8 |! p+ h$ q mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, k, c# |$ ?) @: H( T! g0 T mcasp->regs->RINTCTL = 0x00000000; // Not used
6 d. T$ p* U6 q7 x" `4 { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ E0 s2 h# Q, \% V3 j
+ [$ J$ I. O* X0 P4 X mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
- q9 E0 C9 g0 a2 N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- u% I+ [3 [) X# \$ t mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 R1 I2 C4 T* O9 T mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% d' i/ E& X8 q1 I" v9 W+ p# f mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) {+ b) i$ ]$ M. D& Z1 x9 b mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 P3 N2 X, a9 a6 b7 m8 | mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; g2 o4 j% Y `6 K! U* e6 @
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* O1 C9 ~4 j# O9 J
# e3 b0 G+ I( l0 @# ~' F mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
2 j8 B6 [* N# C mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 L% s+ l; F/ U S5 c6 N6 x0 u mcasp->regs->PFUNC = 0; // All MCASPs ?" _! F) `( `" i1 X( \9 J
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- ]& o2 a. q+ [; U. L; n8 e
2 |0 W3 E$ d: b6 P+ q; {& l) S mcasp->regs->DITCTL = 0x00000000; // Not used
" [( S! ~5 b9 \: A1 M6 A mcasp->regs->DLBCTL = 0x00000000; // Not used5 Z7 C! |+ c! b9 h' u d
mcasp->regs->AMUTE = 0x00000000; // Not used
" T- L6 q0 z1 `4 k1 Z
; g8 k7 L x# A/ r( @+ {! p/* Starting sections of the McASP*/
P- b9 Y, Y! V, Z5 ~$ D7 j mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 n( c9 l% A4 M6 r# K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
: O! t/ ?% r( O b. {" J mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 U1 ]* f8 z7 Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 @3 Z& v. r- ]% E# Y$ F
: }- n5 c0 F9 X4 u1 v4 G5 ]( } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 Q$ J9 P& k" L. y+ r2 b9 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; L; n* `# _6 o' }* a5 L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
f z% m$ @+ {1 x& l. u# o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: \2 M; a3 Z; j4 t- E, }/ r
+ @, Q6 O8 q4 v! j7 K mcasp->regs->XSTAT = 0x0000ffff;
1 n5 w n% S9 B5 I! F, V$ N+ ] mcasp->regs->RSTAT = 0x0000ffff;
( a% B9 R. i6 v4 P6 v4 w" s- K- _6 S$ z6 h( M# b2 q3 _8 L
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, M! P* J6 e+ U% ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 V3 d# Y# p( F! t3 j1 N mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 J/ J5 e0 G( S: K+ J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( M, Z4 l0 K6 g; O# d0 p8 X* b" K! T' k
/* Write a 0, so that no underrun occurs after releasing the state machine */3 c. D" [" w' \$ ]& v
mcasp->regs->XBUF5 = 0;; f+ F) {; V; |- K/ }, i
mcasp->regs->RBUF0 = 0;
& `7 _4 \2 b1 b3 R2 _6 W& H# K, _3 L# g4 ?! |5 Q0 I" {. H
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# _% J7 \5 m- y7 I: G7 x4 l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
h8 g" t, |0 y" J% a mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 L2 O+ y" s1 a! {. j& a0 Q1 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 t6 A) g2 q% G+ M4 H) O2 D' [1 j0 H
' `# R8 |1 V1 ]6 c- f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 {- t# V$ |8 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' `: j! m/ s2 P6 I/ a2 R& T
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% y4 a9 o* I6 {% \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 h( H$ X3 t- e) b
3 }. J' @* n/ J$ r2 s6 h( p7 K
CSR = 0x0000;
! s" t& h7 G) t Q8 l INTC_INTMUX1 = 0x3d;
+ ]; m' y" O2 ?8 f, f7 L ISTP = (unsigned int)vectors;) c; x' o6 k8 {( j4 @
ICR = 0xFFF0;
/ i: Y: w' @3 U# P6 I6 X+ C3 j! _3 p IER |= 0x12;
" J# C$ }( [ U" R3 W CSR |= 0x01; ! A1 i( t' R* {: c8 j( J! ~7 a
5 A1 V) U5 }# H5 [. d3 i- {
/ x8 t+ ^) ?4 T' U
; {" F, D* J* A9 Z0 P( h1 d还有就是两个输入输出函数:
: a( ^* ?* |' Y% u4 d- Yvoid output_sample(Int32 out_data)
( L7 j2 |. W8 f8 {! p{
0 ]- e* C4 i2 `: h+ T6 ] AIC31_data.uint = out_data;
$ B- h9 e6 d& N9 S$ ? MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 F+ J6 J7 K! Y% O}
$ H9 O$ y5 [- e4 ?7 w8 e3 K" A+ L0 j: U* t: m; {
Int32 input_sample(void)2 O2 }8 L3 a& b0 L7 o
{
' T t5 ?) ?' b% e9 C AIC31_data.uint = MCASP1_RBUF0_32BIT;4 @8 X% I! j% h5 D! \: i+ V& v
return (AIC31_data.uint);
+ r8 y5 ]. c; X4 g p9 a}
7 h. S& i% ]9 |! S; g1 h3 i3 A0 U0 J9 `6 e
|
|