|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 K3 i8 V1 n/ F9 p! O8 p: t
main文件:( b' n% I* T6 M, S0 D& s9 Z& _9 ?
interrupt void interrupt4(void)
4 C" q8 r" v- d; I9 P% [0 @/ C{* [& y/ f7 Q& L7 A$ |/ L
Uint32 sample;& S" }$ C8 d$ h+ \
' p$ A8 b4 j7 k5 r9 V6 W sample = input_sample(); // read L + R samples from ADC0 U2 e* c X. Y0 K! I/ c M, X6 B+ [( ]
output_sample(sample); // write L + R samples to DAC 5 P8 s( S/ t. `$ V' t' O
return; a9 d' t2 f( s' B
}
7 H% L* ^: w$ e! F2 N
5 M1 e) v; ]6 I1 L- w, n* Q- a4 oint main( void )/ p y3 ]+ {9 j; M1 F$ u$ j/ _
{
4 ]8 p: b% F& u2 Q* b; W* n" H9 J q8 | M/ Y' H' T6 \
/* Initialize BSL */
8 [3 `" i; y7 @ EVMC6747_init( );( t3 L8 }. r4 R. B/ _& ~9 `
/* Call evmc6747_intr function */
. e/ {- \5 W8 [! M4 o# f aic3106_init( );
# |9 @0 M+ x3 N: \ j9 V( l: i while(1);
) E9 D7 Q# e& A7 `4 O( |6 p- \2 c}
1 x8 M: e6 o3 n7 b6 k2 i; G6 I+ i( x( ]- T6 V# ~( _$ @9 K0 w+ z ]' e
% v! s4 o+ H/ ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, x0 m) T+ N* b$ l/* Initialize MCASP1 */
; Z2 c+ K! ?" P; L9 Y8 _ mcasp = &MCASP_MODULE_1;" l' u1 ?; @9 t" A: N7 B
mcasp->regs->GBLCTL = 0; // Reset
4 a6 g, j3 X/ T) W$ ` mcasp->regs->RGBLCTL = 0; // Reset RX8 a! ]( u0 {" z' B. a2 c
mcasp->regs->XGBLCTL = 0; // Reset TX
$ Y) v- b5 L, @. ^8 T& U mcasp->regs->PWRDEMU = 1; // Free-running- H. O% E/ f% U p7 D, @5 c
// configure McASP0 receive registers
" j+ S0 L+ L4 C! ? mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 [1 c: k* T; i y- ] }! I0 ] mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. d3 N0 x; E* Y" l/ i" F
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 Z) b |4 d+ G8 a( e, \ q
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' I" c6 `- _( s0 {. T mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
/ R1 L% d+ j9 L0 H' | U: o mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 V4 Q7 @+ p. K# p. i mcasp->regs->RINTCTL = 0x00000000; // Not used: I, m6 I4 O" p0 s0 ]: v& M
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; l2 b7 t! e3 H' K2 S. i; A
3 w) J4 G* b8 b! y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 D$ q$ t7 G) `) F- ~5 d& a/ J
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) v' H$ \0 V5 ^0 [# X; J
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. M8 e3 R e0 N$ q% z6 }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' W' l! Z3 U/ z* l6 f% r
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, U: ^5 K; F5 F mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ w7 r! A( M" g4 U ?( L+ o$ a; j
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; ^ p' k1 T/ G4 k- | mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! [- I8 ~& |- w( D7 R e; p& n3 E
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- g$ h% u% a/ K8 Q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 @$ l" q# G$ `$ } mcasp->regs->PFUNC = 0; // All MCASPs
* ]* I$ h% ]3 x3 Y, v) I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 t0 v( Y ]% f% a8 h6 D9 _: \
% S3 W4 ~! T2 `1 R) {" _' u9 |0 D mcasp->regs->DITCTL = 0x00000000; // Not used) o$ j* n5 s* b& f G V
mcasp->regs->DLBCTL = 0x00000000; // Not used
% D, K. D- k/ i/ | mcasp->regs->AMUTE = 0x00000000; // Not used4 ~6 F0 I5 o0 j
0 I' L4 O4 e- D! J! Q
/* Starting sections of the McASP*/6 S3 x6 u4 W: s* _7 m6 V6 z5 Z0 K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * U4 p! k7 P4 L$ B1 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& s! S8 P( @* W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 s( X+ ]: L/ z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 e* s# y/ h: W( z% C' H
+ t9 t2 I0 }' n! q. t0 c mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ k# L! O0 G/ F+ R% ]# t" F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); D- G8 q' A) ~& e- m( q; i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 S" t- q9 B. P9 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 O0 y! K! s8 m) n: y" z! w9 j% U9 S- Z$ T) a+ R: {
mcasp->regs->XSTAT = 0x0000ffff;
; A3 l1 ]: F( z" k( Q1 N mcasp->regs->RSTAT = 0x0000ffff;
; a/ C9 U8 e- R6 D' X
' M4 B' w* l' r+ R6 m9 ^# J mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& P3 R( b. k* h3 {6 r9 n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" g. t: ~: N( [& D/ r6 d
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* h0 s q& t% f" u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 k; v1 G+ G$ r% {2 g
% `2 g/ {6 b( Y3 C /* Write a 0, so that no underrun occurs after releasing the state machine */
% z+ V- F# D w# q2 q: | mcasp->regs->XBUF5 = 0; f0 ]4 i0 Z- w7 n: w
mcasp->regs->RBUF0 = 0;
% E. s% p g* ]1 T- K) r: _+ W. i
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) ~4 `* f1 q& W: q: { A6 g2 o0 E8 y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( r' K, q. w- J6 E7 g/ t
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* t$ X- v7 o3 Z! D$ R' m$ e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" ~2 ?, k: M* n1 f" O4 M( G% f0 d, [* ~0 U' ?
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 K; j" Y: @* h" f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: r U& B& D9 [7 A' c- r1 i# i mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 D* j3 |" V# _0 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 D, f" P$ P/ O9 c/ a& h
- M. h" m( J* ]) d1 O3 w9 | CSR = 0x0000;" L- L3 _: X+ ^1 s0 B. R
INTC_INTMUX1 = 0x3d;8 I$ G: l( H& ^9 }1 y2 r' X
ISTP = (unsigned int)vectors;
! _) y+ v/ J5 M& d9 C0 S% K$ N ICR = 0xFFF0; % N8 b$ @+ h. A5 P( ^
IER |= 0x12; " ]. M2 p3 v- x% J" L
CSR |= 0x01; 4 J0 f9 v0 b6 g( ?8 i3 L; m7 p2 U
% F% j/ L t; a G3 q
0 }4 j# I& d5 t7 l- G; b/ y, D1 f6 Z
# V' _6 x, }& k; g* t" L还有就是两个输入输出函数:
* {* v" A& i% P; f0 J3 ]5 I5 avoid output_sample(Int32 out_data)( y3 A1 }( v7 h+ B# }7 D* K
{
3 g( H! s/ t6 H3 g, v; u7 b' w2 d+ M AIC31_data.uint = out_data; ! l2 q$ _& j' k+ I$ R" l ~2 L$ o9 |
MCASP1_XBUF5_32BIT = AIC31_data.uint;7 e2 \7 n8 t5 g+ d
}
0 \; L$ v y( ~% j6 w0 L y: h, w; ]) j" F2 `0 T$ r/ q9 b! W) |( b
Int32 input_sample(void)1 Z' r- ^; r0 _( J' s
{ ! v: E( I+ F7 u
AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 J' `) g [, C$ Z m6 S: T return (AIC31_data.uint);) d$ [- o h- J7 x2 k% S
}- ~& W1 w9 [) T3 T" R& C# q
+ X4 Z/ W ~$ ]4 t# w |
|