|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: l8 u( R: C+ N* _
main文件:; B5 s N$ @0 U$ G" e" U% B
interrupt void interrupt4(void)
5 C* b% ?$ C+ z3 J! i; H, L2 n; q' n{
8 j9 u6 f/ M! g5 P* o+ ~3 Q- C Uint32 sample;9 A( i& T! ~- S
; ~, A2 ]9 s# d- z6 n: }, k% Q
sample = input_sample(); // read L + R samples from ADC
! f7 L) ]. b9 H E! h4 |" w, Q' a output_sample(sample); // write L + R samples to DAC
% v# g% v l F8 ]: A return;
* E; N: B" u& g/ g9 v, R3 a}* D% a$ e! l# l
, Z7 U6 A! n% v% ^int main( void )
. V3 f u0 d# ]7 g. O! h" N ~' q{
, o% e9 p1 n% x* J, V& d/ P3 ^/ R3 h9 j
/* Initialize BSL */
& N; [4 n k4 y+ N- |+ e EVMC6747_init( );. @! T* Q" C! `5 R/ }
/* Call evmc6747_intr function */$ w9 c* x* k3 ]. J, T7 F) b
aic3106_init( );% T! y9 b+ m9 C) m' O% Z
while(1);# M( U4 ~( w s
} F0 P. ^8 ]8 h" q9 v3 h' y! J
; c/ m) w( J# T2 V4 X* d4 u; _% T4 |2 s5 \1 j9 N M
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 ^! n- E+ P& e4 }/ @* I6 o: K" y
/* Initialize MCASP1 */- k% w2 n. L5 o6 O4 m
mcasp = &MCASP_MODULE_1;) V$ q' m8 s/ v2 w6 D5 y5 w
mcasp->regs->GBLCTL = 0; // Reset
( @, `( C$ a( H: A# R% F mcasp->regs->RGBLCTL = 0; // Reset RX( C! G; I( s; w* h4 f; f
mcasp->regs->XGBLCTL = 0; // Reset TX% Z9 R" B, y" J0 R0 w, w- }/ G* r
mcasp->regs->PWRDEMU = 1; // Free-running4 k9 m: B$ S" @
// configure McASP0 receive registers: T' R3 z p/ H. h
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
M2 S0 x* T x/ O4 y2 ` mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ U" ^- e$ J) B; s$ k# \4 s' t0 N mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ d- S% c3 z- C+ E: n2 O S' n$ T
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ j( A; l4 ]. t. ?+ `7 U
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
* N; ?- i/ o2 n3 Q+ m mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# @7 N# }# [8 _3 d$ h) i mcasp->regs->RINTCTL = 0x00000000; // Not used& M4 ^+ C5 B# \$ B3 L
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! m& {( x/ U, @; z, Q5 @
1 ?* x+ r9 h! ?4 ` mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used l" H$ h0 Q( S1 J+ B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! h' u1 u Y9 E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 M" L$ Z9 [& ^7 C' j1 V mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: k0 B+ E/ k. T' e' q+ @
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, I4 i1 A! Q& m. U/ N mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" u$ R, |- l0 ]8 F e6 ] mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: n% H. D. e0 y/ s- ^+ q2 x mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) E; ~0 y. U' O1 L' a
9 \ Z5 L: x" d' z( P/ s mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 s. Q% I. Z3 y* O5 p6 ? ^ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 G* a6 o7 |+ A9 @* }0 [2 t mcasp->regs->PFUNC = 0; // All MCASPs. }0 U' s- J& l$ u; L9 D: ^
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ y; r- W- _* O8 \2 Y
7 w1 k4 ?* P3 }9 O, G* D3 ]: {
mcasp->regs->DITCTL = 0x00000000; // Not used
8 j0 N3 G: L, V: `$ I! b/ s mcasp->regs->DLBCTL = 0x00000000; // Not used+ l+ l1 d" g: n* v. h/ a) B% ]% j
mcasp->regs->AMUTE = 0x00000000; // Not used' I! x' t0 B0 y& Z- N `
* Y6 r$ Q) q& A/* Starting sections of the McASP*/3 D- Z( ^" N- F3 d) d; y
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 V: P( ^5 u( x* o4 u( F1 v* V4 l( Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
* u& X- X5 H4 G) I) R' K+ Z! L) h6 ~ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ C3 ?$ }7 q$ ^+ }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 F) z( {6 b/ h7 @1 Y
% A( y! V5 p' P; p
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 |# d' P, W8 [9 g' B* t: O7 R# K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 C6 @& L# t0 ?* {4 v
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( v: | b* F* K+ a, Q7 z" d% M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ J' F# f. k- [6 _2 O
! t' O0 n( l# ~1 Z4 v% e
mcasp->regs->XSTAT = 0x0000ffff; # w# f8 Z5 I4 n& O5 K- ^. X
mcasp->regs->RSTAT = 0x0000ffff; / K; K. F! l! P @
6 a' d* z5 A2 u. m- Y" E mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" ?: h# D }) j" B/ T* X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. x9 D# x M! v! K mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . `% p1 n8 D& y6 l4 t5 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; j* N$ u6 B+ o) u: k+ ]
% Z, R: t3 W% Z( g' i
/* Write a 0, so that no underrun occurs after releasing the state machine */, l9 U4 j+ D* r$ @
mcasp->regs->XBUF5 = 0;
! T- C! |1 i3 D9 @2 P mcasp->regs->RBUF0 = 0;
) f' r" ^! \) v/ z1 T
( J: l# R; ^2 o- V9 x4 H0 o# a" M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / @1 O5 j+ G& b6 m( x+ Z7 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 p7 g' \8 {! U1 ^- P; R! y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' g- @+ W: K2 y2 a7 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ G- f, N+ T5 K3 m
7 k7 c! j' v6 d9 h6 _7 K* Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . R5 P9 w" a' O0 y1 c; B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 p9 B* V: c6 `8 y& Y" u$ N8 x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- K! r1 m8 L: @' z8 s; o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ Z+ U( T0 @& y# j- d, c
. k- d7 l- F- p4 f# e* ?! {
CSR = 0x0000;( U, B! s% g& k: u& j
INTC_INTMUX1 = 0x3d;
' s) v# h3 g, R: n ISTP = (unsigned int)vectors;. [: o* Z* I, g
ICR = 0xFFF0;
, @2 }6 U: G0 n$ P" h IER |= 0x12; 6 @: ?( q y$ k; ` ~4 H
CSR |= 0x01; ( n& V4 b; Q- [) @: D
- c, s' ]5 P' T6 _
\0 } m. n. `' x( [+ S* `1 \4 K
. D1 V: k( {& ]5 F3 R- }还有就是两个输入输出函数:
7 J0 s6 L3 O% m yvoid output_sample(Int32 out_data)( o' p! W0 e3 H# [) y0 B6 e& `
{
- n! m) ^% \0 _7 M AIC31_data.uint = out_data; , W" t! `; s7 v+ {
MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ ^# \$ N. p. h6 }) K}9 W3 I- k S4 `) | m
5 `! P' ]) ?( Z* K9 T
Int32 input_sample(void)$ I) C0 D/ P# |$ S) C# _, w
{ * J6 O1 c5 s2 B |; x
AIC31_data.uint = MCASP1_RBUF0_32BIT;
; B, A' j A- j, R return (AIC31_data.uint);
# i+ Y6 _ e( Z' o8 e% Q! J! F}9 [6 G8 b& k }. K* ?0 c
5 X6 q! D i: c: u
|
|