|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 }' G& t& i M) \$ y' ]main文件:5 p" Y7 G4 M0 q% D9 G
interrupt void interrupt4(void)
% A9 X0 S8 B7 C3 L{" s4 k$ R$ P8 O2 f$ _! i
Uint32 sample;
% n z. M# s! q% _2 d. ]. ]. P5 t2 n/ }2 M( Y% e- b$ ]4 f
sample = input_sample(); // read L + R samples from ADC
J! `/ b: M- a, O ` output_sample(sample); // write L + R samples to DAC 8 A; {% q! W4 ]6 q: l; J
return;: t2 ~2 l5 [8 Y6 ^7 V' j5 C
}# ^8 d( S0 o+ k: i3 o
( R3 Y& Y5 f3 n# Mint main( void )
$ w. _4 a7 C6 O O8 m/ @1 P% o{
8 g+ E# p+ A: N, v: @. d
; ^* r* s6 c$ J/ V( c+ x& J /* Initialize BSL */
4 o' e+ v( l4 {$ m2 _/ S EVMC6747_init( );. r2 M4 w/ U5 {
/* Call evmc6747_intr function */$ Z5 l! L. H2 w$ I+ ]9 F- W
aic3106_init( );
$ F) A5 ]3 B1 |( Q9 H& u while(1);
4 b4 {& q" Q% R K2 f}7 F! v( X. B5 m9 e' X _% ?
# x* l: U% e: W+ I0 c
u+ E o& N6 I! ?/ i1 Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" _4 y! @3 [6 i: _
/* Initialize MCASP1 */
! Z: {8 G" n0 q4 n mcasp = &MCASP_MODULE_1;( R9 m& u2 m9 u8 E4 E
mcasp->regs->GBLCTL = 0; // Reset& w3 _/ T! C6 p9 u2 g8 J
mcasp->regs->RGBLCTL = 0; // Reset RX/ [- ?' G. ~5 F
mcasp->regs->XGBLCTL = 0; // Reset TX" H- l, _: `' b9 ? T
mcasp->regs->PWRDEMU = 1; // Free-running
8 `0 n" b' T" w4 d5 o // configure McASP0 receive registers
$ g( g/ s4 }1 Z3 Z, A0 _ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% d3 c3 d5 G; K" W# ~ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ W0 r" N9 s3 D( S# ^
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word( L6 J! o G7 `3 Y0 c$ G
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* y- C: M+ K( N3 } mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
: e7 h) i4 l5 J% L( ] mcasp->regs->RTDM = 0x00000003; // Slots 0,17 K8 K# x+ p9 c9 S
mcasp->regs->RINTCTL = 0x00000000; // Not used3 t7 D+ @" ^( _- t- O
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. ]8 ~# ^( z) a' \6 o
/ P" s( S/ C$ k7 |
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 I7 E& d0 G3 `5 p
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 o3 D0 L* B! g0 l
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: {5 ]9 Z7 a- T7 n$ P mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 t) m: i% O! A& E
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* v' Z" M$ z( _; R" q
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* L# i$ u( i+ o$ c mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
$ h/ A% O' Q5 @& q9 ? }3 K mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& ^+ e7 m0 }+ b$ s" o) q
! c9 r7 g( r$ D5 b$ V( l
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 t8 E* |/ x+ V% R. m! n- ?
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* O% H$ V, s/ ~6 e
mcasp->regs->PFUNC = 0; // All MCASPs$ _3 \+ t; y- C
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ ~# c: M+ w9 F6 ]8 x( t0 U
$ `# h* a+ D8 } d9 o4 W8 w; g mcasp->regs->DITCTL = 0x00000000; // Not used
0 B. Z8 Q: ]1 z$ Q2 e% y" H3 T# ]( b mcasp->regs->DLBCTL = 0x00000000; // Not used* I2 C, q7 |" A6 z. G
mcasp->regs->AMUTE = 0x00000000; // Not used, U) ]7 l3 ~$ D) T% \1 H& c
& e8 |' |5 ^" j1 Y0 F5 Z
/* Starting sections of the McASP*/
( r. I4 o1 q8 V. W% }+ \ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 @. C. q' Z% d, y, O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ' B6 H$ D# o$ Y" q! i. u5 V) U$ U
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! d. R" ]: q, I6 f7 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 e" s1 V4 n0 ~9 b3 A6 h7 P( w' l/ {1 i. T6 \' l
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 }2 B! C6 m; I$ \! j4 `1 W L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! \! ]6 c8 n$ L0 b8 z mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( P/ M: ]% q0 t2 S; U, l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! e+ r, R, B1 l% X+ d- A- k. D$ N( o/ ]& g4 N
mcasp->regs->XSTAT = 0x0000ffff;
b" T: l' f4 S9 p7 v8 ^5 q/ T mcasp->regs->RSTAT = 0x0000ffff;
& m$ V- W0 f% l8 q( J: t; B/ f7 i$ |. O+ W' G, n9 i
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& H. b ]4 ]% ~1 e, d) v, v' Y k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ ]4 u$ l! c! _4 a9 A/ p" O4 H
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 @# p* V( a* ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% }6 q5 z+ Q' g1 V! l" P1 T; G1 I. q/ U4 ^
/* Write a 0, so that no underrun occurs after releasing the state machine */$ X3 E+ p* g p$ M7 \# b9 j
mcasp->regs->XBUF5 = 0;# {% H% B1 c+ Y2 p
mcasp->regs->RBUF0 = 0;! y; H" b6 f3 ~- T% }* _
# _( E, i f$ z$ X
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" M3 B( ]! S6 [& s; @% U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ Z: k" b1 n: ?- G
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( X8 P9 G. D4 @" t- z) q# Y6 s1 `/ c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 \5 G2 ?- o2 S1 j
1 L$ e$ Y! H; R# H- H# w) Q8 m mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / q. Z/ d! e/ F W$ `. ]+ X" r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' K( M' [9 {* V: @5 F% s$ {
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# f( {4 \) m# r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# q9 T$ \8 R0 I- Q5 W3 U' c
% _9 }6 L0 P4 \4 L m. f CSR = 0x0000;
! t4 U! V9 _+ @& h$ O INTC_INTMUX1 = 0x3d;
( X( V+ j( E9 A* p; G ISTP = (unsigned int)vectors;
R4 n/ C e8 }5 o; T ~ ICR = 0xFFF0; . A& X @% V; a
IER |= 0x12;
1 E1 u% \% Y# [# V P0 I* R CSR |= 0x01; t- P& T/ _+ Q; K
% \5 ]& _- H: Q5 {( Q0 \: u$ W
7 H9 i* O7 m0 A" p# ^: J8 c
" B, i0 y% L4 M2 l2 d
还有就是两个输入输出函数:
% M. B6 k0 u6 @9 g/ _; m! _void output_sample(Int32 out_data)
7 p1 r+ w. R7 i) F+ E p% E{9 f2 r0 f1 b# u" o
AIC31_data.uint = out_data; # Q) M- ?( ]3 E4 t; S
MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 x3 q p9 @4 d}
8 {/ ~# F" S( `$ w" b% z6 l
7 {$ m" n! n# x3 S* NInt32 input_sample(void)9 W8 P' T, @$ e0 P+ S8 u4 v
{ 9 K7 }7 t! y- [0 |- ?0 H
AIC31_data.uint = MCASP1_RBUF0_32BIT;1 X# A& W4 w1 F( k3 J
return (AIC31_data.uint);
4 g) p) t0 w( G3 F. \) P9 A) B% Z7 x}( R, F8 m% ^% \& E" D' H# ?
" m4 L5 [. C( c9 H' E |
|