|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! T. F% F1 ~4 i1 r' n0 m
main文件:
/ s S" j& p# G9 H6 Z! ^" X5 Hinterrupt void interrupt4(void) + R! ^; w& i& m* M6 Y/ o6 ]) v
{
0 @& k" n; V6 i) i3 A+ O7 e u Uint32 sample;
; R" b' ?& P2 |7 [( V3 `; i3 l& _% g: y. [: M5 m; S: U! C, h
sample = input_sample(); // read L + R samples from ADC" a' N8 d1 e# P3 Y4 |: u/ m* ^
output_sample(sample); // write L + R samples to DAC " K* y' t2 T4 L& z3 }* Y
return;# j! `* I, L+ V+ d& K5 U8 ^
}
5 F& Y# \/ n; ^6 G. L# U) [
- g- j/ B8 q0 `) Z+ x$ t2 F7 N0 Iint main( void )
. B& O8 E1 X* A. B: U5 Y2 {8 V{) Y% n: o0 A+ f6 o6 Y
# f* H* z; |1 {9 _6 f /* Initialize BSL */# C6 ]; S' t, A2 \& A) W; B
EVMC6747_init( );( G" k. u7 `8 p3 q( E( J
/* Call evmc6747_intr function */+ X! _0 T; s$ j- G3 K$ X1 t; B
aic3106_init( );; f" K! j" ?4 _ x1 U9 g
while(1);
- T; o9 T2 Y5 t0 d* K}9 O6 |% U4 l( _0 x" ~
3 }) ?' Z/ {& p$ y
, G- V$ R( h5 y& ]5 u5 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 Z5 }( Z8 h+ ]3 v+ r
/* Initialize MCASP1 */. W- W8 x; ?4 E3 Y2 o- m: D
mcasp = &MCASP_MODULE_1;
' Z; d. @ J' H, r1 ^ mcasp->regs->GBLCTL = 0; // Reset9 {3 S( s ]8 c$ @) \) p, \
mcasp->regs->RGBLCTL = 0; // Reset RX/ E4 w5 e; p5 b! `: h$ I" T
mcasp->regs->XGBLCTL = 0; // Reset TX
6 z; b- D& a: i, m4 X mcasp->regs->PWRDEMU = 1; // Free-running9 M* A8 Z1 m$ a4 ^! @
// configure McASP0 receive registers
/ E+ g8 M e* A% b- A9 H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 c; V: y3 y) u$ \ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; F3 E$ j$ D% d$ l2 n+ k mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* z+ f2 K( G+ l/ {* u
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 \+ J' M! O( C3 ~ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
' p+ H2 r2 T$ S mcasp->regs->RTDM = 0x00000003; // Slots 0,18 L3 u$ u1 v0 ]! E6 z
mcasp->regs->RINTCTL = 0x00000000; // Not used
1 Z. G+ a; N/ {% L5 I mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, [. z# m! V/ I6 A ~! ~, ?/ ~2 \0 B, j1 q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
/ r( N p( Q% D* K0 k mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 z3 f' g' G! O5 `$ r# u) D" d) P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ x( [9 o! C) L1 N c }8 a mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
T m- F' j! q1 f, x8 I- u mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. v: n F$ z9 ?" |9 Y8 b# I
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
& l5 d+ x7 @0 j2 U, } mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) E% E5 x$ V, e- ^
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
D# b/ k3 A# h& w- p# S: I, }1 @5 g {: a% `
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 b/ r) u" a4 Y mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 G5 W+ D" L* h mcasp->regs->PFUNC = 0; // All MCASPs
& y; I/ W* Y. @5 Z2 Z% D5 B mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 O) W0 ^" h+ Z/ ^3 g7 H% j6 M( Q- D {; [0 S9 i7 a
mcasp->regs->DITCTL = 0x00000000; // Not used
8 [1 A0 v/ H4 Q2 U9 r mcasp->regs->DLBCTL = 0x00000000; // Not used/ O- l! l3 S: K: |1 I4 Y; q& T- g! X
mcasp->regs->AMUTE = 0x00000000; // Not used
, t1 t) Q6 ?+ D7 i+ N/ h# N% n* e- {) V
/* Starting sections of the McASP*/9 |0 U$ T, B1 f4 O x
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# y7 F! Z, J1 o- |( y6 i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" A) q0 `/ y* g2 S7 R mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 J* M! v0 P) u" v- E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 H0 _$ ~( m% F0 p$ S9 P
% o+ f$ ~. {2 m8 \2 m2 {! } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# {* j. u1 O i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: ]1 O# ]; T5 f8 V" n$ `! i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - y8 j* u* q3 O8 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! j8 s% Q7 a! I6 x+ [2 I
6 C# F. P, z, U# H8 B. g& _$ K3 E mcasp->regs->XSTAT = 0x0000ffff;
, Z2 q; ]" Y1 L4 K mcasp->regs->RSTAT = 0x0000ffff;
# m* y/ D @( M/ G0 I% u# Q q- g4 g5 ?$ o6 P0 F
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' V) a. J* h8 v5 N3 i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# [7 t4 R8 t8 b, ]; Y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 [9 r3 ^ p# ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: E& V$ x1 t3 {7 n7 t
9 g. Z _: h) p$ a
/* Write a 0, so that no underrun occurs after releasing the state machine */8 x, U: y* {* M+ X% l+ ~$ K
mcasp->regs->XBUF5 = 0;/ q4 L. k8 h3 h% Q) }
mcasp->regs->RBUF0 = 0;1 t j7 q2 S5 J3 F+ U) J8 {, g
: S0 @) K0 a" |) ]- w9 A mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ }5 r7 r$ b4 n& B( V1 b, E; M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ O) }9 U, q2 q- ~# n
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' ]& x+ p2 a+ D3 n4 P5 D. q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# e- l1 b4 _& P( J! h; w
6 L/ q$ X, C8 R' L' w/ O' ` mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' ~' @5 j' l6 k: h& y R4 y; V& b+ D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 Z- d9 P4 y. i/ `: { q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % J D7 u% |, K3 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ L) y/ H( u7 O: t* U) w+ W. A
4 H8 Y3 t, x* [3 \ CSR = 0x0000;# P4 i4 U; z3 T. w. K) V
INTC_INTMUX1 = 0x3d;) ]* y% }' `8 T3 q- d5 P: C% x
ISTP = (unsigned int)vectors;
0 `" q( C3 H5 l" f ICR = 0xFFF0; / T; P0 c8 L) i3 K" `8 P' M
IER |= 0x12; ' Z4 ]) D% \2 u; H) S: b
CSR |= 0x01;
5 P2 d% U2 l2 Z" I& d# u- m/ r, a5 k& Z
9 y, O, Y# L3 F. o1 ~4 l/ J$ u8 h' q* ]7 B2 z% x% `, e0 j
还有就是两个输入输出函数: v6 p [, S% ?8 y* F4 v" I
void output_sample(Int32 out_data)1 }5 J, i2 h! E& z* | d
{
3 u6 W0 f5 Q. K& [+ c0 k AIC31_data.uint = out_data;
! `, L9 H3 E- R+ C' c MCASP1_XBUF5_32BIT = AIC31_data.uint;
) G* O$ N* U3 Z# f: T}! A5 `$ l% }; m ^% U( c; w6 J% K
6 f, I7 |' e% O* d. E3 C8 v
Int32 input_sample(void)* k$ L0 o0 M$ y4 _9 Z
{ ) f3 i# n& c1 ?. R) H. s
AIC31_data.uint = MCASP1_RBUF0_32BIT;! r5 R' p b; D+ M& @; B7 L I1 {" Q
return (AIC31_data.uint);
. _. ?% M4 \9 q) U: l; |" r}
' }/ U$ E" [ `5 c& w4 o. n- r' y b' w
|
|