|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 {7 a- O0 [- Z6 D/ K9 {
main文件:; l( c' t4 n1 v& f2 r( N
interrupt void interrupt4(void)
g2 c; |1 t% s7 F9 }* S) {( @{
. l+ m2 @# J% y7 t8 ~ Uint32 sample;
* Y! v$ F$ x* g% L7 V4 `* v$ y" _' y/ `5 g5 Q. V
sample = input_sample(); // read L + R samples from ADC
- O' R, g& z9 b& g) x output_sample(sample); // write L + R samples to DAC - P" n3 c1 |, `' x% ^
return;
4 q* B5 L% X% Y* l8 d+ p- \8 u# c# l}- | Q" k7 T! n- Q' D$ u$ c
" D8 ]/ t5 H- \ p9 N9 }int main( void )" q: }9 f2 l6 m8 Z7 n
{
' H- L# p( m# B1 f9 D/ b9 _1 O# E
/ j/ |3 F( ^3 n' \" m) J% H /* Initialize BSL */
7 T% S0 ^' h/ p/ }' e EVMC6747_init( );
! M4 `. s* ]+ b! i$ H" j /* Call evmc6747_intr function */
5 |2 @. g. Z. U' P, D' Q7 ~ aic3106_init( );0 n5 s r) `; J
while(1);2 G8 C) h1 K* n/ f0 z* m
}
- v! I; E( o1 @5 q( n" v
% p0 O' k, G; U4 l
6 l: {6 W- ], V8 w6 w4 _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% a6 c: ]4 K3 C4 `4 M' W% q; `/* Initialize MCASP1 */
/ l* T; q$ \" ?6 w8 x mcasp = &MCASP_MODULE_1;
0 v" j9 I- K! |6 P/ A, C mcasp->regs->GBLCTL = 0; // Reset
& S5 V; C6 [; p0 g4 k U+ {" V, x mcasp->regs->RGBLCTL = 0; // Reset RX
3 U0 Y% o$ m0 H* j* J mcasp->regs->XGBLCTL = 0; // Reset TX- M9 P& ]# f: q+ U3 ?2 o) p* t
mcasp->regs->PWRDEMU = 1; // Free-running ~: l" M2 }8 `5 a* J: _* X
// configure McASP0 receive registers
/ H7 o( s" i( Q2 e mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 U8 E' g$ E; _
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 }) d! }; b# ^( }' l$ B# `
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) V$ Z$ j% E1 G% P" B3 T# H
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 S6 A b+ c, X- C7 k mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
! R1 u6 K/ X3 i2 |( i: V mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* ~# c- ~! e" M. ^, Z, L* K mcasp->regs->RINTCTL = 0x00000000; // Not used# M) q3 M& V8 `
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 I/ {! y, t9 ]( ~6 ]+ A
8 r* \# u! g* } mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 V( B) a* s: V& e6 L, |; e- S
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* ^ c8 u) F- [ K mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) R/ B7 U) }% F6 r- v x+ T8 n
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 V+ j' Z' S6 d( ]; B# ]! Y8 N mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK3 S$ q8 \. C; b; \/ s* U7 d3 g" i
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 `) c- [9 m9 o* U/ n/ |1 H3 n mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 j# l; Y! W/ r5 C
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. j# G3 R$ N% U7 S
) }7 q% H+ P5 ]: X B; a" ]7 Y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( [# z$ E$ R8 F( X( u/ [
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
9 g0 \; [8 C+ V mcasp->regs->PFUNC = 0; // All MCASPs+ c! R& W! _- Q% @2 f) A/ _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* I; l9 t5 [$ P/ W2 Z( n0 L$ f# I6 e+ C1 W' D. v5 M' l
mcasp->regs->DITCTL = 0x00000000; // Not used
2 r8 h7 \# b* K; { mcasp->regs->DLBCTL = 0x00000000; // Not used
. G0 A4 |+ L# ?5 `. ` mcasp->regs->AMUTE = 0x00000000; // Not used
) m1 {/ x' J2 i2 x0 R0 V J: @' h, ` y
/* Starting sections of the McASP*/7 _- v( b' U+ _; m O
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" U1 K' e3 N9 s R( c2 K, q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& `4 y1 u' z, Z1 q, }- q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 @1 V% B' \" F# K* ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- ]% o4 e: E& Y3 O; N9 G
+ Y* n, h; m7 Z' G- b
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- [. D' T" V* A% d4 q/ g& p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. l. j Y; |. T8 w9 O
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 M# _" \2 t3 p6 _& {) O) D# [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) L; N0 ~" J5 p1 q
4 L( E v1 n. O0 K mcasp->regs->XSTAT = 0x0000ffff; 1 y9 Q, ~( i4 u: i& \5 r
mcasp->regs->RSTAT = 0x0000ffff; ) F/ j4 @7 A; N1 i6 I! F
. A. Q3 B* Y4 U5 @ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
b* M# H# z4 x& m) f# U9 p& u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 m, S+ i/ Y) c& m. ~3 C
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + F5 K# _% N9 X1 l! ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ l" A" F$ N: a. w$ g
: _ X' q; Q; W& i4 t6 s! W /* Write a 0, so that no underrun occurs after releasing the state machine */
9 T8 b) v* g' S% H mcasp->regs->XBUF5 = 0;# R2 ~8 A. v, K) Q
mcasp->regs->RBUF0 = 0;8 h8 |, i$ d' e9 J5 e
7 k$ \: o$ i" r- ^( ^, I4 r
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 P9 K: N" @1 s7 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" i. t2 y0 X# V% \) {" [- F mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; }. U1 {6 M0 t+ n8 ^' w( E; x& e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ L) g" z* Z6 b
0 ?* W- e$ E5 e% U, ^ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 D% L1 [; C/ w7 ?$ r6 I6 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
o' ~. M& h) I4 f) _$ M! h2 G9 s mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 A y0 ^" d9 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 j- |" C/ A/ \) v
E; [# R* \! |$ M" C2 G4 G
CSR = 0x0000;% E, f7 s7 L8 D9 {# f
INTC_INTMUX1 = 0x3d;! e9 H Q$ M- W. J5 \0 |
ISTP = (unsigned int)vectors;
2 M6 i( A% r& z; ? ICR = 0xFFF0;
' U/ ~! @9 S" Q8 F! W, |9 z IER |= 0x12;
5 r/ H3 g9 v4 c+ R2 Z CSR |= 0x01; ' P* D4 \& r3 S4 n9 w# L ?
. ]1 c/ b F, `6 E' y$ ^& j- ^
+ u% ^2 }/ P' F1 J
" T, B F6 z5 R% g6 R; L# f8 h) b还有就是两个输入输出函数:. t6 h9 S, x |8 c# G# s: f! W
void output_sample(Int32 out_data)
7 n* ]+ Z$ f R. `{
; |2 L3 _& q$ M* D AIC31_data.uint = out_data; " q2 l( z; v: `+ y) }1 k0 i0 Y
MCASP1_XBUF5_32BIT = AIC31_data.uint;* |+ j' R6 k0 P5 J
}
! V' T L" f% M$ O- v: J
/ n) h$ `- C& ~1 ]/ mInt32 input_sample(void)
6 u" m: A; o' ^- j4 w$ C: w+ h8 K{ $ O0 S# k% D+ A" J
AIC31_data.uint = MCASP1_RBUF0_32BIT;
% i9 T3 p& c( D- H0 }" j return (AIC31_data.uint);
+ D- q7 t" i3 T}
6 B8 C+ `8 M; x3 c8 M2 R/ _
! D5 Y5 a5 b/ p, u4 g |
|