|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: e! j* z! v3 h- F" c- k6 W$ K+ l6 Qmain文件:1 M2 P* V7 ]' K; J% \1 {$ n
interrupt void interrupt4(void)
. H8 }8 w0 S) c5 D6 o( V{
9 e2 y1 }! [: x% F Uint32 sample;! e# O$ h8 Z; P5 i% C. b* ]
# K2 f" u1 [; A9 p; k sample = input_sample(); // read L + R samples from ADC
/ q. F0 a- P1 ~ output_sample(sample); // write L + R samples to DAC ! s# H$ a" i& W5 m) b2 Z) w
return;
; Q- L% d4 l; K$ X}
' `2 N& D# o! k# ~' c8 ^! x }' k# x& m2 d2 X) X
int main( void )- j, S8 F! m' @
{8 i2 A+ M4 s' e2 A
+ K$ l0 a7 B/ f /* Initialize BSL */
$ R. A4 s) V6 U6 k6 \/ M- N8 p# e; F EVMC6747_init( );) m/ z5 q( |* o- O
/* Call evmc6747_intr function */
: v- a6 T# C- Z8 C4 j: B6 R& a aic3106_init( );
9 @- @5 T+ @+ E% ]. k while(1);
+ [4 A; j' [0 H) U}- |. ]! B- t( q
- l1 w7 d% b) P/ f* W4 A4 W5 v9 F/ j% m. p1 n, |" d# e- A1 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# v( S. l8 O& V5 V; Q6 w; V
/* Initialize MCASP1 */$ c d' P9 T( E. a# n; F
mcasp = &MCASP_MODULE_1;
. i* h+ x, u8 R4 b5 c mcasp->regs->GBLCTL = 0; // Reset
% ` y `( n: Z6 N1 F, I- l mcasp->regs->RGBLCTL = 0; // Reset RX$ k, E' n# ^; }+ b7 e4 Y2 |
mcasp->regs->XGBLCTL = 0; // Reset TX0 B& P9 I- |+ o
mcasp->regs->PWRDEMU = 1; // Free-running* g+ b$ m" r7 l( T8 F: q7 @9 A `
// configure McASP0 receive registers
7 W9 [$ L7 S: ]) {. V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 H H8 w2 G3 B- d1 [& G' _& j
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, i% j& I. Y, I8 a
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 N: V. X, v# _2 v8 ^: E
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ a- E V6 a" v+ u# q: @; n2 k# V$ Y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# c0 ?4 ^5 }( p/ A
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
3 U' {# q3 j& ~6 h& i: r mcasp->regs->RINTCTL = 0x00000000; // Not used1 @) G: X' R/ s: v, F3 v
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, j9 }4 V# N4 t7 K+ w y
5 b4 n: `7 k" {0 S0 I9 X- O7 z( f mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 p9 q9 c9 P7 o" b& F; a mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ x" i. ^! c. R6 ~. i% g5 A( P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 n2 P/ c) i) O, M$ v
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' a/ `, f5 b T* s0 e8 F mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( Q1 s$ _5 ` `) v: C mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ P! R2 G* g+ U* }% T4 X mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. Z7 a3 C' G1 D mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ a* [% \% r/ J5 g! T6 {6 X Q6 Z O
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! A0 ]; B, P% e; [- N0 C mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 b' e" m& K' j, K. f3 T! n# I
mcasp->regs->PFUNC = 0; // All MCASPs
6 t% \' C5 Z$ b2 k- C& E+ } mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 F* ~# e8 q6 L4 O2 y
' q; b Y3 I: i J+ @ mcasp->regs->DITCTL = 0x00000000; // Not used
" |5 i( e3 \2 t/ ^3 b) ? mcasp->regs->DLBCTL = 0x00000000; // Not used9 [2 y. P& T: @& o D
mcasp->regs->AMUTE = 0x00000000; // Not used, w$ x0 c5 m! t; P5 l
- p' K. R8 i6 K/ N& O/* Starting sections of the McASP*/
. F6 [7 [" v; W; S" B. B% y' `8 i mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' |/ u3 w! c5 N2 E! n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 ~9 v3 L J; ] mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - L2 z V$ L0 X* J7 b3 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: B# y: _7 O2 U2 |& u
7 k D+ J% D& S* {: X mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % I$ z4 P# D* r6 m7 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; g- K9 i& q, U. G+ f) b- _ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 G" m! E* a) U2 R& }5 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" z7 k) o+ f% @* n- O8 ?; x0 m( O
8 s0 P$ a3 o, C mcasp->regs->XSTAT = 0x0000ffff; " G- k5 S6 b1 y; |4 ^9 |- R
mcasp->regs->RSTAT = 0x0000ffff;
! O, }' B0 G& C9 T9 L$ q& }( M' N2 w9 I- S( w8 ~ @" F0 A
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! `6 }( R0 @8 u. p, Q+ u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
F2 D4 j- l v/ F$ ?7 F6 _2 G mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# \7 `) q- Y" L0 W+ a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) L" ^0 R: V* `3 F
: z B: C8 t% p6 J" a /* Write a 0, so that no underrun occurs after releasing the state machine */
$ C4 l1 b1 v7 p mcasp->regs->XBUF5 = 0;
- F; h1 g- Y. c. [ mcasp->regs->RBUF0 = 0;* C( D& f0 f9 T1 ]9 E3 a
3 w- I: P( {& L6 A6 G \
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + P& w V1 {8 p x7 w& o* q; F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) r$ g: x% v v- C1 \5 s mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) X$ C' U; i- l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! d4 v" f, r$ O1 G- G) ?' K7 L
& C9 W) A5 g! g/ [2 j$ R mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : X7 Q9 s3 a% R" f$ w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 o/ d7 y l1 I m1 O0 w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' H2 @0 b) N2 S* h+ V: k9 S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" R" M, C% P" Z6 t9 @# [1 B5 J4 ]! M# m! ]! w
CSR = 0x0000;
8 L M- \8 ~( |5 N4 ` INTC_INTMUX1 = 0x3d;
9 K" V! h6 }3 A5 x7 |1 ? ISTP = (unsigned int)vectors;# F9 D+ U: [# @" q
ICR = 0xFFF0; : B9 ] S! j8 {0 S" k5 m: H% l
IER |= 0x12; 8 U) z1 C( W/ }0 F
CSR |= 0x01;
* M2 J' D% R$ D) e# w+ I _% i* U4 a* a& Z( @# n0 a1 K/ }
4 P2 f& H5 l" ?0 j; R' f8 J" s
5 g8 G; q; ^1 k; [* h1 U还有就是两个输入输出函数:
. l* }+ ?2 `, R0 Xvoid output_sample(Int32 out_data)
2 z* Y1 Q- h4 y6 s' [; d{3 e* b* Z! V2 b- [! E' d
AIC31_data.uint = out_data; 9 I9 |5 k- J1 x0 ]3 E6 T$ z/ l
MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ r9 m# @$ _+ U, {& U6 p! d& ~$ y}/ j. k! s: i* c0 Z
; D) r& p. q0 c3 D
Int32 input_sample(void)
% [9 e- D/ n1 u/ D" w5 a: O1 u{ # X; k5 _ f, g6 u6 r- _
AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ J$ T+ c8 `& d8 F4 M" Q return (AIC31_data.uint);5 O- |6 h. x, F1 E* a
}* p5 m1 C- t: [5 T8 u% e
( d+ ]; Q: r4 G
|
|