|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) h3 B2 ~$ A* N" X" E& N3 k5 d0 A
main文件:, _" \2 w+ j9 S3 P$ _
interrupt void interrupt4(void) ; X. E6 d& U, B/ }" Q) m
{
E! g/ r0 X+ V: w+ w Uint32 sample;& X/ @; [0 [' d0 Y6 \
# i$ J: D0 v6 e5 ~5 ~' l sample = input_sample(); // read L + R samples from ADC& r* ]. J8 }& P1 h4 u# t C
output_sample(sample); // write L + R samples to DAC / t6 W4 r% Y4 R+ ]2 ^
return;8 x; [; U$ v- S' @( E- u5 F
}; ^$ L- A9 \7 m- E1 f, y
6 P8 V$ s4 l5 {: O, @7 J& b1 Hint main( void )
4 `2 G3 }0 @; ?! X" [{: T& l$ N( A: n1 y1 m# U! E
$ y! Y* S X0 d6 V: ] /* Initialize BSL */
_1 W' I# @, y# f, K6 V EVMC6747_init( );, v* T O# d# z: G9 Z0 A" _
/* Call evmc6747_intr function */
* A% G7 Z0 e* h3 N! o: H: e' m6 E aic3106_init( );
% `% p& k8 \( v while(1);. Y h' c0 n! Q3 n
}
# ~: Z7 s, k7 c" v. [; _1 x% B+ m' F' U/ ~. R
: |$ |4 X+ ^8 J# w; @9 F! a+ F& y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 r5 P1 D7 r' x7 G# `; _; I% `
/* Initialize MCASP1 */
/ G6 F- D o5 d) Z! D4 _$ w5 o mcasp = &MCASP_MODULE_1;( a. C) I$ v$ Z8 F" R, K
mcasp->regs->GBLCTL = 0; // Reset; _2 x; n# Z; Q2 _; p$ {& A
mcasp->regs->RGBLCTL = 0; // Reset RX
' J. n' I: G0 t1 U5 P& a! X mcasp->regs->XGBLCTL = 0; // Reset TX+ F. S* V$ J+ S- T0 w3 D
mcasp->regs->PWRDEMU = 1; // Free-running
) Q/ v/ m" [! s // configure McASP0 receive registers
( f! t3 _# I' Y& z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
) v: y- G8 i ]9 R mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 F! d* R3 x2 [( @& r* n4 h# H mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* W6 E) \* d& ^1 r5 Q. P' Q
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! i. i5 G, q. ~1 v2 ]
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ ?' l2 i% E6 s6 p
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 u/ W3 {, B' q% t* I2 u0 }
mcasp->regs->RINTCTL = 0x00000000; // Not used0 s8 |( Q: C0 }* I+ Q+ S% s$ X
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 `! J6 H0 p' W m% |
4 S; \5 z" l" j1 `& L- D8 Q# S0 V mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 O- M: B3 @6 z* B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! H+ _2 W4 y; x3 c" E( |
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* c/ j. K9 j" ~) ]( Y1 i mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, v( S! Q" e; _% A' z1 i: z! _ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, Y& O( @. Y5 {# N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
4 G8 {2 K- q( @8 e1 R6 x mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) R+ P, W' T B4 n, o mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" P+ l. I4 ]& T0 n
' s4 b7 ` q* H- l3 Q& B# h mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 X: T& w# t- a) m
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# @* a2 n2 a+ ~- ^# J0 q
mcasp->regs->PFUNC = 0; // All MCASPs/ |* P' [# N5 r! r6 ^. h
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' B) l" [$ h. u" {: l: Z" C: Z5 L- ~
; a) n9 U: z" ] X3 \ K mcasp->regs->DITCTL = 0x00000000; // Not used
@' W# T- t4 A; |' g8 E mcasp->regs->DLBCTL = 0x00000000; // Not used( J6 N2 U5 z8 B9 b5 e
mcasp->regs->AMUTE = 0x00000000; // Not used
0 g- E: f" L8 A
2 }- l' H- E* i8 T5 U: j8 P/* Starting sections of the McASP*/: b: b" }1 L2 {8 p# G# p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 g& n, j3 T# p7 p# v$ E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
: f( L, x( R# Z8 ~& ^% t9 ~# d mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : Q2 Q, F3 V/ d4 y j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) o1 ]+ t/ {7 O0 T' B' F M6 B- }. [, N& N4 A1 _2 i
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 a( u W) ~% t" o4 A4 j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 G& c9 B7 t4 J4 K1 a1 [ C mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 v) W3 i( C3 A* Y% q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 V- B; v" B+ E9 k% Q" ^' `
2 {- n; f# i: E9 e4 q8 P4 K) }# ^
mcasp->regs->XSTAT = 0x0000ffff; 3 Q: z$ F( f' y" c3 I8 P: L0 ~
mcasp->regs->RSTAT = 0x0000ffff; $ A0 Y. C$ o- k/ q/ P0 e
; r+ c& G4 l- G( a' {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON; M9 A5 L! ^' i, ?* _9 c% E* d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
{5 R2 z/ B6 [5 c6 c+ o; I mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* z9 S, K( L6 v! H' K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 W, L7 f5 s: X5 c o0 [- ~; ]6 }) ], g" ?, [. O
/* Write a 0, so that no underrun occurs after releasing the state machine */
- t0 e( N8 [ W6 D4 b6 v- b mcasp->regs->XBUF5 = 0;
* r- {2 i7 C2 r8 y9 a, a mcasp->regs->RBUF0 = 0;
0 W$ L8 m0 i6 Z4 F) Z. ^1 ~8 m! @ a
6 u* V; Q2 a, q! L- G& X, d; w mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. v$ i5 ^9 c& `7 d! a% [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
M2 I: W( T' k" {" {) A mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 J& a1 K+ E! |. ]3 q1 d5 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ U0 }) e) b" A5 _) T
* b5 f- Y$ N9 @ h, M! u
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 X+ Q, t0 t1 _8 Y, Q0 |/ L5 ]9 r K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' p" z! M4 z" N2 @& X( M
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. F: [9 D3 s; m5 H( C% g4 q! Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% U/ c D+ Z1 P( o9 z) `7 ^) ~4 E; K- {6 X! l$ z0 h# Z& R8 G
CSR = 0x0000;
' E$ a5 A: M: d K# m2 Y: m, ` INTC_INTMUX1 = 0x3d;! _+ g3 @8 W8 t# e* m9 O
ISTP = (unsigned int)vectors;( z M8 [. [2 B2 F$ W: ^6 |
ICR = 0xFFF0;
7 a0 b8 J1 N b6 @) _& l" t IER |= 0x12; / {1 \% q; W \, h7 O2 r2 u
CSR |= 0x01;
* O6 E' Q7 Q0 \" K( u6 k* m. I6 [1 J3 L* r ?4 ]
( z+ L7 u( e9 }( X* O; u& ^! d, X2 V3 m: Y& w
还有就是两个输入输出函数:
* Y5 {' F/ J, m4 Rvoid output_sample(Int32 out_data)
9 ^' S1 s8 L* u( Q! k% g{
. X9 s/ s) w. Y) d9 Z7 B) b AIC31_data.uint = out_data;
4 D. R% f: Y6 @6 w2 c MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 t6 `' g+ j; ^/ d7 j$ d}
. h: ^/ C% E: d. {0 s
4 s6 Y# A$ s) D6 a- zInt32 input_sample(void)2 |/ O5 D; @) |1 r: d2 M
{
) \8 t( p* l/ k: B8 E8 b8 E AIC31_data.uint = MCASP1_RBUF0_32BIT;* ?2 B) _& o: U6 E- m' A
return (AIC31_data.uint);! A1 T1 O: F; O; z% ~; U9 k" R1 z
}
: X2 u0 B0 _- a1 s- T1 `- K
) H8 x# f. r% y8 y+ u |
|