|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 e6 I% f0 u/ ?+ z* C: emain文件:& w( A( h B! Y* D0 P1 j; D8 h
interrupt void interrupt4(void)
) m& ~; q, L9 k9 ?0 e# c* ]5 i5 x{
- Z& V1 [7 V1 l% p Uint32 sample;( L- ^3 {5 l6 T% P
3 X: S3 F3 @1 D0 w9 l/ S0 f9 @" i
sample = input_sample(); // read L + R samples from ADC
4 [1 Q# w2 T+ G- I$ \' |+ Y$ ` output_sample(sample); // write L + R samples to DAC
' V- Q: q, m9 t3 g return;
2 _4 }9 x# p% e$ h}! m' p. r" z v4 k
q* { n/ m# q% K# Q4 |
int main( void )6 Z5 |$ L0 J# b6 I+ `* B
{' O" K( {* V6 j
! K6 v' C, z$ d8 L& l5 n6 I4 R /* Initialize BSL */
* z6 b0 W5 C m/ o5 h8 [! h& M! s EVMC6747_init( );! E0 V: g R4 X' A/ D0 t
/* Call evmc6747_intr function */1 h. ? q* c5 v/ \& S+ ~; B
aic3106_init( );
7 m: x; s2 N5 O( U4 J" J7 H) E while(1);
# O3 e4 O" i+ m$ q/ O U! s- q}
+ y9 {! @; E9 k1 k% Z5 `
4 d2 M, _2 L# w; A! O9 M6 c; P0 C6 G/ B8 y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 m/ b. l% G' s% X/* Initialize MCASP1 */
- @8 `. I9 f, z( `- m: p mcasp = &MCASP_MODULE_1;$ f( }& x" l$ K4 ^. }# ]5 o
mcasp->regs->GBLCTL = 0; // Reset
1 @/ A/ S& x; Y# L2 G: F+ _: D mcasp->regs->RGBLCTL = 0; // Reset RX
; R# q8 n* ^. ?- r% _1 V8 A; J mcasp->regs->XGBLCTL = 0; // Reset TX) g- [$ c* S9 |' Q g, r9 l
mcasp->regs->PWRDEMU = 1; // Free-running: F7 E: \1 z2 ?9 g1 V
// configure McASP0 receive registers
0 f2 m* v+ I9 b# n mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ ^0 p) O( X' P9 I2 p2 i
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) n9 k* j# L2 h c+ I' B+ _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ |2 U, W5 L ^0 v+ s) ~' v6 t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 |8 T7 _" j7 }) e8 b5 m5 B5 z' \& m
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 G/ Z! M' L5 t7 \* L# d% M mcasp->regs->RTDM = 0x00000003; // Slots 0,12 X: n/ F8 \" x6 I5 b
mcasp->regs->RINTCTL = 0x00000000; // Not used
5 f' k; F2 ?" Z* |# H" t8 K mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- w, N6 `: G, x: H2 U3 }: u' z
/ i. X1 M5 w8 `7 @3 ^
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. N8 I9 P- q% `+ \! s
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) K1 c u8 ], I/ r! }3 R) a mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- q; y' J( h) A, [4 i; { mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 Q$ O N t5 p d$ ?$ T: j0 R
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 i d' ^, W- I- y! w6 U
mcasp->regs->XTDM = 0x00000003; // Slots 0,19 }7 X0 ?2 X5 G' R* j A1 R4 |
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit3 o+ Z+ k3 e! ]8 @
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 ?) @1 _1 t# ?- m$ u u6 s4 \! p8 b# L
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
, s( s% b5 x: k$ N& c# P9 q1 O8 W mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& M+ F3 D# l7 d2 ~) t1 Z
mcasp->regs->PFUNC = 0; // All MCASPs
( d3 [1 [0 x2 Y# n+ K mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, W0 ?0 e' b, ]8 r
N% a' v* |8 d7 Q5 n" x3 A mcasp->regs->DITCTL = 0x00000000; // Not used
$ n0 z1 V. Z5 |8 Y& g mcasp->regs->DLBCTL = 0x00000000; // Not used
& g7 M1 o7 s% Y0 X6 F mcasp->regs->AMUTE = 0x00000000; // Not used* ]$ q! H% e. x2 c' o
3 Y4 y8 @) B. j1 v. s0 N/* Starting sections of the McASP*/+ p. r0 W$ l; v1 |3 E, K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 e* N& g, B' v' t( J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 3 t. U9 }/ t. O& L# {8 g
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 N, W8 b% o: Q5 ]) ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% P5 ^& h4 [6 Y8 P$ t# z8 C+ T- \( U: G2 R) d) l7 g" ^/ W- c' ^% R
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# v) B" T- B4 o( \$ g, r6 l2 g2 O2 M* z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
f) q, n1 |! c5 X: F d mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* m7 {; y2 [0 q1 s4 a j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. X$ p" M# ~0 e5 g% O# y- m* E. \2 l
8 i; m. ]1 V; X/ X8 R mcasp->regs->XSTAT = 0x0000ffff; . S$ z8 q8 h! W& T
mcasp->regs->RSTAT = 0x0000ffff; 5 o9 y2 {% t8 p4 u; i, @
$ X- `1 O- o- X2 a' [7 M
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- F; i1 P! e' e7 o, d3 ]( Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. U2 e( D+ b( x: s3 a6 G
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ h5 `/ k3 G) ~' u) X, f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 f& y3 A& A) X. j, s$ _2 ~( z0 S- o4 M6 o; k# L
/* Write a 0, so that no underrun occurs after releasing the state machine */
5 j/ K3 g/ |; G mcasp->regs->XBUF5 = 0;
! d# }, a. n0 E% b% t mcasp->regs->RBUF0 = 0;' f* M6 _7 _$ T l! e) W
" C: Y- G6 b9 |! c' x& ~( m
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 Q8 _* X8 L& y7 Y4 |1 y3 O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ Z4 m9 h5 N" P- o' _* D$ k
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 m" g" u/ {' ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 B" T9 J% k/ j6 C) K5 p+ t
- a% x; x1 ?- x. Q! |4 Z5 g& O5 s" U mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; E6 h% b4 }) l3 `5 b# l% v I& \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ G, \7 k, l* P! n7 u, Z' p, [ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) J: ]$ O2 V S" C4 a. z# N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: U% M6 w* g7 }3 p4 k& Z0 O
% g6 R+ X3 o( l' o4 H9 Y3 s5 y CSR = 0x0000;% j) z+ A; l# m/ Z5 y6 W
INTC_INTMUX1 = 0x3d;
7 H) w2 b9 x" w# N L8 p ISTP = (unsigned int)vectors;
7 p, u" r; v# L, k" R: V8 i ICR = 0xFFF0;
6 A! l9 N( |- [2 [, m1 E IER |= 0x12;
) k( r) S# N: t7 | CSR |= 0x01;
) H2 f, S) z5 a/ k' ]! X% W* a' M8 P" x- q; C4 m* N8 D$ ~
$ b( U9 R7 p& T m, K( D9 k* D) E
0 r% D/ ^8 e2 k1 X5 X还有就是两个输入输出函数:
! ~' w# C! O* m9 Ivoid output_sample(Int32 out_data)
' U$ t( \! {' f" L' }! Y{
% O4 b! s/ P. ^! Y4 Y AIC31_data.uint = out_data;
; O' d; [) j4 L8 E0 T MCASP1_XBUF5_32BIT = AIC31_data.uint;5 Y, q8 q3 J ~( T- J5 R3 W6 j3 ]* v
}
. T7 h f5 N# ^# c; T- F* u( d4 ?+ X8 Q4 w6 x
Int32 input_sample(void)
- m) p3 E# x( ^9 }5 D; P) S' J{ * j4 w; A- d% M. X' H$ c
AIC31_data.uint = MCASP1_RBUF0_32BIT;' t Y: @) }4 m4 e* n$ r, O
return (AIC31_data.uint);
6 ^( L: b5 }# m, M& C}
5 D% v" k5 i0 @6 m r- Y
' K& c! g; t7 {6 {6 c: O |
|