|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# `! ] T4 Y5 [7 T: d9 imain文件:
1 i$ l5 q& `# r& D+ ~% ginterrupt void interrupt4(void)
- i0 B' q* o7 Q9 S{4 F4 H, {5 l0 k7 X( B9 H
Uint32 sample;7 q- E1 w7 |. ]- E; g/ Z7 u$ G/ l
* |) h7 d9 Q+ u5 u sample = input_sample(); // read L + R samples from ADC
% B) z: m7 a4 M7 P output_sample(sample); // write L + R samples to DAC
! c6 T/ Z& ~! g* o( p7 x return;* |' S! d3 R, g. U6 |4 m
}. J2 ~% j1 t8 X' [% e
8 Z: U" @( t5 ` J! V- y, \+ V
int main( void )0 c6 `, O/ q# i
{
4 e( F. q H7 T* r2 f2 o
7 O, z/ R: F$ l' n9 d# E /* Initialize BSL */
0 N- O9 m8 I( \5 c( \) N EVMC6747_init( );9 {: l- ^8 }1 E) {5 s' W$ k3 g$ [
/* Call evmc6747_intr function */
2 `# [* n% j7 J1 T; M3 n aic3106_init( ); X7 H1 o: b9 m% y
while(1);
4 v: f) X+ ~' A+ P) f}7 @/ `7 G- D0 Q$ F4 H5 F3 T! y
# R7 U- ^7 {- v' |: K0 q- ~; U8 V, q: I8 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 P$ p" p* v. @- I3 y* N+ p8 h
/* Initialize MCASP1 */
; n7 X, g7 d$ _# n4 Z9 C: z mcasp = &MCASP_MODULE_1;% r3 j, i" t: ?6 A% {; K0 u$ `
mcasp->regs->GBLCTL = 0; // Reset5 {5 K r. A8 C* C* {; F
mcasp->regs->RGBLCTL = 0; // Reset RX
* p; r% |$ B, s' K2 H& }- a mcasp->regs->XGBLCTL = 0; // Reset TX# G3 Z* a, ^* t7 ?. s& d9 G7 u& `
mcasp->regs->PWRDEMU = 1; // Free-running
- J) }/ x" l1 ] // configure McASP0 receive registers
/ U+ p/ r, _. M1 P% p mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ s8 s( O! N9 _8 J: P7 ]% {7 P
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 }; T- V0 F: }: L! v
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word: k2 e# z( e/ O K: f
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; r1 q+ Z+ e1 O8 W mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 v1 w. [/ l' A- X3 B, K mcasp->regs->RTDM = 0x00000003; // Slots 0,11 z2 F. n3 @# X! `
mcasp->regs->RINTCTL = 0x00000000; // Not used
4 Y0 Y1 _, G, C/ `8 d! X% i* V( E7 U; n mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! Y" c$ C8 R) X1 c' s6 d7 z/ P
8 j' ~/ m; I5 t8 k9 W( y
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
$ L- L, ^1 G. a mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* d$ T6 j, R6 S6 H/ m! O8 z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 s* L( L4 |& r S1 { c5 ~& \3 E mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 A9 q% c: D0 u3 o8 f1 x. b4 G
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 @- y' [0 k$ ~
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 S' H& J% {2 q& l* v mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
9 n: \* k. d& B& W& G mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' Y& V* c. H& J+ Q
, a# ], {) F7 {( I: x5 F mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! s% S* b3 B- q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ ~# ^" R/ r% @
mcasp->regs->PFUNC = 0; // All MCASPs9 k7 n9 |) _ d+ @5 E# e* J2 l
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: F _8 U5 g& ?% B! S3 |- x5 i+ W/ G" d) O; e, c& s8 ?2 t
mcasp->regs->DITCTL = 0x00000000; // Not used
1 { t$ n; f9 R6 R mcasp->regs->DLBCTL = 0x00000000; // Not used$ A1 P4 N) Y5 t" S
mcasp->regs->AMUTE = 0x00000000; // Not used
% W8 A# J5 d1 m& z3 D9 V% o
1 G5 V' o2 h7 D3 G/* Starting sections of the McASP*/) l; ? K& [. L/ E# a
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + e. ^5 o. t' ~8 ?4 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ' G6 _3 {. k; [" K- t! O2 l
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) ^ e4 z, d% |" p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" v% K+ T2 P/ Q }( Y/ T7 C
4 t" F5 B7 D# S @! T4 d: K mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 K) s$ v( B: v; G( T9 ?/ i- r5 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% U' t0 r" ?# } mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( }9 X& S/ U8 z8 b) I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. H! _! D7 x- _, T7 U
# w C* m& _2 U0 i& H$ B mcasp->regs->XSTAT = 0x0000ffff; 4 N3 }& H. }/ V1 F/ X7 w5 F3 ?% r6 S
mcasp->regs->RSTAT = 0x0000ffff;
7 }; k; m# d% M: l4 V* b$ v9 @$ l2 E! D7 A, Z1 Y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ J1 _2 _& i [0 v* R4 } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: t" s6 z' c: |1 x. H
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 G3 M+ l R$ L8 u- U+ N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 K+ F! @$ W: z, a& |# u3 k5 \9 J6 [' x6 {
/* Write a 0, so that no underrun occurs after releasing the state machine */
5 ~4 L" D" `4 c5 Y# f mcasp->regs->XBUF5 = 0;
* d1 \# V$ Z6 s0 E; ?! e8 v$ r$ Q mcasp->regs->RBUF0 = 0;0 {) L+ L4 w2 \3 m1 C" G# T
' R: F6 D3 J" n- m$ J5 M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; e! [( D/ ]6 q$ T: a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 I* m, y8 d& D2 L9 H& c mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 K) Z3 t' O. c$ D9 v8 L# N: ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" o6 A: _$ o0 f) Z9 Y' _, a3 u3 M2 D ^. n( S" J
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 H" _. S; Q7 G+ x; r* s" \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* i& P& A' v2 ^3 }" a4 W$ H mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' s% c2 A( x, O6 b9 t7 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" m4 q) L; y( H
. S( B7 H: |+ f
CSR = 0x0000;
5 K* g& }% x9 [4 K; Q2 X INTC_INTMUX1 = 0x3d; ^1 \7 e5 {4 {4 c5 G
ISTP = (unsigned int)vectors;8 d L e: T% ~7 E
ICR = 0xFFF0;
- S3 K' r% T) K2 `' i* K IER |= 0x12; 2 ?; f; n$ k: |& L& s
CSR |= 0x01;
: [$ q2 O H7 d
: _3 H# i6 |) y8 N2 }3 D
- R4 Y9 V5 ?, ~, u9 g) {9 A# S$ o8 _8 l" ~9 q* p( j
还有就是两个输入输出函数:/ J' q" @7 O* b- g, v, H& J
void output_sample(Int32 out_data)1 ?$ |/ I5 B( Q! Q2 H2 n) |5 s
{
! o# v9 S1 r. A+ Y' F5 u% f3 X AIC31_data.uint = out_data; 3 ^4 h; [8 x0 n
MCASP1_XBUF5_32BIT = AIC31_data.uint;3 N) A8 x, s) D& A, _7 _
}
" z& y2 h, Y( N/ m4 U1 g: J, n, H$ \9 N' M0 E9 K& z
Int32 input_sample(void)
+ }4 m" F" b+ u+ Y) @{ 6 ^- `1 R5 x7 h4 I$ W3 G0 {3 ^
AIC31_data.uint = MCASP1_RBUF0_32BIT;1 W, M9 i' A6 p7 @- U i& D. Q7 n) p
return (AIC31_data.uint);
- Y: x& g5 M; N# H}
3 e% F* `5 N: I* e+ Y3 o5 j
2 F( g0 U1 |2 r& o! v |
|