|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 j _2 k5 `1 ~0 amain文件:3 b) Z# R+ Z8 w* B. g0 Q
interrupt void interrupt4(void)
" `8 g/ x+ J- Q4 d5 e- q{
% ^( U6 `4 ? J Uint32 sample;4 j- a1 C7 B. h
; o; b; W# h9 z9 Z O sample = input_sample(); // read L + R samples from ADC
1 ~" T) X6 b$ j j% f output_sample(sample); // write L + R samples to DAC
5 L5 `4 j* _ e) B return;! x1 I/ U. v5 i9 C
}$ C2 T8 k0 h$ W7 Q7 H1 I5 p) b
) w3 H# h& [( G' |2 @/ Vint main( void ); }. F H- _4 d
{
" F) {: K/ }3 }* u8 l- H( H$ }, c2 u% s* ^& R2 ~
/* Initialize BSL */, Q2 W# G# W& j' P' b! _! k
EVMC6747_init( );
" U# J3 V C4 }' Y0 l /* Call evmc6747_intr function */
' G' n* o! p2 t! L aic3106_init( );
# l/ s' Z5 H4 u+ P9 P E5 U while(1);# Q9 L' A* X2 F8 j- Q6 j' X
}9 D Y$ W& h) B
: t5 c" g5 Z$ c, X6 f, ~
5 _/ }1 e, B8 l' `2 e' b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 i& m7 ]; K9 F+ l* c
/* Initialize MCASP1 */
8 E$ M7 d7 L/ K4 h* n/ j mcasp = &MCASP_MODULE_1;6 m$ B8 V7 o4 j
mcasp->regs->GBLCTL = 0; // Reset
2 P1 w) K6 E+ G5 x T( t mcasp->regs->RGBLCTL = 0; // Reset RX- R$ @* d" k# ^) i4 j6 l) N& `" ]
mcasp->regs->XGBLCTL = 0; // Reset TX* T7 s2 I3 k" Z( N+ k
mcasp->regs->PWRDEMU = 1; // Free-running; C0 L* |$ i+ k& Y
// configure McASP0 receive registers+ L$ X j+ ~0 V0 F3 w
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 ^7 \0 T# P4 F9 h9 r mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! U" }% C M3 Z0 u8 c6 A
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! ~9 H7 ?; u$ q8 p6 a
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 i, L0 Q. _/ R/ | mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 T5 i; |5 B; a: L8 d0 |
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 \! F- [) z ~) n4 ?' f: B0 C$ p+ X/ K
mcasp->regs->RINTCTL = 0x00000000; // Not used5 H1 g9 e$ `3 D4 T- O9 o* H/ {: k7 k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 M* S7 B2 X) A( o% h4 Z: f
y+ v8 J1 [7 w) t! D3 t7 Y) H
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' X4 _4 V. g0 D2 b. e ?8 l mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 L) ~7 C+ [ M. B l/ C5 H mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* e+ r3 t; S4 E* b3 D- J2 j/ z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 T! O4 K" I& q. T6 z0 k: c: D
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ l' n" |% U; w/ t8 Y2 E mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ x% p/ l: [% L0 o8 ~3 r mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit* D4 |' ~' I9 @+ E D
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( Y# W- c+ i# b7 p5 a9 B
4 }4 _, E4 [* P mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( \ b& j) n$ q7 c- W ?9 k
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' ]& d. l& s( ^) `& D, u mcasp->regs->PFUNC = 0; // All MCASPs
( S2 B! E" i r7 b mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 E8 ] {' r& a& Z. [8 L9 [5 Q7 Y1 |
9 e2 F8 h1 V+ _' U0 X8 @
mcasp->regs->DITCTL = 0x00000000; // Not used
2 e1 P4 ?" y' F$ E1 Z mcasp->regs->DLBCTL = 0x00000000; // Not used
& p7 B, ~$ o# J) {5 z mcasp->regs->AMUTE = 0x00000000; // Not used
6 Z+ n; x& K4 b4 v s( w. c6 `0 h$ e/ R0 W( V
/* Starting sections of the McASP*/
. n* p; L \( x0 C0 b mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' C" q5 b4 ^ i3 ^8 m/ L' K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 a) P& V" b$ g" @5 R mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ D1 ~/ v; X; l' K: } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- S3 S u6 J% N; z
9 ~# I7 _: B4 N) \ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ p1 j- s ^+ C" J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 Z" a; x0 ~, Q. T% i- x! r
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; @0 I' F$ I- z6 R& l+ f0 r2 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, [1 q0 T- b: D+ a7 o8 N @: s1 {! p
mcasp->regs->XSTAT = 0x0000ffff;
$ ?+ |( q3 m6 m8 |4 K# Q5 o; R mcasp->regs->RSTAT = 0x0000ffff; # U8 e# g9 `( E! Q+ H, E
Z7 x( n5 M$ {% k mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 G. i" e( A) l4 @/ l& L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ], G% Y# o0 b2 y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 H/ O3 p! U8 u" r% M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) G9 \) X6 Y1 ]! x& g# X" J
/ r; R% h; m0 v! u! l5 ? /* Write a 0, so that no underrun occurs after releasing the state machine */4 f7 V" \% q' ?) d+ y, w ^, P
mcasp->regs->XBUF5 = 0;
, D7 ~& d5 H) n+ T$ t0 ~6 x6 t mcasp->regs->RBUF0 = 0;' v- ]' r- e+ E, m
$ b) D2 I, m: m8 h6 S5 s
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- i( |$ f# Q9 s9 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& D0 D$ S# F) W9 d! j; i) W* C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ P6 Q3 S* x3 I. s- f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 M8 r, T0 }) d( r; T9 {+ h- L2 ?" G4 d0 B% j
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% C6 a, z1 e0 d) p0 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( I% @+ L; S, [9 R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , K( ~" }: w( I \/ w. t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' B t3 c3 f* Q# G6 \! @, F7 X' D1 f" E
. z1 ~: K8 `& x CSR = 0x0000;* ~7 W8 F4 q9 F# X0 f8 p
INTC_INTMUX1 = 0x3d;
/ X+ N* b- v \' ~7 ] ISTP = (unsigned int)vectors;7 @' l N+ m n' h0 H9 ]! z4 S
ICR = 0xFFF0;
, F1 E1 W3 `3 x IER |= 0x12;
9 @/ v) M: l% @ CSR |= 0x01;
) G' Q3 _0 L6 j5 Y: y- a5 L" W" O( {# _2 f
. \( q5 R) f) A( Y
- L0 {8 W& ~( I( G% |1 Y$ Q6 K+ `; Z n
还有就是两个输入输出函数:
; ?8 f- f2 C1 I1 i. _* Evoid output_sample(Int32 out_data)( u# y9 L7 c9 X& J. K9 o
{
% S/ r9 ?% y% _% R AIC31_data.uint = out_data; ! F1 N8 B) l# M
MCASP1_XBUF5_32BIT = AIC31_data.uint;
( A6 Z: a3 E' N2 r* ]7 C5 E}/ n+ q, J- H8 [3 v
1 Q4 X+ {7 v" H% r
Int32 input_sample(void)
" K& A7 y+ f$ C& b0 r# k. P/ Z{ ) z1 L: ^* ]' a, O2 {: ?
AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 `; M, k. G4 P5 \7 G% R return (AIC31_data.uint);
' s. ~2 ]4 L1 C+ n4 k' C$ S* r3 Y}
$ r, }; n5 i. t) f; ~
5 |) f z0 o4 f4 {/ X |
|