|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, B7 L: Z6 I, t( E9 V7 X* E! F
main文件:# Q6 n+ F9 K% |, @# ?& R/ u
interrupt void interrupt4(void)
2 i! r# a- R0 R" y{
! F: ]* |, C+ o5 y Uint32 sample;6 A* ~8 g. m& Z7 D. h' Q
# f0 n7 D- P3 ~5 l/ K% ?2 f+ Q
sample = input_sample(); // read L + R samples from ADC4 ^; x) T* ~7 ^2 ~. C0 ]( @# i
output_sample(sample); // write L + R samples to DAC
* a8 |/ O6 A3 h. l& s( H7 x return;
+ ~ G8 [! v, f6 M0 Y0 q; q}
4 e- W6 Z" p/ ^: T1 X; F' v: g6 ]* l& h0 ?) i2 K
int main( void )+ v, B( z" ?( b' p
{
; N9 J* z7 L; C8 C) {8 @, H% l5 X4 \4 V* y. C2 d1 B
/* Initialize BSL */
( d9 v9 f* u6 o# _ EVMC6747_init( );# x, w2 d( F$ y
/* Call evmc6747_intr function */6 |* V0 L$ K& |2 {. L
aic3106_init( );
& L0 ~/ C) h, I3 c4 q2 A% Z. w while(1);; [; R* e: d' a% a6 k9 y7 S
}
4 ~" Z( f @" R7 J1 o
- l( q4 [- U9 B" S. L# k1 C) M
0 w. n7 h, i+ U5 R, ]8 Z' j) baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: C' S$ g+ W8 p$ H4 o# ?
/* Initialize MCASP1 */
. z2 @) X$ [' S! A( W: Q mcasp = &MCASP_MODULE_1;* h- G2 D& S4 ^7 Y. ^
mcasp->regs->GBLCTL = 0; // Reset2 ?+ r' Y8 W- [- \5 ^& L
mcasp->regs->RGBLCTL = 0; // Reset RX
& |) T/ E) h/ B# T% m+ r) B mcasp->regs->XGBLCTL = 0; // Reset TX0 q- L# |' c' G. T3 n2 l, M
mcasp->regs->PWRDEMU = 1; // Free-running/ o" }, r$ u2 J, K- c& @0 p4 P' N* ~; ?
// configure McASP0 receive registers
) i4 D$ W ~' a7 g, k5 {% E5 N+ N) ] mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
+ S. K* Z# q' R; x) p) ^ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 f% ^$ U' W* P, @: l3 O+ K
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ p8 h/ \5 t& n2 d% h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). O% I0 s/ {9 S' e$ T. A* G
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side); T2 O& T, t% f$ s4 x
mcasp->regs->RTDM = 0x00000003; // Slots 0,17 y" f. [( s& S# O1 H
mcasp->regs->RINTCTL = 0x00000000; // Not used6 L4 M2 `1 e1 W. {" }
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 W8 b* x1 o& x
, ^7 }4 f! ~9 B8 H mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 U& P+ i: M! m! Z2 n8 j mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) d4 d* _$ V& r) }+ l0 C0 p R
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" g5 r; [& |! B$ ]$ R mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% _! z) }( s) X
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; P; Z0 L7 C, a! {8 P5 L
mcasp->regs->XTDM = 0x00000003; // Slots 0,17 E3 x/ u3 z" p
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; w8 S8 _% D* O/ I: z, M
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 `/ E1 g% z6 e k4 c
/ J; ]! P. C1 v. g! t$ a# N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- y& O* S8 k5 D( _
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# c$ d/ y) B' r+ j( G
mcasp->regs->PFUNC = 0; // All MCASPs
, i& Z. A* l1 a mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 n1 {5 P9 U# i" G% H2 A& H0 ]& {8 e
mcasp->regs->DITCTL = 0x00000000; // Not used2 f' k* e( z6 o- u3 r) @" Q; A
mcasp->regs->DLBCTL = 0x00000000; // Not used/ a/ N. s6 Q: u5 f+ ]4 _% z9 Z# l
mcasp->regs->AMUTE = 0x00000000; // Not used( v& K0 ~9 {" F& D0 a
5 s9 n8 V% q! u: ]/* Starting sections of the McASP*/
& w6 a; w! ?5 y x) ^* b1 | mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! ~$ m% e* o8 _: U2 l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , i4 e3 ~( b: R- Z( n7 |' [: j
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 u$ D; |& J# f N) [" e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- O( _) Z8 S0 J' m- \. z) v1 c
' t( S& ?2 P( n4 B# a; j
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' M$ @0 U; @) ^! `2 d5 k7 H* ~7 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# I9 q$ k' @: B7 W* k mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 O; {/ r; Z5 r, I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ U6 u8 X# ~( I* ?' m( }
0 z' _. a' S( o mcasp->regs->XSTAT = 0x0000ffff; 4 E' [1 u" u& j3 P/ L$ _7 H. @, i
mcasp->regs->RSTAT = 0x0000ffff;
9 [2 }- |5 c! N( c$ r0 L6 K& Q. A" h( v: y/ |8 S
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( r" q" s% L$ }# o6 d. u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( O a/ ?3 M8 e0 ?
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 Z1 U1 X% `4 d# C; I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); e0 D) }- N/ Y( o
% Y- t' R1 d9 D: O( i& t /* Write a 0, so that no underrun occurs after releasing the state machine */* t& S# i; w. u$ ~7 \0 R" Z( X
mcasp->regs->XBUF5 = 0; B G l2 \ q) g
mcasp->regs->RBUF0 = 0;6 I. _. s4 @# \, C
+ ]9 T. c. q' x1 T7 [
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. p1 Q2 x% X4 d: K, D; d; D4 f0 h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 h* W+ j/ O* n/ e3 C
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / z* Z2 E# b; @7 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 {: o5 F2 ]& Z& m
: A: ?. _4 m+ X, }8 p mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 i; l- k2 u* B3 n* V7 }+ P8 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% ]) E; f$ X j3 Q/ Z0 h$ G* P
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 f/ I/ C; l3 H7 ~& L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 J4 t' W; _, V" G3 H- O( J c8 h. n( z. v* V
CSR = 0x0000;
8 E# W$ c, F. ?% h0 i( C6 I INTC_INTMUX1 = 0x3d;
( ~. x9 O' D: J2 T- g# u ISTP = (unsigned int)vectors;
7 r+ B& k0 u$ ?8 X ICR = 0xFFF0; b# a/ T6 a+ Y; b9 l) a8 `4 @) n& R
IER |= 0x12; q: P0 L3 t9 ]$ m K
CSR |= 0x01;
; c% K U% v/ c9 N" B6 k+ D
$ d4 `8 B# T# U% Z- c8 y. ~. e/ R5 P) e& Z1 b
- ^, ^: f! }# V. x还有就是两个输入输出函数:7 i. W2 [7 V. V6 ^0 v
void output_sample(Int32 out_data)) H1 K, G. {$ B3 w2 f4 I
{
# d3 T1 q" m: F' [$ U7 ? AIC31_data.uint = out_data; ( ?* \+ d: ~% A3 A% \, m: C
MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 x2 C+ P5 i, w) q6 k: v- I}
1 X9 n8 r- m& V5 n* \% y3 Z/ B1 X) o% S C" L+ l- V" a v/ E5 b! ~
Int32 input_sample(void)
$ {3 c# a) [; e% T{
4 e8 a% `# X( f( u! n1 Y AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 D; W$ K/ j! ^$ X- ^2 V return (AIC31_data.uint);
/ R G, g" y! |* {! f x* s}
7 p3 F3 S+ @* J2 `' Q) C, F- l) E' h/ x, N" D' \1 Y0 h0 a
|
|