|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( z j6 Q3 r) a) \% B+ ]/ rmain文件:) x% f. r) Z* H0 s E" ]0 o0 S
interrupt void interrupt4(void) ( u0 G& \7 [% u' E* K, e
{* B6 [6 x; [. d" f$ ~: w
Uint32 sample;
$ V; d$ H4 n% R
E* V; R0 C+ B$ L7 s, V sample = input_sample(); // read L + R samples from ADC' _% x2 ^0 w( p: I
output_sample(sample); // write L + R samples to DAC
' x- v) a! r( U$ U4 g return;7 j9 J$ H0 H; h
}
" |0 L" p E6 K" j+ v/ K
! z ~# f. G; c: Y' P) e6 ?+ Tint main( void )8 w% m0 z5 R" m6 r
{
1 G% r9 j N' V3 l
5 ]+ y$ o1 [# l: L6 D5 n% m /* Initialize BSL */
1 f) Y, R- \7 v. f/ X! [* e6 | EVMC6747_init( );
5 W7 R; U4 h; g4 n' t6 B: E /* Call evmc6747_intr function */; ^* w U1 f3 f8 ~
aic3106_init( );& `2 o, W" I3 u
while(1);
% ~2 O, D' z$ _}4 f1 t3 C5 X+ ?2 a" d+ F
0 A% B! r0 m9 u% c o! J
! ?* A6 H' k0 P" m2 y% j, Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 O, {9 Q( Q) Z* W& Q8 y/* Initialize MCASP1 */
! S6 [/ T; [4 C mcasp = &MCASP_MODULE_1;0 S9 L( F+ V! A9 w0 ?6 d# g' u, K! W
mcasp->regs->GBLCTL = 0; // Reset
- [2 s' T( @( ], T( c mcasp->regs->RGBLCTL = 0; // Reset RX
2 ]: T9 ?6 x( Y3 y! {0 M mcasp->regs->XGBLCTL = 0; // Reset TX
% B, u; o' F( }6 R8 I; |# @ mcasp->regs->PWRDEMU = 1; // Free-running
1 @* c& a, W$ n! Y/ h- D // configure McASP0 receive registers
9 z" @% p2 i& Y8 D mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; K H$ \9 l3 i% K% v% C mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 p; x) R, I4 S7 d+ E' G mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ N+ _6 v$ d+ T. A q! p mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 [' d1 o% x: d mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
; }7 S( e7 `- G9 k5 T mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 }' Y0 S+ H% c$ J$ w6 V mcasp->regs->RINTCTL = 0x00000000; // Not used1 j' L: ^; r6 q5 |! S
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& H# U5 ~ V) \6 n3 Z. i, G
! H9 |7 J+ d3 |- N mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used( g' S, `( L7 m: I1 Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! p: B2 e0 ^. \' G \
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 Q) f" |; e8 E$ P! J& [1 H: C
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 c6 W7 t* n. d+ Y4 r% X4 Y mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK4 `3 ]' I3 C. y- X
mcasp->regs->XTDM = 0x00000003; // Slots 0,1 S( k# W- v/ {/ Y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit2 J; z7 J* a% H: j
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 p& h- L* E( R2 y( I
h) X7 m0 j* t. R) \( Q( F& {
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 i! v6 x1 l3 a5 x/ |
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT0 k* O& l* i1 \! h0 T2 J' d
mcasp->regs->PFUNC = 0; // All MCASPs' g5 T/ Y: u. U* |6 A1 ^: X
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' L5 X, ], }; T7 R
; H) `" m- R- ^ mcasp->regs->DITCTL = 0x00000000; // Not used; w: y3 F) D" {
mcasp->regs->DLBCTL = 0x00000000; // Not used
3 c6 Q# Q' D c, o2 ? mcasp->regs->AMUTE = 0x00000000; // Not used
- v. k7 q+ r, c- U2 E/ P( F8 F5 T! T7 K
/* Starting sections of the McASP*/
6 K" L2 O+ N) I/ H+ k mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! H# a; \3 l( a/ [8 r, v+ I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # z2 r* _% R5 L, w
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( d/ ?. X- B `2 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# r! f/ d) ^0 f0 |6 d+ X% X
0 z6 h8 d3 J5 t. G R/ Y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 s' Y; M5 P( v2 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 Q6 }3 q9 Q# P% U* |" f% o mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 ?7 C: y' v1 f7 L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" A2 |) r# s4 t) i, w+ y+ b. P! Y2 T' _. o! w9 V$ Q% b
mcasp->regs->XSTAT = 0x0000ffff; # a& x1 B2 N" o7 Q
mcasp->regs->RSTAT = 0x0000ffff;
7 Z% T/ k) s2 @, ?* v. E- {" @
% Q$ f% v, O# g mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 o( ~0 g* T @1 T2 W" k+ | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% J* ~+ d) b" |! ] u mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ g( P0 N) @" V( v& q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* x/ V/ O8 X& b4 O
: }; a' u: n7 d% j2 O( M
/* Write a 0, so that no underrun occurs after releasing the state machine */. p3 D, J `! q$ r7 w! x
mcasp->regs->XBUF5 = 0;/ \* `% E" x% o: U
mcasp->regs->RBUF0 = 0;
. ]2 ^7 Y' ]! M* l Z" r$ J Z, R" p6 ]1 d# ]/ p5 y# f O8 o
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 u* U$ P- i% b* h( p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 a5 M1 }; {7 {9 H1 V2 b/ k
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " w3 k/ _, M9 E% _1 g& {+ g8 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) H! Z7 n) q& s; E! R: U
2 V; w. S$ p [) ~# U+ Z( h D& z mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 y/ a5 R# k6 V7 O* [$ D0 q4 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 |- F" |3 Z& b4 E1 ?
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( @% i7 X2 `8 o0 N" R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( K& V5 ^0 c* @) C, t
/ y) }. |: R& W6 N" e7 W6 k0 d CSR = 0x0000;% `. A9 U: J8 X; j
INTC_INTMUX1 = 0x3d;) ]' v- S4 c5 m3 X$ K
ISTP = (unsigned int)vectors;% j& k) _' N/ E2 e. g
ICR = 0xFFF0; " J7 n9 r7 t. I6 }& q0 Z# A
IER |= 0x12;
- S7 r1 c& x3 p: w, {. p CSR |= 0x01; 3 w" _: _' l: E7 ^
2 {3 w. e+ i9 c5 o: o3 ?
$ A0 c1 z/ s) E% z
( s. B" h2 m( Z还有就是两个输入输出函数:" F9 R+ b8 C8 \
void output_sample(Int32 out_data); J8 P6 a$ f. b D" o' }
{- I3 F/ v- G* f0 D4 P1 A
AIC31_data.uint = out_data; % U. r3 M4 @6 Y; d. k* a& R6 z/ z/ @
MCASP1_XBUF5_32BIT = AIC31_data.uint;! i( i# ?" x. w* K. y; Y
}7 Y% `7 [4 ^- }
9 \. U$ z, Q7 p" |7 U
Int32 input_sample(void)
- @2 `2 z2 c9 F' f/ l{
" t6 I' [! v' W7 O- a AIC31_data.uint = MCASP1_RBUF0_32BIT;7 H2 `; }; n! [+ d/ d
return (AIC31_data.uint);
% a9 A( b4 g5 U5 w}
# Z7 ?8 u. N8 t' o# l- Q; \8 e6 j7 m* l* h9 ^
|
|