|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ O" m2 m" Z+ f$ Nmain文件:8 Q( L5 S/ o$ Z1 S. |: h
interrupt void interrupt4(void)
7 Y+ {* E8 g# i: R/ D0 W/ O# N{
- e! b" L5 }( F: R0 R Uint32 sample;0 Z+ [3 U: _. ]% o* P v- [
' \7 T6 d6 d+ L* r) ^" ~/ f sample = input_sample(); // read L + R samples from ADC
7 M* C/ D9 R( ~; V0 Z# F J output_sample(sample); // write L + R samples to DAC & @* @7 D% {, f F! G% }
return;+ X( t4 S* L9 L+ O. t3 c
}- i. u& B- A: O0 P1 u2 b' @) h
) F9 {3 P) L8 p6 j6 \, ?, ?! I) I/ ~
int main( void )5 I7 R; H6 g" T7 C
{
, d7 g/ I* |9 H2 l+ F+ H) E
6 y! O2 h. Q& Z /* Initialize BSL */+ i6 U5 |- B9 t" P: l4 o: N
EVMC6747_init( );
" q/ f/ L4 P. v( F, L: g$ } /* Call evmc6747_intr function */
: g5 a+ b/ E" [) `0 L w' ?1 j* t aic3106_init( );% P! X0 x) i6 y( g1 u
while(1);
# `2 _% T& ]2 H2 u' y: x}% n- x5 B) s- S5 B, s
# g! w1 b- A- L# o1 b
( V; q& }. u x% Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 Y4 A3 [/ n" Z$ L
/* Initialize MCASP1 */
' T H3 P6 z- v$ o! `8 J1 ?4 s mcasp = &MCASP_MODULE_1;6 d! X' s0 C1 o" X
mcasp->regs->GBLCTL = 0; // Reset& V' V) z/ A' |+ Q! g
mcasp->regs->RGBLCTL = 0; // Reset RX
/ K1 q! n h! {0 A! w mcasp->regs->XGBLCTL = 0; // Reset TX
% F) J. v4 m7 @% H/ @0 P9 N4 y mcasp->regs->PWRDEMU = 1; // Free-running1 Y% p# \) C, I" N3 B
// configure McASP0 receive registers* t; E( q6 w# q8 {& J; N
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& `% X0 W5 ?+ |: _- O& r
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 Z, ]4 i- n" `6 l5 B
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# j: k8 u7 ?2 O( H w
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ Y7 ^% X5 p" C" W& C& r* S
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
6 ?& |2 d4 Y+ ]. m! B% {* r1 z mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# {( U$ ^3 o/ @: G mcasp->regs->RINTCTL = 0x00000000; // Not used
, a n3 f' l* U1 G mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ |" Z5 t+ W- d
0 U/ ^! q; U- @# g5 p) u& N mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. ~, J& m4 g" M3 `8 b$ o mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ z d: i6 N6 ]. C" D
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ C/ l) L& ~) k# t% P
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, H' s0 u; y, T' p U mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ M' @* G) Z, A; l mcasp->regs->XTDM = 0x00000003; // Slots 0,1- Z4 s( U0 {6 L) n# I* f
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% B1 x7 p- t1 U6 f4 o: e1 L* }. I$ D mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; I" a y0 d. v. w
! L1 B; c: r" @ x/ D2 H mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( Y( ^0 z7 `& z- S7 ?% l d
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, ~4 w4 I7 R* s! d+ l mcasp->regs->PFUNC = 0; // All MCASPs9 C0 x- s) `1 t: X% S
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# B3 b3 g3 \) y% f; @0 Q: q# r- S0 v
mcasp->regs->DITCTL = 0x00000000; // Not used
" e) s" g3 ^& s: Z9 T' ^7 e mcasp->regs->DLBCTL = 0x00000000; // Not used9 g$ x0 ^( k- y- n( [
mcasp->regs->AMUTE = 0x00000000; // Not used
) U( `; G& E% v" t
2 u" g, ^- Z3 G6 u+ r/ F/* Starting sections of the McASP*/5 L# {6 M0 X6 _' ^4 y; V1 ]6 N
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! v$ N: R( ^- J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : H8 X0 x/ e8 A8 i' s
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' R$ ^" d$ @: h0 u n2 q3 U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( F5 } u& P5 J6 w* p, V5 A% i4 x8 _/ _7 x; n' ~' n
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! k4 f) n7 e9 r# x0 N) ?9 I/ O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 {. D6 M* H$ r- k/ W mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * [ ] ~8 M# t @5 N2 g6 b8 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 w0 m8 `8 P1 }4 x3 {# O/ @3 s# G6 c O
mcasp->regs->XSTAT = 0x0000ffff;
# I! D9 i% K0 L mcasp->regs->RSTAT = 0x0000ffff; ) Q; X- g4 ~( ^! F' z0 i
# Z6 Z' M% m0 C& y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( F6 `8 ?( D4 _0 b+ Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 f2 ^5 w" G9 r1 i$ b! R! U
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( x, Q, B7 l9 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ C/ H$ O8 w y+ Z4 N, C& G+ ?
% O( m0 O4 x7 W /* Write a 0, so that no underrun occurs after releasing the state machine */
" R7 y3 A' D h8 H mcasp->regs->XBUF5 = 0;
* T7 q9 m X) x" X mcasp->regs->RBUF0 = 0;: I; C; F! W% W1 F) z& ~7 t
& r) w2 n; j* ~- i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 t9 M: B" t0 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) W7 t5 t' x; o, I mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) W2 y4 \! ~$ \( g# p8 q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( G, `- |+ N- ~! f0 D ~( I* n9 I0 [4 s: b( p$ b
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& q0 ^ B, O1 W! N+ f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ o9 v2 s! X9 i! \* V M
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. }- c4 Z1 Z* ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! D! G: ^4 O6 T8 M7 V
+ s2 {; q& g5 E) X, f- N4 J CSR = 0x0000;
- |# j9 x# O2 k9 a INTC_INTMUX1 = 0x3d;
/ `3 M( D" v; ]8 Z% G ISTP = (unsigned int)vectors;" A7 R! ~6 x4 u; o: m+ `' ~ ?$ ]8 i' p' d
ICR = 0xFFF0;
3 {& j- Y6 W& Y6 b IER |= 0x12;
6 u$ B" G; T! H; y CSR |= 0x01; 5 D! d) g8 P$ f3 C
* N) F9 k8 `* a# X
% F* g+ n, X7 \. j& ]6 p1 c7 R" p, [; N0 z7 U5 _) W* @
还有就是两个输入输出函数:0 ~' s: D2 N* R2 I
void output_sample(Int32 out_data)5 B" ?3 [) Q( B
{
3 L0 a+ O' Z0 R E: l AIC31_data.uint = out_data;
, ~* P9 ]# i. R4 }. |% Y2 ^ U MCASP1_XBUF5_32BIT = AIC31_data.uint;
" `7 K( k D, V3 t9 P3 \/ T3 R2 F}
* P# k) n3 T5 m) T
- ~; A3 X* P' J3 I4 `* ^Int32 input_sample(void)
6 M, k4 z8 p! c. a{ % `% b+ q/ J+ g& j1 m, [8 n/ J! Q
AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 n, e j1 c: q5 v+ q2 L return (AIC31_data.uint);+ e6 G* G4 }: \" h& u/ P/ c
}
9 h3 |) J- o. q* D D# \2 w+ u+ V
6 v$ l, p$ M5 C2 S. f |
|