|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& V8 p4 `# a$ v" x2 f
main文件:
" @$ ] B5 M' z4 W) f! Jinterrupt void interrupt4(void) ) e% U% `0 P4 H. f
{! D8 h7 V) R- r, ~( Q1 d! u
Uint32 sample;- K" w9 g* Q1 z$ Z; I4 V
# s/ G8 H1 {7 O3 T3 a) c sample = input_sample(); // read L + R samples from ADC
L# `# Z, m, _- j9 @; i" Q& Y output_sample(sample); // write L + R samples to DAC # K/ m) V" @7 K/ F2 g; ^
return; O& U: g2 t4 K
}
* @2 x9 e4 G; u# D( {$ n2 V. G
% Q+ D" d( n# V/ {int main( void )
! x6 E) j0 D) M5 F) G3 X q9 l i& b{6 S' R9 p6 O- }) Z; c+ C! g, m
8 P# S' Y9 `! i9 D. m! K0 ? /* Initialize BSL */8 k9 z; g) g; x b) P' }7 d; f
EVMC6747_init( );$ h( ^8 [" k5 ~5 V% Q, V. ~2 K
/* Call evmc6747_intr function */
; G3 O R' h! U( F8 ? aic3106_init( );
8 H/ O0 O6 _0 P& u while(1);% B2 z/ _, o) X# X9 \
}
+ w$ X! X. B5 q5 r
4 V2 }6 C2 j# A. Q- W9 N3 a. p2 G. _! E* G
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 r* K# i9 U* ?2 N2 v/ t+ O/* Initialize MCASP1 */( l; }% I4 u' o3 [$ J9 `
mcasp = &MCASP_MODULE_1;
S- y# W1 i& u: @* T2 C2 p mcasp->regs->GBLCTL = 0; // Reset& }# U% }, P5 j# f
mcasp->regs->RGBLCTL = 0; // Reset RX- c5 ?* Q! Z; g3 n! ?: d. g. o
mcasp->regs->XGBLCTL = 0; // Reset TX
/ N* l# A! {3 i8 [ mcasp->regs->PWRDEMU = 1; // Free-running; h# r3 d5 Q5 i& X4 x! `5 v
// configure McASP0 receive registers
3 `$ i2 }* |( U E& _! ~0 I mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used h+ A! S/ W \3 R' N z. d$ D
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 D( P0 O7 D) c. I% E+ I% a- X/ E8 w
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ e- Y) T8 ?9 s! s
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); X9 N& z0 f8 B
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 P/ j2 ^* u2 h( h% Q
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ n% A3 c# t ]( \4 K; v6 Z
mcasp->regs->RINTCTL = 0x00000000; // Not used2 t0 K s/ q: _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, q. T! \) T9 U3 _5 F
0 X$ X. D* f/ U( H! F mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used i4 G2 `- A* L7 ^5 ]
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ ~' o' W0 p6 u5 M mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! o y5 v6 P0 z D, h mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 J! M; Z2 ~+ D0 A' H! r
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 K$ `& }6 p$ Y) p$ | mcasp->regs->XTDM = 0x00000003; // Slots 0,16 ^% ^4 x# @2 V/ S8 |
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- f8 s3 ?; s+ o$ Q mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 D: V3 b* F6 I) j+ [, ?- P
4 H @1 H" E" h8 D8 v mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
T: P( o2 |1 D( A mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 ]/ a/ t; f% d( Y+ y
mcasp->regs->PFUNC = 0; // All MCASPs+ A6 l. m" t* t9 o( a& R8 E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! u. W; b I* B
5 T6 l' u5 F% s0 Y% v- z4 E mcasp->regs->DITCTL = 0x00000000; // Not used+ n) K! @& X: d* {" S/ [ _$ g
mcasp->regs->DLBCTL = 0x00000000; // Not used
4 X" ]; Z/ C+ D6 d mcasp->regs->AMUTE = 0x00000000; // Not used$ X- H% i" k4 p6 c! l3 S
; p/ C1 p+ F" g: o
/* Starting sections of the McASP*/. g7 [+ h8 r) [: n( q# i" B. [
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ k, ]( I$ t' W$ C( D% Z. d* Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, \# X" Y6 n. n) G: Z5 l mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; A- e4 ?4 Q; C6 b1 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* [5 [/ p1 m$ ~8 e. c- o
; J' K. c. P) w$ l* {# o: S
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ D5 M6 h; V1 x- K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ a( T! k) i! p: N8 X mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 G4 l( |2 I6 u; i9 ?; H: [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* R. U1 V3 [. C3 N0 W$ q
$ F& k6 D& u) _+ J8 a7 v+ d/ ~, n mcasp->regs->XSTAT = 0x0000ffff; " H0 T( ^' v* P- {
mcasp->regs->RSTAT = 0x0000ffff; ( R: U5 ~( w1 [" _3 [2 a/ m
+ k) N$ f$ H Q; r& k mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! @$ C/ ^& P4 g3 i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 z- T$ ^* R+ u) b
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! q4 \. Y2 e# [2 _' y( i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" I2 {7 u4 q% Q; _4 `2 z, a) B
4 d3 U$ X& O5 n /* Write a 0, so that no underrun occurs after releasing the state machine */# Q* d8 [3 Q" M* n5 n
mcasp->regs->XBUF5 = 0;
B' r$ T. \& C6 t mcasp->regs->RBUF0 = 0;
! o, {. C' d# f) L- b& j% G L, o+ y! B8 Y4 F2 M3 N" A2 z$ {
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , i- \( j6 \9 v8 A8 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 ]! h: v Z2 d7 o, _( [) f% _ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * p0 p, i4 @' u* @& {+ s: h) X$ H7 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& l4 }0 |8 O8 [2 W* @2 C% B x* m) s$ B r4 V o0 P R
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 N) I% L9 q& d1 D6 M& Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 z: p+ B. e) p3 A ^0 v. n; a* ^ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 t0 [: q& S1 T5 z3 Q: O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 [: l, e& `& K7 a% r* ?( |. d/ `
: P4 x% d3 m% ~ CSR = 0x0000;) g; |# J, Y) ?
INTC_INTMUX1 = 0x3d;
3 Z# F/ D7 b) N8 C0 w ISTP = (unsigned int)vectors;' X5 ?* {& d( @
ICR = 0xFFF0;
6 Z, z/ |1 S+ g IER |= 0x12;
/ J6 Q2 ^, G4 S" q( U7 p9 s CSR |= 0x01; / C* D4 Y3 [) P9 c
0 Q3 M, A Q' ?0 K( X- z
- `, z" K- ]: Y( e D* N/ ^4 e, Y# F6 B
还有就是两个输入输出函数:
9 t" K+ ]; |# t( {- }: f" Q$ [void output_sample(Int32 out_data). E' p7 ]7 a3 y* l2 z2 H2 r
{
8 d* W& W( _ }! A6 Q+ T, V AIC31_data.uint = out_data; 3 _* _- H; f/ s1 Q* z d
MCASP1_XBUF5_32BIT = AIC31_data.uint;* F: {3 c- F% y1 ?6 z8 X
}* c+ F$ j8 p1 c6 R P. ` s+ ^
2 F7 C. Y; K7 v2 m9 C; ?Int32 input_sample(void)
- L/ G& C3 `- Z' V# ]4 Y& |4 W# c{ 8 D$ L8 L' F* M* h( {5 J
AIC31_data.uint = MCASP1_RBUF0_32BIT;' h) v4 U! F6 V! w8 {7 `6 {
return (AIC31_data.uint);+ K+ t2 F5 P7 p7 E. L8 h
}
, ?# A# Q) A5 F8 {
' l( q5 L" [5 W4 L5 |2 i |
|