|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* A4 o. g2 {- ?main文件:
; j" X6 U9 Y {. y1 Qinterrupt void interrupt4(void)
. U" a' E* I. }0 J) l' ^{- P9 }3 I4 }! E$ z3 | W
Uint32 sample;
* S8 V& P f1 x6 ~) S1 ?1 b% D$ b+ R6 w5 r& Q
sample = input_sample(); // read L + R samples from ADC
0 D0 b8 F' n$ M1 c2 }7 R output_sample(sample); // write L + R samples to DAC 9 F2 x9 W- G V* L/ z" y$ {! H
return;
6 X5 E( f$ R2 R1 {3 ]}4 O" C! i% d0 S8 e! D A
$ E: v; R$ G2 @, _) Kint main( void )
% R+ A# v, \4 O2 g( Q6 `{( ?+ Q+ h5 q0 v0 d$ a( Q# f4 z
0 E/ b- y: Y1 N% [- u /* Initialize BSL */
6 f) _/ t: U" {. T" r( P EVMC6747_init( );
, D4 E* B6 Z1 Q/ ^) K5 h5 ^ /* Call evmc6747_intr function */$ U5 G; O) [3 b* B: A
aic3106_init( );
( R h+ ?) h) z. `# L- B+ h; ], Q while(1);
$ o- x2 a t- V( `. z}
( Q2 k5 F6 q; @
7 k' ]1 B8 v! t8 c0 d/ B
: T* {6 ?7 c3 y' s% oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 H9 a" b9 v" m! ]$ `6 T: W/* Initialize MCASP1 */( F) c# A$ M: y) j
mcasp = &MCASP_MODULE_1;, f0 f$ D% \& N6 g
mcasp->regs->GBLCTL = 0; // Reset% C- f; I; z8 I' x5 Z5 Q0 k% E1 ]
mcasp->regs->RGBLCTL = 0; // Reset RX% }; X" J0 @# ?, w- _
mcasp->regs->XGBLCTL = 0; // Reset TX
$ \ @; R' j7 f" A$ c& f. A! {' u; M mcasp->regs->PWRDEMU = 1; // Free-running! g5 M5 E9 p& D1 `' v# R* }
// configure McASP0 receive registers1 e5 n' x% R8 T+ d
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: r$ l1 M ?9 \& | mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% ]1 c! I, {3 U) [3 m7 K: _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ C9 a! B9 w0 j& R) i1 n2 T. l mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 d( `1 J( p3 \3 C9 ]7 f8 b' Y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 _- d; q" T w mcasp->regs->RTDM = 0x00000003; // Slots 0,1; n2 ]3 E) K, p
mcasp->regs->RINTCTL = 0x00000000; // Not used
; _# U* M- g* P$ p* Z# a6 R mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 H4 n, v- ^" @8 a9 V7 h8 w
p5 z, L- o+ Q: W% O
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. S* m, A) N: K6 Z; h: q( i mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; R) O7 ?% H* j+ z. ~ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 C* [4 b( m9 X: J2 ], o
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; G/ M, Q0 J3 t; K0 S mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; i7 j) R3 J" [" ?' R4 e
mcasp->regs->XTDM = 0x00000003; // Slots 0,15 Q! Y) ^& R/ K8 o3 v" b l, Y( j
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 _% W: F& t, q3 M, `* b
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! ` T# k& I4 S0 p
3 x" R9 x2 D# y& M4 n. h7 o mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 s7 N+ \$ _; S) G mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT: W7 B' K9 Q* l1 c4 h
mcasp->regs->PFUNC = 0; // All MCASPs& f( o$ g. h- _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# ]; U4 s, D2 n6 l* Y E5 B
' }3 G" F9 |) O D- i
mcasp->regs->DITCTL = 0x00000000; // Not used& r9 J' _0 Z: l. e* ?0 j/ F2 G
mcasp->regs->DLBCTL = 0x00000000; // Not used
+ W0 d& v5 Z+ B. r6 d. N mcasp->regs->AMUTE = 0x00000000; // Not used
/ \" ?8 z, i' E6 [7 d4 K9 |; q y: f8 M9 h
/* Starting sections of the McASP*/
5 }# D3 q7 m" T$ y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" J& ^; F+ z- u% G) J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 o% M3 s: z# O) o4 g mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! D5 l3 f1 r: k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 U7 t- [& J, W0 f$ ~0 u8 Z8 D
( w% ]0 R+ e+ H
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! n/ ~% E6 A' h# w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 v9 Q8 t" A* p/ f2 ^" @ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; N! V2 o5 V4 m6 l9 _* P' l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 d2 @+ x N, f- ?/ A7 c+ k9 J: Q/ v4 e' j9 g
mcasp->regs->XSTAT = 0x0000ffff;
% W( M3 s$ G: k( p mcasp->regs->RSTAT = 0x0000ffff;
2 A0 S1 z l/ V% `# u" \4 r7 W' F
2 B' q! q% d$ r; I) p7 Q- G! Y mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 l3 k8 {& G, `* o) v3 S# ~0 R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ f% e- S [4 i2 E. y* C3 C$ V1 C8 E mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 @! }' \$ Q8 q# B' p4 [2 W0 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' n6 B$ K. k \! Q0 @ x
9 @2 U" R% J \ /* Write a 0, so that no underrun occurs after releasing the state machine */
8 W% P- f2 I& A$ a$ [1 w- w& L mcasp->regs->XBUF5 = 0;* h# u( d K6 }3 }/ D" G
mcasp->regs->RBUF0 = 0;, d3 D0 I! m3 A
: n" Z+ d8 O h2 E) W- D9 G6 h0 m mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ ^( f; s8 O0 T' a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ C, V* s* J0 k
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! f6 g3 i3 D9 I, _* @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% x" p H1 ^7 w0 m" V& S4 s7 N9 _& G" ~
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( _. z1 Y8 Q' R+ v4 w; m1 y4 S7 f5 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ L- @* r. n( e$ C+ J C. r: z) s; g' P
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # @( l" a1 n1 K, N: S( j2 j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 _ \, O5 F0 u
! j7 o# u/ y1 s9 c; X+ ^ CSR = 0x0000;* F! d+ A! g( n+ m" X, B
INTC_INTMUX1 = 0x3d;* Z; |9 ~7 R- r( f
ISTP = (unsigned int)vectors;0 z9 E. H! ]6 j. [
ICR = 0xFFF0;
( E- L& |) @; {8 q! b* D" W& u" A IER |= 0x12;
; U, P: C' h3 s& o& c! x0 | CSR |= 0x01; , O+ Z% }$ k, w% d e
% V2 u. w3 s1 G Z e' v
3 q3 J' M, x. b8 u; O% N2 N2 n
% P+ Y C) }& ~3 v# {: s
还有就是两个输入输出函数:6 ~! r6 _2 Z3 f9 T
void output_sample(Int32 out_data)! z) q/ t9 |4 M! t
{
5 d1 k5 p: l3 @8 o! ^ q6 x5 v AIC31_data.uint = out_data;
' k7 H! {" J. O' ? MCASP1_XBUF5_32BIT = AIC31_data.uint;
; f' S- k2 d6 j4 _- ]" V: k3 x/ z}6 [" L7 N8 h5 R7 n5 A) s; D2 U
: v' ?' `2 L6 C& a- |Int32 input_sample(void)( [8 {) k5 x4 u9 z! s
{
% Y A. e3 K' `# R! m, g1 W AIC31_data.uint = MCASP1_RBUF0_32BIT;
- X0 v. W+ P; l return (AIC31_data.uint);4 ^; _9 [7 f! f/ T0 I
}: a2 ^5 x9 r) o) O
% T9 k" b; k. h' d. y) x |
|