|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: ?5 K' R' R3 J, F; e
main文件:
- T5 d( Z, C: `% B9 Tinterrupt void interrupt4(void)
& ?2 X4 t; d- N. b) V( T! d{
. M5 Q; I; j# _! h3 H Uint32 sample;
. U( r5 S* v0 G C9 o# Z; W* ^, p; Z; O8 k2 }6 e- d: r
sample = input_sample(); // read L + R samples from ADC2 T7 d7 t5 x, T D: G `2 j
output_sample(sample); // write L + R samples to DAC 8 l/ N, U; F1 w7 R) z2 R
return;3 V& v. G0 b* ?
}5 e$ P& W Y9 U3 @# y
7 k0 T# L2 Q+ C. X6 vint main( void )& r' A" x# X" ]3 I
{
. l x4 d5 `. y5 X" t% D/ F
3 N0 \: l" o/ g2 ? /* Initialize BSL */1 y6 M u+ D- k. h. ^7 U
EVMC6747_init( );
. u/ f- p( `6 v. } e /* Call evmc6747_intr function */2 k2 A0 D2 y+ r# {) R ]3 E4 m# c
aic3106_init( );
% ]: r& v9 `, a, \ P8 O while(1);
* |! X# T# v/ y- ^* |8 }& N* b) A}: R& V! ~& M! w4 h0 g" p$ ~! n
i4 q8 }8 v6 y4 c0 Q
+ ^6 B8 \, S% @# kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* u4 p1 O) G0 {) ?9 z
/* Initialize MCASP1 */
( _) Y, ~3 V" P4 q: S" M mcasp = &MCASP_MODULE_1;
6 m- V# l! p9 l5 O mcasp->regs->GBLCTL = 0; // Reset5 f) C) ]& ]7 `
mcasp->regs->RGBLCTL = 0; // Reset RX
$ i, \- T8 j8 K" S5 G7 m; _ mcasp->regs->XGBLCTL = 0; // Reset TX# E( P6 I+ {& ~) f; r
mcasp->regs->PWRDEMU = 1; // Free-running
/ O- A/ {. q* B // configure McASP0 receive registers- k0 r% p9 V; ^& c: N8 G2 W, e3 R
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
^: h! N- ?( @; F% G mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. F! c5 F# B% f+ ^2 ~4 ^2 A6 B! ] mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, ?( e2 {2 P. T3 T( h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' B( u- ]; S( j8 z
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 u \( W& R0 I" t4 f
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ z. `2 i8 U6 ]5 ~- }. k$ ?5 Z
mcasp->regs->RINTCTL = 0x00000000; // Not used" b3 a9 o1 z6 f2 \! P& B6 }; H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 D7 T* b% b5 r) ?6 i- `' o* _4 a; Q, X, J. V" o. b& O! x
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 w5 ?+ u6 Y6 J, x# x6 ? mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 X, M5 A8 X* b4 F" S8 J- O: ?; E
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& p J8 P ]. N2 Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ L- o9 b+ b, }6 g' k7 O! I1 @
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 S% g( o% I- x, X6 @3 X% E* B
mcasp->regs->XTDM = 0x00000003; // Slots 0,16 m; h8 O$ U# k( M$ j: F! g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) }( \; L; @5 X! M: \ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
A# z/ y# O8 b& f8 ~3 H( u7 U) ^- R% n
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( u" A- [1 I5 K/ O, Q$ H mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT% J+ S7 G/ c2 w5 V
mcasp->regs->PFUNC = 0; // All MCASPs7 ^2 Y& M1 q0 | a7 T
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 v7 w' `, n4 _% O8 R8 s3 }0 z7 G E0 N& A
mcasp->regs->DITCTL = 0x00000000; // Not used
" v! J( T8 S! | mcasp->regs->DLBCTL = 0x00000000; // Not used; |5 F# J2 D1 A% B& b
mcasp->regs->AMUTE = 0x00000000; // Not used+ U/ h. [! ~& ?$ v& R7 s& {9 f5 n
: [3 n" X1 p9 C# [5 ]* Q
/* Starting sections of the McASP*/
& `, w( j/ v! b# I8 X mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 }. M! w# Z- [; k, ?4 z$ f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
% L$ c7 C( O" l; `# ]6 P. I$ T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" _( k6 W e# J8 c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); z; N$ A9 v) a4 u1 f
% ~4 p2 A$ [$ j( |. j
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( I. W' S$ k* [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) E; {+ x# y& R$ U& h9 ]( I$ B4 \" s mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) t1 c9 j" g& e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 Q6 S* f5 a/ V# G( P# H, k
% z& P% |- \ n6 m mcasp->regs->XSTAT = 0x0000ffff; 7 X" ^- s/ y" _# z: l: w6 {
mcasp->regs->RSTAT = 0x0000ffff;
" f) s' B* n& c) v: Y7 E$ E e7 b) a1 |1 {& K X" D# \
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 q; l+ t r8 i: J, @! r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" n: ~% `: D# S# F, i mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 X5 W8 E- N8 v8 {1 r9 l4 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 F$ g5 p0 F9 ^7 P' B. o& m4 t
2 |% R* Y( D+ d0 C
/* Write a 0, so that no underrun occurs after releasing the state machine */5 ~* E0 S# |4 N9 R8 V
mcasp->regs->XBUF5 = 0;
" e, v: L, I- \: k& x mcasp->regs->RBUF0 = 0;# ] k6 m0 s% o4 ?0 i7 i- u( L T1 g
/ X2 @* Z& F0 b; Y% @% L( B+ o
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* [) K Y# O0 @! e5 {: @# f5 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 \2 K6 _' X" i0 R0 S6 h; R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 i0 t' A- g1 i$ k* Q2 g7 o/ A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ O* B4 |: u! o4 |0 @6 j9 a+ X$ q
# i7 C* d( s. R) |- A, t- G# r mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , Y) t) u8 k0 q. L6 O& N% B/ e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 U3 M d- X' I7 z% s7 a& J mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . c" o: R4 |& G, k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& R$ i& Q2 r* ~3 C% D- Y- Y. e. J9 X; j2 S3 g, M) m
CSR = 0x0000;
0 q L5 L8 W/ v) r INTC_INTMUX1 = 0x3d;1 G6 i/ X, W* d8 z( c
ISTP = (unsigned int)vectors;
1 G9 e, {/ k( w( V) o ICR = 0xFFF0;
+ `! w6 K0 L3 a& x7 I c IER |= 0x12; 7 g8 ?2 T# [ f$ v8 v: j
CSR |= 0x01; ! B) z$ p- a; h
+ K; m* Q1 X6 p7 _( p
! w6 g% Y, |# X9 e& J* _7 K
* L" e) `( H( Q6 }/ u+ Y( i6 d9 C, y还有就是两个输入输出函数:" H9 t) H, I8 D0 M) _. { h* D
void output_sample(Int32 out_data) t8 t+ f: } K: X8 _
{
* e Y+ c2 V4 @) y5 P5 r/ b' F AIC31_data.uint = out_data;
: k6 k1 ]: T1 _( @. \ MCASP1_XBUF5_32BIT = AIC31_data.uint;0 C* w& v) v6 C
}
- A& z( w9 C0 W0 `
: R5 x4 g9 z, V1 SInt32 input_sample(void)+ \+ ^/ S1 C/ D1 n
{
9 T8 C$ O. v4 R1 z: _ AIC31_data.uint = MCASP1_RBUF0_32BIT;
. h+ J, j* O% e return (AIC31_data.uint);3 J- u4 O8 N4 r. j; ~* ~. u
}- \/ ^& @' R# Z' W+ f4 Z
8 D5 o/ g( m& n) b; y2 g7 w- X
|
|