|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 {! C* `( y; S! M1 t0 k
main文件:# z+ E- s) \, B& m: ^
interrupt void interrupt4(void) $ a1 L; a' r" g0 H4 Q+ a
{' b6 l: I" D# M& [9 y: b) |
Uint32 sample;
5 I) W! y$ a: m2 s. I- c2 u
( y- w- {, H. _; f' x sample = input_sample(); // read L + R samples from ADC. w" F0 U/ _* m& I
output_sample(sample); // write L + R samples to DAC 8 {7 l- @ F1 }, s
return;
- c' L. X2 z4 J}
( q) _; q- x, y$ Y+ t/ a4 A
2 `! C ]) V8 Aint main( void )
# g, Y. n4 [. e1 G7 ?{+ T; ^5 N% _, {) p% r
1 D" [7 v) Q$ L% k3 m. a: x /* Initialize BSL */4 k$ P' @$ ~2 [" k& p4 x3 z
EVMC6747_init( );
' x/ n! |* W& h. b# h! d /* Call evmc6747_intr function */
9 B* t/ g: `( W aic3106_init( );
* l* f, w$ y6 d& q0 S7 v while(1);
4 A! M, k% ~# G- u# c$ @}$ {8 R7 \5 G3 [8 A( d. G
9 r. x0 D! _) U7 C( [3 V
2 b5 n6 N0 d( E; M
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. e- B6 P8 @. M7 [3 X: k# j: L1 d/* Initialize MCASP1 *// |/ y% @0 I5 @. F" O% B
mcasp = &MCASP_MODULE_1;
. C1 e8 [; B# T$ B$ ?9 B# { mcasp->regs->GBLCTL = 0; // Reset
9 ^ e6 @! z; I9 Q' E+ h% p. l mcasp->regs->RGBLCTL = 0; // Reset RX$ p% M5 O( e# ], }
mcasp->regs->XGBLCTL = 0; // Reset TX
S. W' b8 X) ?% t. C mcasp->regs->PWRDEMU = 1; // Free-running
8 k. H f1 q5 c9 v4 ^ // configure McASP0 receive registers- N5 q% v2 [7 v
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used* q! O7 u. M K% G& H
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus M8 @2 v0 W. X# `( {3 F/ v
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& P5 Y H+ m* X" v' L8 l0 a- T% V2 p mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 ]( w# x7 L( n$ Z/ s" F" I
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# G" |1 Z. L' Z
mcasp->regs->RTDM = 0x00000003; // Slots 0,19 i; J3 b# b6 K) R# T. t6 N6 W
mcasp->regs->RINTCTL = 0x00000000; // Not used* j/ d" b V: `, e; W T( P
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: |& h, L" x/ s& A0 _0 I# f# N$ [% b1 i; e0 u* `& r% q, I4 }
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 b: t5 M9 M: P8 U! C% T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 H% {: a4 v$ H$ d mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 H! O; s9 m* s4 z, _) B mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. R: U7 w0 Z5 o& C3 g4 i& i
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" c( A9 B, W7 g. ^. q" ]
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* ?) e" N! B* q/ [& _" v/ ` mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* E: X8 h* f! t/ {! O: K6 k& T, V mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. y8 P. Y, |( l% W; K1 t) W+ {8 ], u# k7 [5 W% X j
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
& q* [6 F$ R) p! ~# [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 Y z8 Y. g: o- g3 G# ^, {
mcasp->regs->PFUNC = 0; // All MCASPs
- p$ z* q# f2 R2 z7 ?1 \/ j mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, y) R+ l2 M8 ]( H; W, z7 B: z$ \+ S7 q( X% {) x
mcasp->regs->DITCTL = 0x00000000; // Not used
0 C1 Y) R4 s* g* [1 b mcasp->regs->DLBCTL = 0x00000000; // Not used& ^; C0 k( u% ~0 l4 k- g, x
mcasp->regs->AMUTE = 0x00000000; // Not used3 w8 S' S! C1 |9 D7 k0 c( n
5 `/ }6 l/ Z, ?9 W m3 A9 u
/* Starting sections of the McASP*/
9 e7 X- m9 ?2 v/ o7 d mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; l; u) `( M0 o9 w4 B& U( Z* F) m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . V3 O4 Z. x, K
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
?& Y' k/ E4 d. v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 F* Q, M4 P& G# H; f" U0 N
( U* ?! k: q6 _2 J9 A- x# H
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % s6 a& W X5 s1 B6 ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 z! q. s( j+ U* x6 m* j mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; F( u* w0 A# H4 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. {9 a4 I8 S1 G1 N" K! R
, Z3 j' v+ C3 B+ F$ B$ ` mcasp->regs->XSTAT = 0x0000ffff;
0 M' F/ k1 }+ E* d7 k mcasp->regs->RSTAT = 0x0000ffff;
4 _) E, v* A: ?5 O) `6 i; K1 Y; K4 T2 B" G& E; P' N
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" C! Y& d: w I7 K3 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' o0 v/ e! `4 v" X) o; f4 e
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 V- m% {2 U" w- T+ |1 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 I- n3 @5 U/ S) l( e' s( O4 B. q# }. ] ^3 Y
/* Write a 0, so that no underrun occurs after releasing the state machine */
^+ M9 K8 ~ D! \! ~" M" p z- A mcasp->regs->XBUF5 = 0;
" q+ A% k) V5 X& a% i! \" F- a mcasp->regs->RBUF0 = 0;
$ _! F5 G" N1 A/ ]
$ C( v1 @& k# x z0 [" B mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ k0 }% s# K) X6 D! k3 S; m. U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ x1 N) i. ~0 g/ u+ X2 ^( R; e9 T1 k
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 D W8 l: N3 r2 d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. B6 ~$ M: b8 W' p1 X; e1 |# ~" K; P& _9 X; G( \5 Z/ k0 s
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, A5 o8 G m- r' k7 {, n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 i$ A/ [+ v/ ~$ ~& X mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 {& M7 S9 p; k# U3 y* L3 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. ]% T* l. y, H' _
8 r5 J/ R6 \/ r# L+ A
CSR = 0x0000;
0 D" z, b5 X8 n( n+ Q INTC_INTMUX1 = 0x3d;( D" E3 q" O5 @* b. z$ v5 s x; S
ISTP = (unsigned int)vectors;
i1 }6 m' m* R ICR = 0xFFF0; 4 {1 M0 |6 }6 n0 n$ q4 p G$ U$ N" R8 R; E
IER |= 0x12; 0 U* S! m, M: T; A5 m: \
CSR |= 0x01;
J3 S% D1 ? ]: }5 b4 G- G/ H8 S( M+ x X- z
* r/ b6 U, V/ i8 f
+ r8 [) D$ P C c* \还有就是两个输入输出函数:: E5 o: i1 t" C. M$ F
void output_sample(Int32 out_data)
8 b$ K% F1 S' }4 Q- B3 a$ k{- {4 k: I& t& j* y. q, k
AIC31_data.uint = out_data;
/ C6 _/ b9 P6 ~. N MCASP1_XBUF5_32BIT = AIC31_data.uint;+ {8 t- [% g, {! Q+ {& Z
}
8 R$ E- N$ Y1 C! a' k' e; ?$ I' k0 t
Int32 input_sample(void)
) _$ ]! u5 k9 j; c5 n{
" ^" e$ Y6 k2 W$ V AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 n. ~: t3 y$ g; X* F2 ^2 D return (AIC31_data.uint);. {6 c6 x9 h( `2 m0 S! k
}
! Y6 ?7 V- b9 Y& O
# a& `) ] ?" s8 P! G- F |
|