|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) _ \- f! d& V; B3 G" H3 T) k5 y
main文件:
5 T; P6 F( }! A; sinterrupt void interrupt4(void)
& `2 n+ l6 z1 _ A* T1 y+ }9 T! X{- a, W0 |0 V6 r# F2 a, ?6 a% v
Uint32 sample;
, w; t* z! ~* Z$ S& }/ A2 E* G# t: ^- K. U! r3 u& \6 l
sample = input_sample(); // read L + R samples from ADC: a5 p8 u7 Z# p3 k( u; B
output_sample(sample); // write L + R samples to DAC
, N- x3 m9 L/ c# X Q5 L. ]# J& ] return;9 R3 o$ B5 Y7 i! u' r( c; E0 w
}
9 _* m1 {9 K- ?3 K* }; J
$ F5 _+ c8 T6 J0 Jint main( void )5 y% c: y0 t+ z# ?" Z; p! I" Q7 j
{
" A/ L. ]: [0 L# t9 C
0 c) @% A1 Q( y: K% g+ T /* Initialize BSL */
/ q- \9 z/ a4 @2 f EVMC6747_init( );
( t2 H: Y' w/ s9 i) H5 U% J /* Call evmc6747_intr function */
2 ~4 ]3 S9 P4 x% c; M1 P aic3106_init( );
; U& {: B6 ?6 @ while(1);4 V" b2 a5 ~. s2 g# {
}: Z0 e1 o0 i9 [- @8 `7 @
- U$ V8 S7 V6 U' r9 p* N4 r
! g: J! f3 `& kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% i" [4 s# b, g
/* Initialize MCASP1 */
3 w" Q% A# d* p. b! b. N mcasp = &MCASP_MODULE_1;; @1 ^9 Y7 c6 ^9 ~
mcasp->regs->GBLCTL = 0; // Reset9 M |' w, e. o8 w. o* m; Y
mcasp->regs->RGBLCTL = 0; // Reset RX
1 e3 W) C+ j0 O0 P mcasp->regs->XGBLCTL = 0; // Reset TX
+ d# P% _( m" ^: j: a+ G mcasp->regs->PWRDEMU = 1; // Free-running7 q. ^, q2 n8 P! J0 r( i; A K' v# Z
// configure McASP0 receive registers
) X/ P9 X. `3 q mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) S) A+ E5 O3 g4 B
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 u6 y4 {/ G1 F; |& ~ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 Q) H4 ?$ Y# x' t$ q: j2 t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 L3 P, \3 W& B
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* K7 A( h; T: `, i
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 B/ l% M/ S. j+ k; C mcasp->regs->RINTCTL = 0x00000000; // Not used
; }5 W8 J+ Q! J4 ~7 P0 |2 y% a mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% k0 [# u. T: a! u* {6 w
" b4 l/ {3 C1 `; E7 a7 Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' H9 I6 @ S: b9 c r mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' h! u. f4 c* p/ s+ O mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# B1 a! X1 r$ g! V6 H5 L0 A
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- C3 r8 y# ^" E$ l5 A mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ i7 e6 B3 Q5 _+ N4 K8 j mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 V' E& Z" |' a0 A$ h1 g7 ^! B mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& m7 L' F- m, C) {
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! q+ ^& P) W6 R* Z7 \( z
! x( E( P' s* b" s- f' k) }4 P& L mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN& V6 l0 G3 _/ F! l) u
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
- {* ?1 `, z, |. L( l- `8 J, G L( ] mcasp->regs->PFUNC = 0; // All MCASPs
( O4 }8 U8 v- H9 L mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; E& X- [3 N7 G1 r% q# W# B: J; I: h* w7 v: e# n" ?- X* b8 v4 S' d- E
mcasp->regs->DITCTL = 0x00000000; // Not used% o7 V5 P K" n
mcasp->regs->DLBCTL = 0x00000000; // Not used
) L+ i# k; u- S5 c- m a mcasp->regs->AMUTE = 0x00000000; // Not used
* d P( y/ `' b/ F( X
9 p' s& T* h& M0 z- A* I/* Starting sections of the McASP*/
; b. P2 z# x; _, J2 M" N8 z* ?5 Y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 X5 t7 O, l! X3 z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 O t, a) i& M# M mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! e0 X. A2 F% {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- z) V. N( |# ?5 k; V- ]/ n$ W$ N, E6 z- ~0 K* d
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 p3 h: a' R# C7 S. r& U2 ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ S9 a/ h Z2 { mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. ^" j$ Q# g: ^, |- O1 Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 s+ K, l- T0 K& F1 c
0 }: j3 Z! [9 w, J3 W
mcasp->regs->XSTAT = 0x0000ffff;
$ t1 m" P- i0 }3 a* y) N: z4 Y mcasp->regs->RSTAT = 0x0000ffff; . L' y$ t3 k Z0 _- Z; i, D
- T* h1 S3 q. c a( l+ b$ C
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* a! u2 h& e6 y- \2 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 u0 L; {4 j* O' o, J0 r" z
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 G) u$ f. ~. \9 V+ E5 Q1 Z- E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# O7 i. N* O, w4 P; t0 Q8 s+ x9 Z+ M
/* Write a 0, so that no underrun occurs after releasing the state machine */$ c8 M" U4 o! s5 Q% U% x
mcasp->regs->XBUF5 = 0;
2 _9 g7 {" L( \9 q/ s mcasp->regs->RBUF0 = 0;
9 C; u' d1 A; f# r. m- S
( L ~2 x- S& I3 }! e mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 e6 a5 j2 o! b1 c. p S& p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ ^* K4 R0 g+ v' L mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; @$ o7 W4 e- W( q6 e% S% \+ {7 d% B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 ~0 `. e7 y) P7 [0 W: X
) d0 r8 B/ ~7 u) h* J. D) I mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( O1 w/ g) W H7 Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); t i& O$ V9 a2 K; z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ X% e% c. j/ C0 O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. }* y, E. s9 Y2 I, U3 _$ y% r$ x
4 z% T q4 w; r$ e+ y CSR = 0x0000;
% }4 }) s, B4 N; k5 @ INTC_INTMUX1 = 0x3d;
- O. W2 \# N' l- m) [# q/ | ISTP = (unsigned int)vectors;6 d5 K0 v+ e2 n( ~4 a
ICR = 0xFFF0; 7 k+ `) E( u2 S0 T4 ]+ f
IER |= 0x12;
5 B8 N% U8 k$ ?, Y& \% b CSR |= 0x01;
, e+ [* I1 J" O1 N6 N5 K& `5 @, _$ Q" }3 W4 q6 ~9 s: A0 f
$ T. n2 J. @, j8 u% c
3 b1 B5 ]( {/ ]+ N" O还有就是两个输入输出函数:/ l2 @$ A0 {6 n
void output_sample(Int32 out_data)
+ Y$ e+ D, {: C! s; y{# r5 N b& j% n2 {
AIC31_data.uint = out_data; + J0 Q9 G, G0 j. Y% l* c
MCASP1_XBUF5_32BIT = AIC31_data.uint;
% i0 Q+ v- |0 M% \! B}
+ M7 A" R7 j! t3 j1 e# z) p% _4 Y
Int32 input_sample(void)0 U6 q2 }3 `5 I7 R" F1 o* _. m$ M7 t g
{
: a8 Z" Y% t7 B5 | AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 a6 i0 B. C: B# d" c, n return (AIC31_data.uint);
" h: ] Z. N5 p3 z; B8 S}6 e* R7 n/ q! Y& t* k6 V! O
& S4 m9 O( F' d* @) {' B |
|