|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% Z4 ~; c+ p9 |4 |" n& n Kmain文件:, X4 W, s7 |9 b
interrupt void interrupt4(void)
7 N- u8 Y2 b- t6 h6 \{4 w! v7 K, [ y7 `% \' G
Uint32 sample;4 P& T4 T/ c) y, G
9 a, ^% k* o. F sample = input_sample(); // read L + R samples from ADC
& a3 ~. @2 R$ X, u6 _, V# g' s1 I output_sample(sample); // write L + R samples to DAC 5 r! T! o# Q- |) w, o
return;
$ e) u4 O/ j: H" s8 S% T' r}
. h; g0 c8 B$ j( R& ~% L; t) E
int main( void )
: R' \! f* n& u- d! Z9 j{
8 j5 O n3 c4 ~, V( M, _3 j% W: _1 Z
0 \+ }" {& u" s6 V2 K: g /* Initialize BSL */
/ R7 n4 ^$ p! ]$ q: b3 `( x/ O EVMC6747_init( );2 p: {7 P/ S8 J1 n6 W% l0 P( {
/* Call evmc6747_intr function */8 D8 a- h- [& g) d n6 D1 J$ T
aic3106_init( );/ J: j4 }, K% ?" n
while(1);7 J+ v* N% X3 g7 y. k
}
: G# Z F/ c" N$ [' S
( q* U( i }7 i& o
% Z+ |: k S8 i9 _% f- {2 Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! `$ @; E: M- W3 \0 \" b
/* Initialize MCASP1 */) L# Q" ~+ D5 c; q# n- h& Y8 Q. t, P
mcasp = &MCASP_MODULE_1;
$ w8 @. m3 b" `4 S5 y) k mcasp->regs->GBLCTL = 0; // Reset) v* M$ g' _- v# k
mcasp->regs->RGBLCTL = 0; // Reset RX% L% K/ i% ]2 f* [
mcasp->regs->XGBLCTL = 0; // Reset TX* f! ?" A1 @7 u& @- w
mcasp->regs->PWRDEMU = 1; // Free-running- j; M/ Y B5 K m1 r, o
// configure McASP0 receive registers1 k' a3 W5 C( R( U9 O" o
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, b$ ` C, ^! t# G7 S mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 \0 m9 D9 b- S7 P' d8 | mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 _( @: W7 t1 `6 b- G/ w mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 F- _0 `- P1 Z" W mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 W/ o, a& R0 q' ^$ P& Y
mcasp->regs->RTDM = 0x00000003; // Slots 0,15 U; f# s) ?4 y, F
mcasp->regs->RINTCTL = 0x00000000; // Not used
8 @! ^2 k, X' n4 `: e mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' n. V- V! l6 ~7 k& [) t6 d( L& r2 K' v% R7 ]/ _: L2 _
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used! w8 p' A; D3 f7 q- p/ i" `
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* O; m1 l7 G6 Z! S
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# I6 l& u" J3 D5 _ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ h9 a2 q' K; b# Y" {) ]
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, ?" ` E2 T9 Y- N8 }+ D( _1 d mcasp->regs->XTDM = 0x00000003; // Slots 0,1
: H% ]. W/ T# e- U mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. l# H. z- ^7 Q' v- _) \/ N mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 e. o9 @) i8 ~
5 K0 o; K0 K4 V# A& v mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- K+ D( ^% {; I/ R% q4 B
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* q% g) D& B# [ mcasp->regs->PFUNC = 0; // All MCASPs
- J- }2 w. J( f, q; R mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
F8 F; |( H9 V# C
% U: B" u0 K- D mcasp->regs->DITCTL = 0x00000000; // Not used! O, T. U3 T6 C" {' C- U
mcasp->regs->DLBCTL = 0x00000000; // Not used% U% w& m2 D7 K9 h
mcasp->regs->AMUTE = 0x00000000; // Not used
, h& C9 ]- E A/ X+ s& u
; J3 G8 i. X7 F$ f' [* k% w3 l: I/* Starting sections of the McASP*/* D+ u, F3 H/ f8 K p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % d2 n/ j( i* b) }; v- M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 F4 {2 i5 U9 g/ q a
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / N" b& }/ T- \; x; G; T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 K1 I& a( Z" o2 L0 ]
, b% E% w" R0 t5 P/ Q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 s( Z5 _( h7 A7 J9 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( l6 ^- ?* \; x+ ]( L4 ~" O mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 Y7 c6 P1 @/ U+ y2 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ Y1 S/ H$ A. A5 r7 W7 q
# S* B" O4 N0 B, E mcasp->regs->XSTAT = 0x0000ffff;
2 T, M* \! Z. P. D mcasp->regs->RSTAT = 0x0000ffff; ; ^2 i: v4 c5 V2 ~
2 D0 ], ~) C2 P( b; Z9 s+ e
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; M' {# m" I" m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 A m& x/ b# d# Q% R( N, d$ O mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- z, }. q+ f! t' Z( z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 E" ^# p5 c! x m& B- X/ ]% k
; S) a2 J) e( u6 P /* Write a 0, so that no underrun occurs after releasing the state machine */8 l5 Q# V1 N) l# Z( S1 E
mcasp->regs->XBUF5 = 0;& X5 P( K8 o, Z) V0 V
mcasp->regs->RBUF0 = 0;
4 k& N0 j' Q5 S2 g
4 s) \, l0 Y2 g: d: b# a/ y mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 x/ @& t( k' \3 x8 A* @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 z" b' C! [3 c) d/ [2 W5 c mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , S, l3 H" n! G6 t4 \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 q9 b5 P' l3 a% I4 K
% t, h) x1 e% h, c! R+ a% V1 j3 \ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' f' x4 C" N: a: H3 y8 T" o2 f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- H% y0 G6 c3 h" y" X- M mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 s0 I" i0 e( l5 e. @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% L3 G8 A L4 w5 S3 ^
: C0 M4 x5 k4 ]2 n6 x$ c
CSR = 0x0000;
( X2 |- {) n/ Y3 X INTC_INTMUX1 = 0x3d;( ]1 b% x# }. ^
ISTP = (unsigned int)vectors;, ?+ h R8 j, s
ICR = 0xFFF0;
9 e# L/ c/ ]! n1 I8 {. \7 y" d+ c IER |= 0x12;
/ i' h1 R; ~0 @7 F F- ^6 E CSR |= 0x01; 4 ^. \ Q- _8 f8 \) E" A
$ ], _& g* a) p9 R' { U0 x5 k5 v
6 E4 X* K/ v8 m z
& A( V: [2 D% z" y1 Y. K" B还有就是两个输入输出函数:) w% \- H' S2 {5 r( B
void output_sample(Int32 out_data)
G8 q0 J* G C, m& { v/ i- W' ?2 d{
7 n" k# U! c4 I9 L( Z AIC31_data.uint = out_data; : w& ^! a$ m6 i4 r4 ^) t5 \3 |+ m
MCASP1_XBUF5_32BIT = AIC31_data.uint;+ j" x% t" X# Q: ?8 U: p3 C
}
, O; u0 }& p+ b2 e0 o# S3 L# L0 b1 v P
Int32 input_sample(void)8 q7 M8 t* A$ Y
{
$ R% ]2 p4 y" ~! r& U AIC31_data.uint = MCASP1_RBUF0_32BIT;% q* t" @+ }# V& v' K: t
return (AIC31_data.uint);) O- b F7 t: c2 C a$ |5 A
}4 v; w: \7 T) Q' P2 X( \
0 U$ C/ b4 @3 J1 j
|
|