|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* r* n0 @& \! _3 U2 bmain文件:
* I2 w2 W2 m4 Sinterrupt void interrupt4(void)
/ |7 L4 K: \& t( o* d{' Q" o$ o5 |9 \) A, Q+ z ~" D8 L
Uint32 sample;
7 U V7 ^4 u& {( v
`. B. E D8 s- A3 Y \/ N sample = input_sample(); // read L + R samples from ADC" K$ B( C2 N) Q- n/ ^
output_sample(sample); // write L + R samples to DAC
7 P3 j8 v8 h7 s" I3 o return;) f( u/ @' X0 w0 q9 u; Y
}+ \/ H, g' i1 ~/ g( ?4 F7 I+ [
% x3 ^; ]/ p+ T+ {( q) j
int main( void )% @) X ?6 n9 r: j3 M# X) I9 J
{* A( m3 H4 {9 V3 Y6 ~
, H% ^$ k" b' Z- c$ I5 d2 D /* Initialize BSL */
5 A5 R. ?( ?# p8 {/ k EVMC6747_init( );, G1 L. |; f# h, h
/* Call evmc6747_intr function */
# p* c7 J' |% l aic3106_init( );) r" s1 S6 F# f" o& Y+ A, A
while(1);
1 D+ v& B* _1 H! m" J+ i}& D4 z! |) Q) T
$ t2 [5 T# ]9 d" H
! m7 N* b: l- a; ?4 B2 L1 e) Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. ~" ?: {5 n: i7 y/* Initialize MCASP1 */
+ B# t& i! S. ^: }8 [8 y mcasp = &MCASP_MODULE_1;
" [$ u$ Q$ V: N8 V0 d' E" q mcasp->regs->GBLCTL = 0; // Reset
; a o$ t0 ?8 K' s0 s9 ^) ^6 } mcasp->regs->RGBLCTL = 0; // Reset RX+ C8 ~* |" L* w# `% k
mcasp->regs->XGBLCTL = 0; // Reset TX& D6 D) y8 p0 `% y6 v
mcasp->regs->PWRDEMU = 1; // Free-running
4 m0 t, e2 p$ @2 G/ M2 o // configure McASP0 receive registers
. h- f+ M6 i9 W' j mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
W4 K9 K2 {7 k j" \6 J4 V mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" J9 D, M$ e3 @$ g. K$ f) c G
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) l% T6 C) {3 A( D6 h; C mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% u1 I9 D( f- p, a! F, l
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! F" X% w; k* l4 v9 [% G
mcasp->regs->RTDM = 0x00000003; // Slots 0,1; s" k. c* @. r$ X" u: N
mcasp->regs->RINTCTL = 0x00000000; // Not used* h' B) ~% B+ y, [- d$ s- H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' c) X3 L; ?1 `* `2 r7 s2 g8 E x+ @' q0 I d7 G$ D. ]
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 w P4 Y1 q: `: X; M
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: c, H2 B8 r. ]* h% u1 R
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ x: }/ z" B; ~4 T2 P) Z2 r
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 A( t" J% |/ ~3 R0 M( ?% y9 l( F
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- M" A4 W5 z! ]3 D$ q: s
mcasp->regs->XTDM = 0x00000003; // Slots 0,1( i5 [ B( M7 G' r
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 j- N& @3 M6 v3 N6 Y! L$ K mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& A% z4 y; h N
6 ]/ h0 i, i- ^& O! d, l mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 F; T7 d8 r* s/ J4 c
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 @# F8 V! D5 U# y
mcasp->regs->PFUNC = 0; // All MCASPs) q0 C ?; ^6 A1 ^1 f
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# a# R4 O. R( E) X$ J0 `2 U8 J3 k
H! E3 W) ^, t3 O mcasp->regs->DITCTL = 0x00000000; // Not used* Z# U; W, U6 l* g
mcasp->regs->DLBCTL = 0x00000000; // Not used' `: t% M# ~0 Z/ A0 ?0 J- ]/ Z7 n! ~, k
mcasp->regs->AMUTE = 0x00000000; // Not used0 {: ? m" y4 G7 W
4 v$ E: @) m* D% B1 @
/* Starting sections of the McASP*/
% a& m) A/ d1 C. l1 L. y4 x mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 j0 s5 l+ ~5 P1 H9 R) A |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 5 m/ F c( _! d J( C
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" Y2 B6 _8 J7 I0 n2 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ Z& J3 X, x% J# z
( w; z! B0 Y4 Q, [* U" l% ~; \/ _4 S mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" w1 i7 m( e0 F. ^8 o+ l4 G; k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, j, F) \ z& ~1 k; n
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ C1 K* P" t" b! `3 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 {7 Y+ z& M0 R J T2 o
! P& R' y. M8 u3 x mcasp->regs->XSTAT = 0x0000ffff;
$ P* \4 {, D& C) u. {9 t mcasp->regs->RSTAT = 0x0000ffff; 1 y( ?+ K8 G% N0 Z3 ]
9 W, b3 w0 X' g& H! k mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; L; f" ?4 H- h: k4 s' S4 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' e) n: O1 N/ w, _) H mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % ^4 A3 u# _0 A. x9 K5 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 p- w' Y. T* A& c: s t5 D+ r8 y
5 m$ S% F+ U/ H/ v /* Write a 0, so that no underrun occurs after releasing the state machine */+ T- y* c+ E' W4 L U
mcasp->regs->XBUF5 = 0;
. q9 E% N" D& Y% Y mcasp->regs->RBUF0 = 0;
' A! f! R. l* h: W; p x- A! Z
( e1 ~! b( Y7 {) G4 Y, M( ` mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 h$ T' Y C2 C. H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" v6 U$ J4 V% g5 m- B2 \& u4 }
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 v8 M9 u; p) J6 K( V& F: s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* p: {# N9 r) Z' x8 \: h _% o- w) G% ` z: A0 Q; Q, v% @# \
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , ^' x w8 t+ r8 b/ O2 [" S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% V" b3 C5 L2 X. P8 R; \* i( q7 w4 n
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 x) H- _( h6 g) O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( a4 m# Z3 P; j: T. K2 X$ \7 X0 N9 s x# Q3 h) z: P9 ?; q
CSR = 0x0000;1 _+ C% V& x d7 `
INTC_INTMUX1 = 0x3d;
- @& K, k' @; r* X: a, V ISTP = (unsigned int)vectors;
* Y/ q4 p0 B3 Z+ A6 p" C1 C ICR = 0xFFF0; ) q- ~* @( E7 s( F* y
IER |= 0x12;
$ i0 u$ Z* ]* X" m CSR |= 0x01;
+ A ^2 W5 _8 m; t% }1 h! k, O$ I. o0 h9 T- ^7 `# T
- A2 Z4 |6 p# X* ~$ Y: k& W( P
4 G- w% H! T! ~* H- L2 M
还有就是两个输入输出函数:
. H! v% e. B8 p* k% i, wvoid output_sample(Int32 out_data)/ @8 C+ z2 |; }* v* l
{4 C& o+ j4 L7 J. @ E% v! ?: L
AIC31_data.uint = out_data;
! o2 H6 j; m! c MCASP1_XBUF5_32BIT = AIC31_data.uint;& b3 b, [* s4 G) @5 |: o {
} S2 f+ Z* o: c+ X
' Y" O3 P+ Z. ?8 ~( | GInt32 input_sample(void)
) B) g, X+ y V T{
. |0 M2 o( m, T AIC31_data.uint = MCASP1_RBUF0_32BIT;; g, J! y0 M, w: W# h
return (AIC31_data.uint);7 r9 J+ X" W/ u2 P
}
* B- M. S+ O2 U( L9 e; o, Q3 {8 z! R1 V# P, ~5 _: J
|
|