|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" [! E; @6 A% K0 \2 V+ |
main文件:
. \& t4 T9 Q5 a' c' Ointerrupt void interrupt4(void)
0 l5 X" s# o) x3 T& |3 e, d6 c4 [{# h( S1 ~3 z: _' n9 S' U
Uint32 sample;
V% r8 }5 ]2 e+ B' T
, v' m) E& K" d' U- c sample = input_sample(); // read L + R samples from ADC
6 Z$ W& d4 w- W' l5 r! r output_sample(sample); // write L + R samples to DAC 8 s6 m& p5 d6 z9 F2 W' X' m
return;9 H, ~& F/ ]; f6 K2 F! m$ a$ o
}
% l4 x' A p, E, G/ @. L" n$ C8 I8 G% l g* ?6 l! k$ R0 o
int main( void )8 A% I) W6 c; ^* k& y$ o* w& u
{% C; _) X$ t5 M$ `: q; o
2 ?1 Q5 R& S) e4 C! n2 s2 U+ p2 \
/* Initialize BSL */0 |/ `* G7 @* h% [* n& S t( W! [- J
EVMC6747_init( );
, P7 z: D9 |# q0 R /* Call evmc6747_intr function */
+ c9 X0 ?9 }2 m/ b+ m aic3106_init( );
/ g* \9 A2 s" X: h. o while(1);
+ S2 @$ ^* u7 V}
8 U8 n: K! Y( w( o* q/ O f9 x# p' X, \/ c& ]7 f: Q* t
s+ R' {3 y: X" l: \) E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' G, ~7 p* `, e* J4 g( \3 v
/* Initialize MCASP1 */
/ ^3 E# J; t) a" D9 ^ mcasp = &MCASP_MODULE_1;
+ j1 W) M2 ~4 _1 r mcasp->regs->GBLCTL = 0; // Reset+ ~4 r) ~) Z/ I
mcasp->regs->RGBLCTL = 0; // Reset RX1 w& L- N1 W, P; M/ M: h: X
mcasp->regs->XGBLCTL = 0; // Reset TX
* {: t! j( c& v1 G! H mcasp->regs->PWRDEMU = 1; // Free-running
# |. ]1 ^- V" g! Y9 a // configure McASP0 receive registers
8 A; ~0 }1 @3 i% ^ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& E: V0 O; L+ _/ ^* e0 C% f/ G
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 I- _# @* @& R
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# c5 M5 R2 O2 |1 S; w
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* z2 C9 r) ~8 z0 ^6 W8 J
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 Z1 H/ m. C2 B* Q# g9 { `
mcasp->regs->RTDM = 0x00000003; // Slots 0,1, H$ p. T2 ^# [/ I) J( f- _5 k( [
mcasp->regs->RINTCTL = 0x00000000; // Not used5 e% ^( s$ L- O" x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 Z+ w5 o% h( _ m+ V3 N: S
- L2 g# E, Y v) `0 [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 L- L$ k& `0 x4 I
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- g: g% y0 L |' E4 M4 z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: a: p& t' T$ W, m+ S9 P. c
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, e5 b$ I d4 g! e7 _
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
" v3 M3 b6 t1 v mcasp->regs->XTDM = 0x00000003; // Slots 0,1
- _. h) U; |' H1 t2 o( K2 d$ i/ c mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" k& D3 I# e3 ?* H& ?4 s6 ]% m, b
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 ~( V! i- V/ |+ I; p/ E, \4 Y" B+ t% q9 A2 J0 v, O% Q( ]$ Z
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN M% e+ O. J# v) s6 V2 ?
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
9 l5 Z+ u" P/ y mcasp->regs->PFUNC = 0; // All MCASPs
! F: G2 U4 c. A& P: J mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: B# }1 {/ y& \* Y* t' E
+ {& p% U% z! m; V# E4 D mcasp->regs->DITCTL = 0x00000000; // Not used
1 g: W/ S7 w- f mcasp->regs->DLBCTL = 0x00000000; // Not used
8 u6 h6 [$ D; v- A& V mcasp->regs->AMUTE = 0x00000000; // Not used* l# r @* d0 `6 G5 E8 j; N( S
; {; {( B0 e# x' V% i3 A; i
/* Starting sections of the McASP*/
% _. X. R' z! n) S0 e% F mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) B. `; {" B; P; o6 F& p/ ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & \# x0 }) |3 a3 L- w9 E3 ]7 Z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# G' y; k. u; O2 R! T" Q k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* J9 n' M) X. _3 j/ A- d
$ X. h2 _3 P/ M; x3 |7 {& J7 Y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% p. R! f. e5 X% O# x+ D% w4 e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 H6 d( O6 Y0 z! l# L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. F( e& ^1 U7 U8 K- w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' V& ]. Y, z+ z
2 }. p6 n6 m! N+ f5 S+ c( C mcasp->regs->XSTAT = 0x0000ffff;
- Y% N( q1 d7 U) h! b) k5 t mcasp->regs->RSTAT = 0x0000ffff;
; v/ J8 e5 P5 x& ^: Q4 m: N5 R2 |& `/ g- z5 s" x/ ?& w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 p- z6 ?' G, { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 }. [! i% x$ X$ r
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * \+ U; e8 b& H; W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); V4 ?# w, a0 @
. k' F: [3 J2 U( e9 q$ ?* T
/* Write a 0, so that no underrun occurs after releasing the state machine */+ \% ]6 w+ L4 `- W
mcasp->regs->XBUF5 = 0;
- T- s8 T' s8 ^5 _3 m3 k7 x" P mcasp->regs->RBUF0 = 0;5 f# C2 d- O# j8 h5 F) I
' @9 p/ H6 K" V$ t: Z! h- d' C- O mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ O- U: c9 a5 \5 m7 q* S" G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 h. ]1 s: N4 P7 N) n# Q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 ^3 V$ t, R* Q9 c* D$ ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 T C5 J& d7 F: U9 `* M
. Y. U/ s/ k5 ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 z: o1 u" n2 B) U, \, _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 ~5 r. z' u, c, s2 I0 D S
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ j% _8 i2 |; P: _/ F, s9 j5 S- ]% ?3 m) P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( g- G- D/ b8 k; ^. M; {
: o. ?4 }- d5 v
CSR = 0x0000;
" T, `8 d2 X8 v* b3 B INTC_INTMUX1 = 0x3d;
( H5 d6 W' @8 w1 k ISTP = (unsigned int)vectors;! s. q- Y. c$ E1 _2 F' G& \. |
ICR = 0xFFF0; 8 B3 ]0 [ S% J2 L# t
IER |= 0x12;
+ x$ ]/ |; \2 w8 p CSR |= 0x01; / b8 k6 l* k9 K3 n2 J% K
% C5 ^$ P3 x2 E: b0 c
- m( u* |% f. X! h$ S6 ?$ J# G/ H$ b4 Q0 K! ?
还有就是两个输入输出函数:
4 {4 j9 I3 I" Y, f9 t; s$ D) \" Svoid output_sample(Int32 out_data)# C: | S; g& _9 \$ O' f: U
{; E4 d( X# w* _2 R9 G$ B9 Q% p
AIC31_data.uint = out_data;
4 ~0 N+ ~: [0 B" m% ~1 D9 h MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 }& Z1 A6 p; T9 s) L}
5 n/ T+ B: `( r* B) j$ F- T1 q5 g+ L* I
Int32 input_sample(void)2 o; z2 P6 M' e% v2 N
{ 6 a J' w1 `+ o; C, f2 \
AIC31_data.uint = MCASP1_RBUF0_32BIT;$ X2 Z1 ?* c3 ~# b6 W- L& p: s
return (AIC31_data.uint);
8 Q/ a+ G( r: B& W' F4 Q}
4 I% o, E7 I0 ?. A
3 ]( E/ q: l& `8 ?3 ` |
|