|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; [0 k5 N% _+ W# t" ]main文件:. A) e- e8 N6 X& b' w4 o5 s/ ^. z
interrupt void interrupt4(void) - o# K" W# b5 S1 i" H* g
{1 ^+ R0 q& l+ v
Uint32 sample; x4 n" I4 H6 W6 v: [( C
, r+ r" J/ F; Z1 @8 l+ W sample = input_sample(); // read L + R samples from ADC
5 z& F, W( @) w1 ] output_sample(sample); // write L + R samples to DAC 1 z) K! j3 @# a% C# J- o' X
return;
- M% ?* T+ O" u& S}
# i' J/ Q0 a6 f+ M7 F* [: O
8 \3 t/ g! w# E( z2 Fint main( void )# s v% Q& T/ o" n2 d) h3 |+ [
{
( w3 V( w) X7 g$ g+ S2 O Y2 i1 t0 l& z
/* Initialize BSL */
' x0 R# F+ r: D EVMC6747_init( );
8 z" Q4 n8 H" K& ~; N( V- A5 d% X$ { /* Call evmc6747_intr function */
: I* ~7 y [5 m8 N& Y aic3106_init( );
% b6 m* c# g' ]8 n- }- i& F0 @ while(1);. x9 o4 k' Q' w7 {5 u3 C% b! K
}
9 V- ?; f& M2 y, }7 R7 K: Z" r/ N
! m1 C) }# l2 P( U1 Q3 b! b4 t4 w# N# W3 r
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 O' c B, L# a/* Initialize MCASP1 */' F4 `: h, g* P9 }: w% y0 q5 l# t
mcasp = &MCASP_MODULE_1;; n( j x8 O7 t! j7 v0 O! ?2 ^# ]. W
mcasp->regs->GBLCTL = 0; // Reset
, L" p# A' U- V& E4 {) g mcasp->regs->RGBLCTL = 0; // Reset RX
* J" G! j* b6 z: S/ @3 q6 m, M mcasp->regs->XGBLCTL = 0; // Reset TX
& H- G: E$ ] h- `' k! J mcasp->regs->PWRDEMU = 1; // Free-running
* j0 x5 f( ~, n0 i4 m // configure McASP0 receive registers
2 M/ O2 d- M* D0 p9 \+ {9 ~ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, K4 @/ r2 k# k. E5 A9 Z4 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" v5 I1 i0 v( m6 j2 o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' I3 }2 v; x: h R/ k1 M mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); b+ P$ S+ i: l$ v: P B: G
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 Y0 R7 t$ i7 S; o8 `' e
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 `8 t* E2 _ J0 `; b3 c+ u mcasp->regs->RINTCTL = 0x00000000; // Not used+ _6 d# }3 r( O" H( J
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 A/ ]% i% M" ~
% P# f: a( U/ }( ~5 ^, ? h+ e# U- F5 a mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
5 Z$ x5 w) B# z/ A! l mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 F" A0 F; a3 _' Q5 v mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 } |' P6 `, J1 G/ _: L4 x
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 S0 b0 Z1 A v6 H2 V! e4 J% m mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& G6 d1 J. B" e
mcasp->regs->XTDM = 0x00000003; // Slots 0,1. V. ~1 S ], ~
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
& {- m& m- W- d0 t# s) A' d* {7 B mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* ^& @+ I$ Y$ d+ k- o
8 Y. e4 _1 ^8 d& S mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; V2 ^( F M* C6 f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' v' C5 m/ u1 g3 d8 S
mcasp->regs->PFUNC = 0; // All MCASPs
) Y6 A7 \: Y2 C0 b mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! e' b* J5 F7 K+ S0 C. w. ]; V( x
2 M1 ]5 L1 P- f( g- P0 ~& q mcasp->regs->DITCTL = 0x00000000; // Not used. H$ Y7 W# y/ j8 z& s
mcasp->regs->DLBCTL = 0x00000000; // Not used
/ }2 @8 P+ D- [4 p3 G mcasp->regs->AMUTE = 0x00000000; // Not used- W% y+ k2 E+ F f/ ~
0 q, H/ x( B3 l8 ~5 L) G
/* Starting sections of the McASP*/
" k0 c$ O; [* ` ]6 p( s' Z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) ~3 o& J* s8 O- v( K9 A' P& {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / D, |+ J# b8 H/ x' Y- N
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 \2 C+ o! {' n. k1 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 q# C5 Z( m1 n9 B, h8 Q: W/ N5 g! O0 Q$ _0 C9 K* F# J
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " g6 v5 V( k' b+ F D0 u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 n( U' }9 V5 Z, k6 B mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% g/ w1 J! Q; \1 d3 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ C+ P9 ]; u6 {: a* C
/ V( V! ~( d) V6 `0 d3 ]$ a
mcasp->regs->XSTAT = 0x0000ffff; 3 i9 [) D% q. v0 [' q7 [0 o
mcasp->regs->RSTAT = 0x0000ffff; 0 }4 f" t: M3 b; a6 v
" v5 b" X0 l$ T# [
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& Z- P' l& `9 ~ {6 ^& { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- K; m1 Z1 Z: o% ^& i mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 l6 M4 P2 T" e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* K) t& p# C8 t. l
9 i6 n3 \: j9 ^4 z5 { K /* Write a 0, so that no underrun occurs after releasing the state machine */
: s# L' Q! J4 I/ v5 H1 Y mcasp->regs->XBUF5 = 0;
) J1 F& ?( \; [) n! y( _+ V7 L mcasp->regs->RBUF0 = 0;: v. P) g0 O; N
& |; V6 F. u4 d4 K+ |2 T) [1 F2 C mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + t* e+ }+ V1 `7 e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 @, i* E( g p
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 _" C* J5 _& B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) e `" l6 G p4 u4 o2 M8 }. X$ A9 `
6 N' R4 N$ q( D/ p( b! ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 V1 p2 v+ w; R# t+ m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: ]0 p9 f, L) Z$ {$ @4 R mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % i: _5 C/ }; ]5 {4 o1 @; q) u% j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 f) Z) n* V9 g& V1 ?0 N; E
$ M% [8 ^" `8 P. i( D% u" ?9 u CSR = 0x0000;
$ }7 S% w, [( `7 A' B/ }1 ] INTC_INTMUX1 = 0x3d;
% u$ c- `" f6 m# s6 Z/ P1 f F ISTP = (unsigned int)vectors;
" _2 [4 j, x% { ICR = 0xFFF0; 1 r3 P0 D. g) x; y
IER |= 0x12;
. F% g# i/ J4 k7 N) d CSR |= 0x01;
: y- Y4 v# j3 z
+ i5 Y/ ~5 q2 }9 O6 S2 r
( ^4 @- u; U2 q$ c& I/ ^& H9 ]
还有就是两个输入输出函数:' S/ X) ^; {7 P: l ^
void output_sample(Int32 out_data)
, j3 n* t$ f9 `% w{
. i, u& @6 @6 q/ @ AIC31_data.uint = out_data;
& |! k6 N- R3 Z/ Y( ` MCASP1_XBUF5_32BIT = AIC31_data.uint;
) I) H# _ y$ ]( ^; k/ g& I4 ^, O}0 j" n2 Y7 O6 a6 J8 T
2 u2 P( U& N! T8 kInt32 input_sample(void)
( @% q) m& c5 G{
; |" f2 S1 f9 ^ AIC31_data.uint = MCASP1_RBUF0_32BIT; O* A2 ]3 l" @2 \8 O
return (AIC31_data.uint);
- r* G# W! h8 d! f" V}
+ @1 Z) T2 q& ~! T5 n
, r1 S \, P; M/ ]3 Z, s! |) r4 J |
|