|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* t: |5 j' d, }+ o8 ?main文件:
* [5 N. F9 I( B8 ?5 kinterrupt void interrupt4(void) 8 y- B S/ o. r) o, U. e, k( j
{$ _8 E- y: @: C S
Uint32 sample;
3 i2 n4 ^, m7 U% ]
8 V B# \/ o- y) H7 O sample = input_sample(); // read L + R samples from ADC
! b$ T7 O$ J5 H8 V output_sample(sample); // write L + R samples to DAC
$ ` S8 {% [( ~: o8 b% j return;9 f9 u/ t- s4 _( r2 _- E
}! w# }! M( W Y9 G) f
) L# y8 a, S! F9 f- U% i1 a; fint main( void )8 g4 G. `) P* g8 ?1 [1 F
{
5 f; I4 o; a) O( u3 j9 e9 o# m
* O. Q. J, e* ? p& y' e /* Initialize BSL */
# p6 D! @' R' M7 W) F4 [ EVMC6747_init( );" c* e" j9 ?9 g! n) r* i5 e
/* Call evmc6747_intr function */, d b7 O% G B' ^" T K+ |1 y+ q
aic3106_init( );
* z- D* N! ^0 Y/ P6 ~. {3 U- V; u while(1);4 v$ q5 T. T3 q: u) I- d5 e
}# W* h" `0 d: }3 q7 {, ]# O+ W
. M6 E, ^" F8 p- l; j6 I# H$ n
9 F6 N& Y1 ], f9 d& @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# M0 y3 a3 ^1 k( A/* Initialize MCASP1 */9 V4 O% v1 Z- Z" j* ?% i
mcasp = &MCASP_MODULE_1;7 R+ C7 N3 K& r" H0 I3 m* d, r
mcasp->regs->GBLCTL = 0; // Reset
5 u7 d* s0 D6 s- q! ] mcasp->regs->RGBLCTL = 0; // Reset RX
% O' t1 E+ n' L1 E* M/ X. l# p mcasp->regs->XGBLCTL = 0; // Reset TX
- h2 n* }7 `# { N4 X mcasp->regs->PWRDEMU = 1; // Free-running
& m9 H- H3 X E, O8 U // configure McASP0 receive registers
% w8 Z% N4 n0 ~6 G+ p9 o5 p mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& U5 J" _1 q9 P) A; Q% |
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 {8 G: X% |' S5 H; I
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 w5 g1 m6 w4 d& h6 ]; I7 m. h1 I$ z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 ]& y5 o& ~* A9 B1 J* y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 f' u9 t7 N4 h) | _" U5 [3 P
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! U2 x% M/ ^; C* r% w
mcasp->regs->RINTCTL = 0x00000000; // Not used) |) \) _9 j6 ~" ?- u
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 ^& n1 c6 R/ q* d+ M
$ i6 |! b! Q% y; r b: R' B mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% n7 i; b# b# A- I4 f
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 v; J8 `7 [ h: Y$ W3 x; s mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: c+ i2 E/ n1 ?2 \
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
j: w A+ C$ V3 H& s mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ Y0 ], g' a3 c8 a mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 F/ x/ p3 w6 ]6 _+ `+ b5 Y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% V. G, S1 ]- ?) a& N
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 U _# s+ E! a
, A5 i4 o' J4 m n9 j" G$ g+ e mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! q* ]( i1 P" I$ K$ a mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: a- Z2 B9 f: i+ { mcasp->regs->PFUNC = 0; // All MCASPs- k" _3 J9 m( C5 P2 j" e
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( o2 ^0 v6 K7 `& Q7 U8 V; C+ |; I! T7 S* T7 A- L
mcasp->regs->DITCTL = 0x00000000; // Not used
4 q2 v$ S" B9 b/ n4 E" {. @ mcasp->regs->DLBCTL = 0x00000000; // Not used
1 a1 Z5 @7 P; P( L mcasp->regs->AMUTE = 0x00000000; // Not used
" z3 s# A& g% a/ [7 T! M7 Z# G# X+ Y2 i: z5 P0 P9 v; g! a
/* Starting sections of the McASP*/
$ Y% x" T( _0 H mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 a4 t4 a$ X$ m! T" O& _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & Q4 W, S% v& L- W7 C% S P O- Q: g
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- o2 _$ ?, q( i' m& v3 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. u9 s5 O; @ }$ i
/ K. f2 y$ X1 D1 N8 y& @! W0 L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : ~5 Z. y2 A- t! Y9 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 t5 t7 Q1 |4 u% B5 a
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) V; |& [0 S7 Z% |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 |1 w+ p1 m6 P1 z0 k: C5 _) ^+ w4 W) ]$ R8 @* u. ~
mcasp->regs->XSTAT = 0x0000ffff;
6 h" F0 E g6 }; G! W" x mcasp->regs->RSTAT = 0x0000ffff;
! n k/ O( e9 L3 t$ ^9 c- a( e
" }, K9 h8 h2 \0 q# K" g mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. _2 r) ~" U3 t% t) X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ U6 ?6 L! N! T1 Y, B" q+ b mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - @0 u5 e2 E' o- [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 W0 F& f$ f6 m# R! Y
$ W0 k4 e/ T2 y: B7 x. I' }% J8 p /* Write a 0, so that no underrun occurs after releasing the state machine */
: y; C! P$ ?2 K8 ?8 f& T9 U- ~ mcasp->regs->XBUF5 = 0;
3 L; ~% n) Z& k) o9 Z3 x) T mcasp->regs->RBUF0 = 0;
m0 x. E+ b' E; P! R" W: X6 \$ a3 S o) }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 G' j3 |. n, A2 e% ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, ^' v2 p4 }4 f* C$ F! P mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ P, w7 a+ r- Q5 _& o% `& M% R! r' a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' R' v9 Y- F; {- w+ c! a" h! |% h8 j
, Q- N5 D7 d( W9 S, \, D mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- C, ~- S- s; J9 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' P- I0 b/ l! g, @& C' e mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / G. H6 `4 j8 X- K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 u8 u+ S, p6 J7 C$ T* ?% x
% u4 ^' ]2 d8 G CSR = 0x0000;
+ ]7 A- j2 `( H+ c, c* x- f, ?6 D INTC_INTMUX1 = 0x3d;
+ B X. }* n' W# i0 v ISTP = (unsigned int)vectors;! ]; d: y% W4 \) F/ X
ICR = 0xFFF0;
+ {. R* k" B8 @1 E$ Y j IER |= 0x12; 9 U; Y/ O# [4 _" l
CSR |= 0x01;
5 ~9 F$ N' E0 P* p0 j' ?/ _% x& K0 B& u# ^ E( o
/ S; K' ~! g3 S. x4 y. R
6 V. @: T- y4 H' E6 t/ c, y4 c' \还有就是两个输入输出函数:
) g3 H. u, J3 ^$ Kvoid output_sample(Int32 out_data)5 P* ]) C1 G+ J) u3 ?
{' k1 o7 O! Y" j1 x, g1 I/ j d
AIC31_data.uint = out_data;
0 ]& e0 Y; l( e MCASP1_XBUF5_32BIT = AIC31_data.uint;5 }% h, [1 G G" |5 {
}3 t" |7 |! Y" r s! y: m3 u
6 j/ Y; X" {/ nInt32 input_sample(void)$ u8 V6 V+ y( l
{
3 C( J1 N B G9 g' o1 | AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ j+ R7 r% M$ k+ k( `4 t- C ~ return (AIC31_data.uint);
7 x* Z' L0 H5 ^}
0 [% s# b# p: @, Y+ j+ v, P, q) Y1 O# a$ j1 n8 f/ [
|
|