|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! R7 |. [# @7 y9 @4 q7 {
main文件:
; }" T( A& O/ z& Kinterrupt void interrupt4(void)
- w/ u- b" ^% ?9 J5 M{# B; a! i0 r+ j# S
Uint32 sample;
/ { s: f9 Z$ d1 Q. s9 W/ b* c
0 b# `' Z G: V; { sample = input_sample(); // read L + R samples from ADC
2 K$ l- Q: M( B7 ~ output_sample(sample); // write L + R samples to DAC 0 r5 l; {% }2 a0 q0 @, t' ?
return;" O& b4 V# L8 f9 @& ~: ]- c
}1 k/ {5 L) R: ?0 I
) ~3 {0 K" v2 v7 W( u9 G
int main( void )
% ], O6 d T3 `- N* o1 o4 u) `" Y5 @{ z; j d& e6 s& [+ h) Y; b3 r
9 O1 W6 }+ Z" I& p r- Q
/* Initialize BSL */
5 x; T! V8 v7 S/ M- \ EVMC6747_init( );6 i/ \! l. T$ o5 I+ _6 q! z
/* Call evmc6747_intr function */: v2 j) Z2 r" N3 Q$ W
aic3106_init( );0 Z/ F. ^* p! o0 g6 K4 M
while(1);
/ S0 `9 k+ |4 O' M}. l0 c R+ E+ ?& `; B3 ~
f1 X! J, L" q; \
% @5 e& v% t4 W2 F" O) C( |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 d r& Y5 A1 j* f: w* l( ~/* Initialize MCASP1 */! C" a- a# s$ o" E" U' N* q& E) m: Y
mcasp = &MCASP_MODULE_1;
2 Q, _- u% l/ s; S7 W) O4 Y mcasp->regs->GBLCTL = 0; // Reset5 w+ f+ R" T- y0 f
mcasp->regs->RGBLCTL = 0; // Reset RX+ }4 X# `8 H1 y9 M1 c9 \
mcasp->regs->XGBLCTL = 0; // Reset TX; Q: s% k8 D# Q" u% V
mcasp->regs->PWRDEMU = 1; // Free-running
# j" J, k2 U4 t; p0 C! i9 B6 `* w // configure McASP0 receive registers
- g$ S7 ^: Y6 u5 a& T: q$ ] mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 O" L3 B( ~( j& _6 ~' a! J mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 d5 q$ }; @6 a
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 W# J e* k: b) c
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# u, H* _: C$ G. Q. \% d
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) E$ p' \$ q) o! m
mcasp->regs->RTDM = 0x00000003; // Slots 0,1* z* F5 A+ a1 f( K
mcasp->regs->RINTCTL = 0x00000000; // Not used
' ]& O8 J& [8 R& Y; o, ^- f4 G. | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ I. F7 s: G1 m
: k* f4 M4 r% v1 ^8 [& P$ m
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used W# J4 G6 w% }/ ?
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 b& q. ]7 F5 i; n4 {& U. I; j mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: T0 Q: `. @$ T" J6 k) w( l3 a
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% S0 V( Z5 y6 ^6 |: ~% O
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& [% X. r# e6 [6 V mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, |: |) ]; g) |/ I$ _) r3 U mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ q! V5 R1 h+ \ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" C* t. M1 w5 _# P6 T) v$ _
& e) L# \# U1 ~5 L$ S3 u H/ w
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 B% e7 M3 c0 V# p! S% X' ? mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
% n* D% g+ x4 a& [! `$ R mcasp->regs->PFUNC = 0; // All MCASPs
9 U# _0 |2 b m9 i& r! D/ t. ]" {: y mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* E$ u9 p }) N! D1 s; H. {
7 E* f+ K. y! G/ ~5 H9 `/ w! f mcasp->regs->DITCTL = 0x00000000; // Not used6 Q, {1 c9 N: D" e) t
mcasp->regs->DLBCTL = 0x00000000; // Not used
( t' a# O9 ^9 Q% t" } mcasp->regs->AMUTE = 0x00000000; // Not used; `8 d# `2 T0 b: e: B
" k( {% ?) N/ W# }! w; }- D
/* Starting sections of the McASP*/
, _- M/ j$ I' ]! s! n mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 }% x% d) B& o0 b" _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 W# G% _; d, v# n4 d- `- i/ d0 C mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 q' b' s' `/ z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# w6 r/ _; ?' q
" C- i* ~" W- C; T. r7 w mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 H8 }# B3 n, s$ _# f$ f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 f* i6 d D7 L: a& U; Q8 S
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 T9 I m- H5 _% E( l7 O4 A3 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% D* h1 v) Z# q: M3 O3 P
; n* y7 ^9 C6 L+ x
mcasp->regs->XSTAT = 0x0000ffff;
$ ]% ] I' X1 z2 s+ p" T mcasp->regs->RSTAT = 0x0000ffff; - P/ ~+ R( l' ~% N8 {
* J. R+ ?, y4 @
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 N! t0 W' t% Y2 E* D, C: Q& B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& O9 V# f4 c7 Y# v* p7 o mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 n2 S# [4 N+ k, U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" ^$ P' n+ o. ?" [$ o9 D r Y- j" k
/* Write a 0, so that no underrun occurs after releasing the state machine */( n% t8 {$ X$ l# z4 [3 y
mcasp->regs->XBUF5 = 0;
' }) i4 d! p }7 d5 h mcasp->regs->RBUF0 = 0;$ W( P. w1 ]1 Y- t
! {' S# e5 T8 O: h mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* w4 M( n4 Z- l6 d1 Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' `8 t* n# F- s6 `
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * g/ t+ N" E1 v+ q; Y/ @ D+ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 x' l' h; \* A5 x$ Z0 T. g8 e& E5 B" ] O8 q0 @$ C. Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 r; L& ^" k6 g* i8 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; d& d& P: O% y8 s5 p# `# N% M7 o
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 ]% {) [- A% w; D3 I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) P. Z% Z% Y* l; t, _' L3 l
9 i" t' ]. ~9 L: A8 m( r
CSR = 0x0000;% l1 T5 B0 H# J. R- _& E
INTC_INTMUX1 = 0x3d;
9 f4 r+ z/ ~3 I" Z2 L, q8 I, J ISTP = (unsigned int)vectors;
0 v' c# ?' M! Z$ O2 N5 h ICR = 0xFFF0;
$ R2 h }, s+ m: B4 W% A IER |= 0x12; # K3 I3 z5 @8 Z3 C) ^" f
CSR |= 0x01;
9 {$ P$ f7 R+ v2 T! l D) {2 A
7 a) K) t7 g9 `" u/ X- H5 } a! _% P9 \. L* ?. b$ \
& N& r% k: d+ I* }* s还有就是两个输入输出函数:) z3 [$ X9 h) n6 H. U& g
void output_sample(Int32 out_data)" X* N! w. T! R! W* g4 V
{8 m; o5 Q9 B- c# E- J0 [0 |% q. n
AIC31_data.uint = out_data;
# @+ A, E' c5 m* } MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 x4 [0 x F) h( R# @}" L" v: p" S, P0 n+ x! T4 p
- R" g; [5 b! s/ w, S
Int32 input_sample(void)8 {4 N8 S0 D5 ?4 \0 }4 J
{
! E. K+ I/ Q2 W/ T* A/ q AIC31_data.uint = MCASP1_RBUF0_32BIT;% ^7 T2 i1 A% k1 X& N
return (AIC31_data.uint);# J) H. i* R4 w$ }9 [, z9 }
}
Y. |5 A% X" T5 H9 b$ `- S# s- N) C! g @! c ?
|
|