|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ y) I, U5 u; nmain文件:, h; ?4 _" k4 s* a9 e8 |2 i
interrupt void interrupt4(void)
5 A _. P5 t6 m% Z{6 q2 N! }# W T, d1 J4 _
Uint32 sample;
, c/ T; [, P$ U6 V5 K: Q2 A: G6 P. {% S! r/ f0 }
sample = input_sample(); // read L + R samples from ADC: Z" B( o; Q2 ?! q
output_sample(sample); // write L + R samples to DAC 8 k1 D2 q9 @5 Y0 |4 S" i! T# [, R
return;) _8 V7 y% o2 G
}
$ o, j( Z# c7 |" L! e! T7 Q9 N4 ]
int main( void )
9 y O+ T" {- ~$ k' t2 I( W! _# e{
5 O/ P+ |7 E- Y, }7 |1 _! H& r1 W- ~. q. [, J7 X* H; l2 r$ l
/* Initialize BSL */
4 z- m6 k4 r% B2 S6 n EVMC6747_init( );1 l, Y9 {0 d/ r1 H% a8 r' B v, y# I
/* Call evmc6747_intr function */
1 {6 M7 a1 E! h' c+ Z aic3106_init( );$ ?( I4 i: T* @% a$ `, o5 ^
while(1);/ ?3 g' J9 m# s# G: \8 p
}, P/ i8 M5 Q# r
, S1 d1 |( {% ]! z8 a% Q$ O6 D, e2 A) g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* |3 I; O1 E+ M3 P' |# T. N2 J/* Initialize MCASP1 */
; a8 M) V, U m2 @; Q) o+ d& N mcasp = &MCASP_MODULE_1;, R8 w; e7 P7 c) Y
mcasp->regs->GBLCTL = 0; // Reset1 U8 y8 Y& r9 i2 U* V7 Q
mcasp->regs->RGBLCTL = 0; // Reset RX
' I: U9 t9 O5 y. R7 l' V* u0 x5 j: P" I7 D mcasp->regs->XGBLCTL = 0; // Reset TX
; W9 s5 D$ A7 H6 S& A& P mcasp->regs->PWRDEMU = 1; // Free-running, i$ |/ G _0 q" t$ y- a4 J
// configure McASP0 receive registers
/ [0 U6 k4 W. K1 `( T* c mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 H# N0 E! v7 X8 ] mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' k% P& e$ f+ O
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- [6 i1 t5 N$ B( i: g mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. f. I' b# a, { mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), T- E6 B* h/ B P# Q
mcasp->regs->RTDM = 0x00000003; // Slots 0,14 J. b% t/ h3 R+ E& J/ f
mcasp->regs->RINTCTL = 0x00000000; // Not used' P c* F5 B; A" U! |& A
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# V/ S4 p' `5 ~6 Q" d7 h! `
$ F; u, B" V0 E: ?. ], n
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used {7 P( T9 v6 I* ^( C
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' E" I/ f' t% i7 u mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 m8 ^" Q# o8 w: M6 C$ h mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 I. k0 |6 t ~6 b mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& }. c% `+ {6 K; E mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% W: ^/ u$ q; y7 C! i mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, K$ o+ d6 C& r5 F$ L N( r! Q& B
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- b$ g! |5 P& X l/ W/ ]5 R' X/ M% Y- n. u) [8 R- P
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, t1 w9 {4 ]7 W0 ^+ F! ~
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: q& d, D1 j, H% u. x mcasp->regs->PFUNC = 0; // All MCASPs
7 b$ D" z- E p( X4 P- W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 Z1 r8 g# f0 I) e% q& _
8 p, o b! H3 n; j( A3 _/ U
mcasp->regs->DITCTL = 0x00000000; // Not used$ M; `& \3 L9 k g
mcasp->regs->DLBCTL = 0x00000000; // Not used
3 V7 b" X2 i m: N9 o mcasp->regs->AMUTE = 0x00000000; // Not used
" f* A; Q0 ~( N: Z) x& U: Y# K9 a/ }
5 E$ b% {; h; \* e8 O; W2 ]/* Starting sections of the McASP*/" R8 N" Q7 C D6 }4 K; P. `
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 x. i4 P2 }) q5 v( Q2 a% [& c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ' t! k! C6 M. `) o
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 }( `0 ~- r3 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# m5 E, m2 d2 g; u
" X \6 k% g& x- ?" w* o mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 b/ O$ L9 `. t4 n# {$ c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 s/ G1 {( l' l' r4 U8 U
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # T7 f2 k8 W9 u8 y0 h8 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 G; ^9 \' v. l" \9 K
0 n& e5 D. f! c' d2 M* @ mcasp->regs->XSTAT = 0x0000ffff; . l5 C4 w# M+ Y( f+ r, ^9 o# k
mcasp->regs->RSTAT = 0x0000ffff; [. I+ ]$ F0 y* T3 K9 l/ W' s
4 p% L: T: d8 O, _ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 i! ~5 A3 {# L. A6 n& f1 ?% F/ a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: q6 X2 V6 F& ?) k5 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; x: R& S9 v$ h2 C/ k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: m7 o/ g+ {' ?% P3 f" _) L9 w/ H* a1 \. z. b8 Y
/* Write a 0, so that no underrun occurs after releasing the state machine */* R* S8 N9 |4 G4 v& d2 r+ G% W4 g
mcasp->regs->XBUF5 = 0;6 \1 R% y7 F2 W" Q
mcasp->regs->RBUF0 = 0;
) ]) U' X1 \ b. N( @2 I1 d& S; o* x7 z9 s
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 B m' W: D3 |6 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ L) i" E, ~" S* {' O
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' b" m1 M% W( g; M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& C' Q$ y, [( ~8 [ _
. Z$ |& ~- d$ Y. S* {. Z mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ o6 f Q6 r2 _' i! z+ b! P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); T: R0 s) B% `8 {- N* v
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; ?7 A) S, \# `- x) [* h. [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 N5 p- J5 {* z; p: y, ~9 i
! {& ?6 q+ Y6 X0 ~' P: Q CSR = 0x0000;0 H; q& }1 `7 O- q1 R/ L
INTC_INTMUX1 = 0x3d;, A( l& Z+ |$ L
ISTP = (unsigned int)vectors;
* H' M( r& s. M2 w, [" X ICR = 0xFFF0; * |+ L5 A9 p, W% m4 D
IER |= 0x12; * ~; _* F, v) o' D
CSR |= 0x01;
! y4 u$ n; Z+ t( ~ \6 p1 S. g' O8 X( T' h
Z' N2 C% B0 T' x( A- X" x2 |) u* b3 y0 T
还有就是两个输入输出函数:
. b2 Q8 ]. I& g% g& R4 Pvoid output_sample(Int32 out_data)- G! i' s/ l d7 _( Q$ {
{1 E" n+ _$ l# |( D5 f# |3 p4 B9 k
AIC31_data.uint = out_data;
' t( a- ~3 W: S MCASP1_XBUF5_32BIT = AIC31_data.uint;6 \- ^ L& ~$ Y4 ~) U
}' f3 @- @& d$ d* d
0 v {0 d# q% k- x& r# BInt32 input_sample(void)) M. t, ]% |+ ]! _1 a
{
. {% Q0 h n) J2 z$ G AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ u ]) r7 F5 [! @1 r/ T return (AIC31_data.uint);
3 q @- i/ l( A! a- N}; I8 \, F! p$ z9 l
7 z x# i! z: @! v$ o( K |
|