|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 l4 I) w, v* A& j7 ?
main文件:
; D/ m2 Z* h4 k$ ^interrupt void interrupt4(void) 9 e8 @" w/ r' x/ U
{7 ~* ?, p0 U. k) D
Uint32 sample;) |7 [- t3 u% o
, y7 e0 @. Q# a/ s. \ sample = input_sample(); // read L + R samples from ADC
% o3 N( v6 B9 l: N6 z9 q output_sample(sample); // write L + R samples to DAC
3 f# b" e( f6 Y9 r! [3 V return;, r( Q: a2 |+ J. i7 Y0 P/ B3 s" Y# J( D
}9 ^2 n; s7 o2 e2 T* R( X; L
- i/ ? n: p% N$ }int main( void )
8 y8 c" ?8 m6 }5 F: A{- u r! B% f; L
9 M' `$ K2 h! C0 y; b8 J# b! C
/* Initialize BSL */
% D6 R9 |# W. q5 m- G EVMC6747_init( );, I2 e' W% D6 ~: k$ D9 j
/* Call evmc6747_intr function */9 F2 `1 K* v' M
aic3106_init( );, C& m( [, K' h4 D ^2 d7 n
while(1);3 a0 F% q$ L8 g0 Q. p, m
} M1 _9 n+ g1 W/ S- l/ F
B/ k& H8 k V4 g
$ v/ X t D* s* A% A# @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 O ~4 G+ f U8 b) k/* Initialize MCASP1 */
/ r, Q* Z+ W: X( W* C9 Y9 x mcasp = &MCASP_MODULE_1;
& ~( [5 A B) R5 H& u: T2 ~ mcasp->regs->GBLCTL = 0; // Reset9 x& e/ ^ F4 e# K* `$ y. T
mcasp->regs->RGBLCTL = 0; // Reset RX0 j0 r7 y; v0 z( ~1 Y( S' I; a9 v
mcasp->regs->XGBLCTL = 0; // Reset TX, q1 D# `* L4 O% X) m( q
mcasp->regs->PWRDEMU = 1; // Free-running0 r9 h/ l1 U( [9 ^- S
// configure McASP0 receive registers
7 H; G; w( T8 g% [ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ ?" k$ k) q( d/ N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- @5 c' C. E" [# q) _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- y# w, o- A8 W; M! I
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 @0 m! P; L Z; P; f/ y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 C3 g3 }0 p* f& j" t6 ^
mcasp->regs->RTDM = 0x00000003; // Slots 0,1* x- F- Y. j! ?) N
mcasp->regs->RINTCTL = 0x00000000; // Not used* v; O$ }' j# O |9 ^: [8 a
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* f# N! x: ~ ~( b1 s4 M
% w* B% W0 x4 \5 @& c+ ~: F/ X mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 _' ?2 P/ M" x& n5 b9 n& V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 X5 {7 `7 m" \) N$ c" T, P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( }9 `4 H0 W. i# d, X$ `
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
}: b1 k% j; L+ [# O mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK3 F2 P! q6 B3 T3 A/ h
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ ~% N) s$ K9 F# p! ~7 _ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 h/ ?2 k, V( ~# U1 C% P' w! P mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* t. t, T0 b5 N9 h$ X- a
' k5 P+ A5 R! d) X( y mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 I V+ e* T) K8 f3 B1 _8 k$ R5 P+ y
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
" N: v' p2 D; ?) T* k8 n6 t mcasp->regs->PFUNC = 0; // All MCASPs8 D8 Q U0 H& s" G* U b
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 |: c0 y/ @2 M* P
D+ v5 h- W, X6 m8 x mcasp->regs->DITCTL = 0x00000000; // Not used* G$ G( j, Q+ Z1 V$ y" h9 V" z( w
mcasp->regs->DLBCTL = 0x00000000; // Not used
K$ N6 e8 [1 c7 a mcasp->regs->AMUTE = 0x00000000; // Not used. Z: j& J5 s. W' n& k) S6 e; c
/ } ~; c; ~% B+ Y2 C A% n/* Starting sections of the McASP*/
8 J3 `; H0 w7 W, w5 n, x( R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 `. d: t7 E+ q+ d) G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
* P8 l# n+ r7 A, E mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( h% o. r5 S2 Q1 V3 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# L0 F! A( U6 e6 Q- u, n: f1 y1 D3 ]- t. S7 h
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # [$ g& I: S3 X& V/ |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" q/ }3 i/ Y; X" N; G$ e mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# h6 Z( N0 P! \8 b9 ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 D. y' N$ W% @! w3 i) ~! V, r- W x5 n: U5 e
mcasp->regs->XSTAT = 0x0000ffff; , B; {8 j5 J# y2 C: f/ H& o) O
mcasp->regs->RSTAT = 0x0000ffff;
9 b8 x7 y4 G& x' s0 `4 A: E* w- Y! u# \# y2 X: R6 p
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: G- Z9 b- _1 G& |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! F# a' |$ Y" j- u& c9 Z, M: d5 ~
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. Y+ j; l- z! q. }$ Q9 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 a& |2 M# N) W5 F$ v
( ?4 @# d, D) `- O5 T8 X W
/* Write a 0, so that no underrun occurs after releasing the state machine */3 v* D7 Y+ j- Y( T1 Q
mcasp->regs->XBUF5 = 0;( y0 F) E* X" r
mcasp->regs->RBUF0 = 0;$ a1 X F; h6 J" s$ L! D) A" R8 U
8 v) a' W! N+ L( K- ?% \+ b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 B" I4 G" j1 |6 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 M8 K, K" ?6 }* Z* e4 ~. L7 s1 r4 L mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, u7 z1 ~- n5 |, x/ j$ Q/ T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ L+ x5 _9 D/ w. g0 r
5 z G& M k X% r! z* i mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : ^4 F$ G( e8 L8 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 h! c8 V3 b+ M$ e* N" v7 L mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 A, O, m9 D8 q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 U7 Y5 m& \6 a1 o8 [' D" p' ^$ O- _, i$ w1 p
CSR = 0x0000;5 y9 S0 i: l' J) L# p8 \
INTC_INTMUX1 = 0x3d;
& O5 [% R8 W# t) S h3 c6 K ISTP = (unsigned int)vectors;" P9 c3 h) P. C- t* O
ICR = 0xFFF0;
, u( g- Z! l; H3 @+ z% a$ G- y; V IER |= 0x12; ; k4 d; l l$ ` M# u) L$ p6 z* G+ g
CSR |= 0x01;
5 s+ d+ C o( V! s) b; e
1 Y& H$ X+ v% L0 j7 t( ^% g2 k
/ s# S9 y' [9 H4 Y! h0 B! A3 G6 S- f. Q- g: w1 j
还有就是两个输入输出函数:( [' S: {* c5 t+ e; t+ }
void output_sample(Int32 out_data)# ?" h- i& a+ {+ M7 g7 @1 J
{& q% b1 t- P7 s5 H4 |
AIC31_data.uint = out_data; 7 n5 l2 M0 v5 j: f" A; W
MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 j+ a7 ]: @6 W}
9 @: L7 }: y. J. v5 }' E
% [+ M" H/ ?$ ^5 y! C) x) sInt32 input_sample(void)
5 j4 r8 I, N1 g9 F* Z' F{ 2 Z+ ]& P p E
AIC31_data.uint = MCASP1_RBUF0_32BIT;# r, r n5 r2 G) r
return (AIC31_data.uint);- r8 p+ X3 o# C: O: Z2 f3 B: m
}
% Z* B% @8 [* b' s6 U v( M7 M% N1 ~5 v' v0 v" m. B" z q
|
|