|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 d* m/ D5 d( u; r. K& p4 g
main文件:; i' J7 ~ ]3 u3 ?- P- Q+ N
interrupt void interrupt4(void)
8 `+ e* w9 D8 A% Z, k; ?{: g% E; b5 U& d: A" \7 {- ~
Uint32 sample;3 @' n; X) ` C% v: F) Q' D3 g
* s( ]/ x8 f L% B2 @ sample = input_sample(); // read L + R samples from ADC
" [3 p9 I; i$ s8 V( \9 y$ P# a: ^ output_sample(sample); // write L + R samples to DAC / U+ J: |0 n2 \+ E. {
return;
1 }7 u' F% x( p. F% |3 o}; N6 _0 t3 I" b0 y+ K
6 D, J. ^ l* l5 u5 t+ W+ e7 W
int main( void )+ n. S6 e7 l9 `6 [$ N9 ?: T
{2 t E5 Y n& I
! S7 d4 ]% [, I5 E- `- O' t) Q2 v /* Initialize BSL */
$ S$ M$ L4 z% E8 B& q; i# S3 J EVMC6747_init( );
" ^* O7 s6 K# t# R1 m5 r /* Call evmc6747_intr function */
+ p, p' ]8 y" L6 Z; l$ t aic3106_init( );
( S1 X9 n0 P$ B while(1);/ k2 y/ d% `1 I5 y8 L1 c
}
8 c$ x# p' G& N4 p6 O$ B& T
3 j1 z* b9 d# [* [- ]
; w; v" [8 _9 }& v& Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* B1 d; a- N3 J% L0 X, n
/* Initialize MCASP1 */1 U1 Z9 _! F( O% ^4 C8 u
mcasp = &MCASP_MODULE_1;, O) g1 g" c. o8 o
mcasp->regs->GBLCTL = 0; // Reset- k% ]( t# ]& U& s% c+ m
mcasp->regs->RGBLCTL = 0; // Reset RX) Y; ?# x7 i# V% I9 t) A$ t
mcasp->regs->XGBLCTL = 0; // Reset TX8 ]$ \. e) B Y' Q6 a
mcasp->regs->PWRDEMU = 1; // Free-running
" J0 @ f7 q! M# }0 x$ g J // configure McASP0 receive registers0 n% {' o# T& l/ ~( u/ n& Z7 Z# P+ w
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
! X c0 @5 U, E5 g+ O* C mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ _0 z( s$ A" u9 p" X5 {
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) t p+ C3 B( J+ K+ Q9 M$ o3 Q# O
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* j# @3 V( @1 |. @7 Z( v
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 s" M B! ^: j& r4 i' V! G. Q
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ M. b: V+ ?" h5 Z# z$ P# `* ?9 L mcasp->regs->RINTCTL = 0x00000000; // Not used
* o( X/ ?% o! a mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 R; h: D) w Z P! w2 |8 `
) w+ ~0 |, Y' ~( s" t, K% L2 N- v mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 s: p: n4 b/ {! o9 R( u1 P mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 X4 u1 B8 q4 D; T. _$ i8 I mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 I- J: l; B) c4 S9 C2 P& d
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 o8 `7 o- J) \) M& n8 t! w0 e mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) ~9 R/ [. I, V/ m+ P; Z
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' V; s+ d, e& |$ u mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 |$ G0 `1 {0 e# ?( i/ C" g
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 h7 N5 Z, {* I
4 s$ ]5 l0 d4 k$ V: r$ t
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- c' i( G0 M) r mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 r* }+ Q9 J+ ~8 E1 S0 n% T, u7 y
mcasp->regs->PFUNC = 0; // All MCASPs. E9 f p' g& C! N% u U5 U7 {+ @
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. x0 [2 ] X3 c& U# E
4 P/ t2 u5 Y8 ?; N' r( |
mcasp->regs->DITCTL = 0x00000000; // Not used
0 j% K( c1 e- ]- K" h mcasp->regs->DLBCTL = 0x00000000; // Not used
, |5 j% [5 h5 E' Q: Z mcasp->regs->AMUTE = 0x00000000; // Not used
8 e7 Y$ t. n5 [) z
& |2 S$ c% d' i7 K6 @/* Starting sections of the McASP*/, y! Z4 _0 x# U) z) m$ R" n
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : L. H0 A; Z/ b3 w, F' }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( A3 n/ y# a( ]6 Q1 i+ _5 _: I mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 g0 s% Q3 u# t G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' r9 N0 D; p4 N0 C# c0 y
" N6 y, G7 Y& X- g mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# B: G# z/ @4 Y4 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 l/ ^6 X5 h' E3 [3 l3 d
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) U* |* Z7 _ S8 ?" ^$ K2 j0 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 Z- s1 x, Z# l9 m
8 U$ w2 D6 G) D Q mcasp->regs->XSTAT = 0x0000ffff; 5 Y6 p/ Q2 v6 L4 p& V! |4 c- U
mcasp->regs->RSTAT = 0x0000ffff; # ]5 ^9 ]# T) }" i
( F9 w) P) R1 Q) {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 y1 ~, G7 {9 W5 q/ R2 x7 _4 Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 p1 X6 ]0 k; a# c- J
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! N2 M- A# ~) S3 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 |4 O* _! W% Z: v) z
% B6 e2 F2 g4 S- @# F5 { /* Write a 0, so that no underrun occurs after releasing the state machine */
0 z. G5 t, m5 g3 p8 Y) d) z mcasp->regs->XBUF5 = 0;
( L D2 Z" n; f mcasp->regs->RBUF0 = 0;
& I7 o: T( D6 E% g1 [. d3 V
, _8 O' R6 I! y% i: [( B7 b1 E mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 \, s6 \; c3 L7 k$ |: ?) k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 W; p, [% L+ ?+ h6 ]- U
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. ^: I; A) s! z { A7 b F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! Y( }: [5 K( x, }: z
5 G7 D4 z/ C7 [7 i0 A7 R' v. o mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 Y- V5 O. O5 Y! M2 G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# A# B7 ]; `8 [+ O; Q: r3 F mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 \9 @: v+ Z4 H1 A8 r6 e8 I' a% J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ ]( l& `4 r4 ^/ G8 [
Q% P6 m2 v9 U- G' n* z1 q CSR = 0x0000;
9 ?! l9 i A( W1 J' U INTC_INTMUX1 = 0x3d; u0 Z& Z! y7 a+ ^6 H
ISTP = (unsigned int)vectors;9 F! M1 q( h5 l) ~3 n
ICR = 0xFFF0;
* F$ k' I" _8 a& v IER |= 0x12; 0 j5 M; \- F& n3 i3 T" \
CSR |= 0x01; / U+ y5 I/ R: a8 Q
1 W# G& R; {( a* E+ X9 R: B
! d% Y; i$ v/ x- s. U
* z% k* j- k- { s s+ U还有就是两个输入输出函数:
9 P3 \" i5 G+ ~$ S5 D" vvoid output_sample(Int32 out_data)
5 t2 _) q7 Y4 _& p{# {( O9 x7 V, w0 \3 D, ^
AIC31_data.uint = out_data;
3 Y8 D5 O. t! g$ k MCASP1_XBUF5_32BIT = AIC31_data.uint;; e7 B2 `6 V I0 N8 m0 H% E
}
5 ^/ d( E, }. Q, Q7 g1 {7 ^$ V6 F9 n% N- @* n" h& B4 s1 c; l
Int32 input_sample(void)
' e8 Z$ h n2 k. _: J( k{ , \1 F0 I" F# e8 d1 Y k; ?8 J
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 Z: q5 d7 J/ E* r- }: V
return (AIC31_data.uint);/ u( w7 |- ^7 k% n- t9 M
}0 T% r/ o0 P8 ^6 Z& p
& m L" @" {4 b( y: \) u) u2 p7 [ |
|