|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 R0 ~& e- H* O! C
main文件:% M- `; p" d7 y
interrupt void interrupt4(void)
: Y- Z. |+ y" Q+ }; O, j. Q4 O{
3 {) R6 L% y. m5 N/ R Uint32 sample;+ `" U% p6 b8 i8 t$ Q& B: a* Q8 P
* _" z6 C1 {2 G& L1 _6 ? sample = input_sample(); // read L + R samples from ADC0 h/ {7 V0 o. K e
output_sample(sample); // write L + R samples to DAC $ I# x! c O! R C* N
return;
6 D+ X+ Y1 R" v& _: W" L0 _8 [0 R) ?}) S, ?& _- F0 S7 r( Y9 C
/ U0 s( W- R1 N* s
int main( void )! b9 S8 c5 g; a6 {
{
$ o4 X+ {4 K2 m% ?8 W
' }1 t3 M8 p: Y. U* \ /* Initialize BSL */
$ _, T1 Q, c0 ] Z1 o4 y EVMC6747_init( );
; q! I. t v" ^* M' ]5 G+ ]+ t2 ^ /* Call evmc6747_intr function */& T' r* `8 D! M o( k H/ P- s, A
aic3106_init( );" t/ S& l. {8 A8 a- W2 w4 ?
while(1);; N- J9 }% \! k' D. s
}6 N/ g8 @6 J' f3 q1 }. r
0 h) t7 e2 o4 r% V" u
4 U) Q" n* o, B( x( N: P3 _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) j* f$ ~: c d q9 I0 Q6 W/* Initialize MCASP1 */& F8 n. O) V! d$ x
mcasp = &MCASP_MODULE_1;7 a' O8 q' M/ R1 b
mcasp->regs->GBLCTL = 0; // Reset
8 p! m! J1 B0 y7 l. S mcasp->regs->RGBLCTL = 0; // Reset RX4 W9 X7 J6 X1 A
mcasp->regs->XGBLCTL = 0; // Reset TX
- m6 L& P. x) m# f# f mcasp->regs->PWRDEMU = 1; // Free-running
- T, D0 u6 v% m1 @ // configure McASP0 receive registers- x0 `) E! e& B& Q" |, U
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; I# P. S0 x" X# v: o
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 D/ n0 J. R9 K* _4 p9 P! O
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word O. X- D$ `' x1 o o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), d1 v5 u, d. U2 H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 R" v0 f% `# R# b: J, ^: @
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, k& ]9 d6 M* c5 e mcasp->regs->RINTCTL = 0x00000000; // Not used5 e2 s6 |& i$ Y" Q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 Y+ }3 f, `( \/ \# U: s% ^
7 p# c) U& j: f% | mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( o& A' e7 I0 c mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ E: r8 J) f, ?
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 Z6 i- L/ y6 W mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 {, E- N. S' e3 J, G# c mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- F/ e" Q2 S9 b$ @9 g mcasp->regs->XTDM = 0x00000003; // Slots 0,18 c2 a h5 G) {# f6 `
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; F$ B- A5 J8 k% {6 `& |$ r
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 y& L+ Z3 Q5 i& u) |
9 F, _) W/ s6 i/ Z1 Z0 V" K
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 k: T1 `" A: e1 \ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. P( N7 Q5 z, A- z/ d9 V8 w6 W mcasp->regs->PFUNC = 0; // All MCASPs" s6 e- _7 Q" ?& N2 d) x7 Y2 M
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* Z, ?! P3 W2 C& y* O5 Z/ k
9 [ I1 X6 F. S0 `! ^ mcasp->regs->DITCTL = 0x00000000; // Not used
6 Z r# ?! I/ [5 h9 H4 K7 n& _' ` mcasp->regs->DLBCTL = 0x00000000; // Not used$ e; r$ y$ @3 @# c6 A
mcasp->regs->AMUTE = 0x00000000; // Not used
+ G# B4 E+ z$ l8 _! C% W* r/ ~4 R; Z3 j% n. |, ?
/* Starting sections of the McASP*/( U/ X: Y) ?; Y; R3 k9 {
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( p x+ R0 D5 I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . g4 A8 o. V* y3 T: L# R( _' x$ X
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" y1 N# O# O% Q/ d0 }& n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 I- J: `7 w6 \( @9 f8 d
( o2 e: y; C5 Q* [% {
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 q. v. ~( i2 p; l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 @2 K3 W( N& | mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ O6 m' {; p2 |, N: y. j9 s( X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* n" A7 D8 O. l7 G8 ^
& Y6 w/ B" Y) }2 _% `% P/ z
mcasp->regs->XSTAT = 0x0000ffff; 8 I' Z1 l/ B$ ?& f# q
mcasp->regs->RSTAT = 0x0000ffff;
% B1 I" _. b% l9 [. @4 n. p9 e! D9 y5 V, e# V0 ~
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' Q0 Y. V; a* _ O2 U _$ g; h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! k* U& D1 X( v: f) D. I; w7 W0 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, [/ y6 U) o( P0 v5 t$ L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) Q& w6 P- x& V/ L) @
1 j3 k2 w" ?+ _, J /* Write a 0, so that no underrun occurs after releasing the state machine */
) {, ~: t7 o& E. N9 [, F3 K- `) Q# S mcasp->regs->XBUF5 = 0;
' s& A0 ?0 P7 I9 A1 ? mcasp->regs->RBUF0 = 0;& f/ X7 m1 B$ m3 r
( g+ c! N) Z, _- } p2 ` mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # I6 z" _2 o$ E, `, }+ X: c* o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, `- J: `1 m+ u/ _; ^+ p; | mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. J- z' G9 p+ O8 n3 B; C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* e1 j5 f1 ^ c0 j/ Y+ ~' F) d! z! P" L2 R% f3 U
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, c3 S3 c m0 |+ F5 N8 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 [1 O2 s- i1 y0 T, L3 o mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 j+ W* D1 t, L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 Z' i, d2 K% F* p' ?, K+ b6 W- x! ~+ L$ W
CSR = 0x0000;
+ q$ s7 C: g' y4 l3 u. H INTC_INTMUX1 = 0x3d;2 I3 K1 A: N/ v s C
ISTP = (unsigned int)vectors;
' p" _) Z8 y9 A' E- e7 ]/ v# s ICR = 0xFFF0;
0 P# x1 f$ R5 E' ]8 p* C IER |= 0x12;
+ m7 d) B& y7 }; W8 i CSR |= 0x01;
6 [- J8 a8 N( g" g3 i4 X5 o8 t) E! u/ j
6 G- Z6 j8 I/ ?) _1 {
?* r3 F% ~# Z2 L( j; C还有就是两个输入输出函数:
& U0 X0 J5 ?5 Z' N8 n& jvoid output_sample(Int32 out_data)
; V/ e2 g; d* r c% w% J3 m/ l{
: ]' l2 U/ k8 [2 ` Z* }% o$ \0 `+ G AIC31_data.uint = out_data;
7 s8 K9 A3 ]9 j! u$ [ MCASP1_XBUF5_32BIT = AIC31_data.uint;0 N$ V) `9 G! k, u4 s5 M6 a& V
}
) e" s+ z& \1 {7 J" b: t$ N% }1 k7 Z" A! {/ I
Int32 input_sample(void)
' k/ @( x, m9 B% C) Y+ ~- d" q{
) y: ^- l% M: u4 c- J8 N AIC31_data.uint = MCASP1_RBUF0_32BIT;
* M/ X: _% I H+ E* x0 S return (AIC31_data.uint);9 ?& }) @0 L3 a- b. A3 |7 A% N! _% {) F
}
" t* n7 {/ q2 w# y/ V$ N; q1 G/ k) M+ o& i
|
|