|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 H% J$ `2 W- k# Qmain文件:; _( `% E; c2 `, \# V
interrupt void interrupt4(void)
. x! H2 R2 o& ^7 K9 G% l{- y" v7 B' y4 ]( r; h& Q) U# v8 {
Uint32 sample;
& N# C% S" A6 P% i6 g% O. v& s
0 F% i" L1 u% A* w7 V" |2 m& X. ]4 {6 t sample = input_sample(); // read L + R samples from ADC* x$ W$ H1 h4 W( d6 m* K
output_sample(sample); // write L + R samples to DAC 5 }/ ~7 w% {9 _8 i: Q% J
return;
2 F" y$ p3 y3 `4 Y) L}
4 b" O1 K+ T/ A/ U( r- G- t0 `# W$ B/ e( o$ G4 E6 \$ l: z
int main( void )$ a/ z/ J, ~5 G8 d( w
{( s! o- }( E+ K4 f: _( V6 {1 A
+ i7 L& z9 f% ], A6 X" X R /* Initialize BSL */
8 G! ~6 ^0 @/ {/ O; a; U: W4 O- ^0 f EVMC6747_init( );# i9 r2 t% p( S5 V
/* Call evmc6747_intr function */( I) w4 B1 z, i" H( i$ s
aic3106_init( );
) w% u, A1 ^9 p; a, {# w6 O( _; V8 \0 [ while(1);$ y: j% i% G" s2 r& `, I& ]5 J
}
( Y6 W) f9 l8 \: W
/ I p$ `; H5 O4 w' w9 A# m- O8 j. n/ @+ r) p% `" _7 @7 {5 o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 ]! B7 D# h- V1 Y* @
/* Initialize MCASP1 */
( L, F9 `' Q& e% v$ r! w. s mcasp = &MCASP_MODULE_1;$ e4 Y4 _8 D) _
mcasp->regs->GBLCTL = 0; // Reset
1 X* H% Y2 k0 e2 w9 I. u2 V1 B" z mcasp->regs->RGBLCTL = 0; // Reset RX
7 a9 H" ~! o6 w mcasp->regs->XGBLCTL = 0; // Reset TX
# I9 e4 I8 q" ]' O0 H mcasp->regs->PWRDEMU = 1; // Free-running
! B7 i( m2 o; H, ~ z // configure McASP0 receive registers
* N) p- ~) w- y- H( {' g& p# y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
& a, R, J8 V5 f2 _# `: r5 P mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
F: i5 N) T3 Z1 M mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! Y( P* n8 Y, b$ {4 t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ _: I1 l5 E3 h& F mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! i V$ \+ u6 c' D/ w% k
mcasp->regs->RTDM = 0x00000003; // Slots 0,14 W) S; B( G3 g) \
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 H ]& ]& b) Y* v |; a mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% E4 r, J1 C; A
( d, V! g$ Y$ c8 v( q, P+ V J mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ D* ?9 J+ \7 ~& I2 S T0 ]
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( j0 D+ S5 C' Z" ~# c* u mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ [" Z- w# Q: v2 @! G mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) y* i2 g9 L! }9 t: P' E. d mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ F ^& u$ v; w8 d mcasp->regs->XTDM = 0x00000003; // Slots 0,1% X, l: \3 Q+ x/ I/ g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 i1 v9 s0 h6 F" j0 Z# j' p& M
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- m0 ^: u% o! e
& F2 [) T) ]- G" Y5 w mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) L/ t' d0 x& W6 h7 M% A
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 ?/ f4 y' m8 N9 W mcasp->regs->PFUNC = 0; // All MCASPs, {. y3 o& p" P2 T7 h
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 q6 m% M4 V* p6 C2 C8 t) ^' s& J3 }3 f# F2 D' E( b
mcasp->regs->DITCTL = 0x00000000; // Not used
) e; y3 H) c& b% Z mcasp->regs->DLBCTL = 0x00000000; // Not used9 C; T- u. ]& @; F3 @/ v* T
mcasp->regs->AMUTE = 0x00000000; // Not used
4 k+ R) W3 Q: q2 a
r! w! U5 N( y) ]5 d/* Starting sections of the McASP*/
" g" [2 k% c& i) R& X" V O) ? mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( A# K4 x+ X# v! Q) A( \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 ~( t0 z3 c5 L# @6 O mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! `% n$ i4 [0 h; T; H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; A, r: D7 C. |) l& C0 a6 N
. X' G f5 \6 s* g9 b
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 e8 S2 a j8 u* U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" d% z# V8 O) n, Y, q( E mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& P2 p3 P. a: E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* A, L( O+ l4 d2 y
" Q% Y! p n2 z' D7 C$ u: O
mcasp->regs->XSTAT = 0x0000ffff; # D8 M$ _2 C5 N# O9 q. W
mcasp->regs->RSTAT = 0x0000ffff;
v! k8 Q- i& W" K0 J9 e: M2 _5 Y+ ]. I" D2 Z5 Z) o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 H/ S3 D( K1 V( U4 G/ h* y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, g/ u- R7 R. c) l& P
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. r$ j9 l9 P! d' X' M) T& P. h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# M6 J+ i- x; E* T
' e( X ~/ y2 D4 U1 t3 {; D; h /* Write a 0, so that no underrun occurs after releasing the state machine */& w9 s/ L" j3 ~6 a6 C, J8 U9 Z
mcasp->regs->XBUF5 = 0;
7 B4 \9 i9 [# i% E; V mcasp->regs->RBUF0 = 0;
# e. Z7 M: v7 R! c3 H
7 N* R2 l5 n+ k6 u5 x5 H mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 m" F5 E8 e% |0 L7 D h( L( ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 p$ C: r8 q8 B/ ~- {$ F" W, ~! z2 F: d% e
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
~0 S4 H" u6 }- p7 z9 s! o% V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 @0 |! Z0 q& U2 F9 l6 l0 A7 c
6 N! u6 K+ v F. R; i+ p0 o
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* ~, F7 _! a4 z4 ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" ~, \/ H3 U% J- z3 g mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( w$ g1 z' ?# h s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ e" r$ v y! ]# a5 w
# |- m3 t; t3 A# \ CSR = 0x0000;: Y) \" M, Z* T# S
INTC_INTMUX1 = 0x3d;
& S$ W. U/ x* ?! z$ k1 k! r" o: L ISTP = (unsigned int)vectors;
3 @/ s% q+ w! m9 H& g3 c+ U ICR = 0xFFF0;
; { h+ u7 [/ |4 V IER |= 0x12; ; f/ ] ?0 T7 I y: C# C
CSR |= 0x01;
: T1 }! R) L* h' O, Q2 E6 b. b; D9 {8 p
$ `/ K' Q9 @) ~5 ~2 {) r% g5 ]
9 y4 C4 @- q" A( ]4 q r& G
还有就是两个输入输出函数:% g6 `& ~+ V3 D
void output_sample(Int32 out_data)6 j( i" f& o7 k0 I5 D" d9 p
{
) @3 n3 Q' q2 S; w: [% t% N- B AIC31_data.uint = out_data; 7 q) z! z. y& s8 {6 ?
MCASP1_XBUF5_32BIT = AIC31_data.uint;! V9 u; `& C% E8 B
}
6 y9 J, ~) D; I% A0 G6 h5 t$ @7 ~" r
Int32 input_sample(void)
/ K8 m+ }) x9 [; J0 P{ 0 s% t9 h5 O7 p. z- g) u
AIC31_data.uint = MCASP1_RBUF0_32BIT;3 ?3 u( Q. y ?! \8 J$ p
return (AIC31_data.uint);( q ?: X* y3 q# L. {+ Z1 j
}
4 o" g; Z5 ~5 H0 X8 \
4 A3 J6 R6 ~' ^5 ]- _ |
|