|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# B4 M) }* B1 t6 Z0 z, J! }- |
main文件: `7 i+ v5 ^! l C, N" C
interrupt void interrupt4(void) $ K- ^. R7 a, |2 w% Y! s+ M
{
4 V$ @: D5 S2 V0 N6 n Uint32 sample;
9 X. d( n1 o5 }6 D& ]8 ^# @( i
' _" f5 t @' D0 z: j1 h sample = input_sample(); // read L + R samples from ADC6 N3 ]# k5 L. `
output_sample(sample); // write L + R samples to DAC : ^! E& M& [* a* G) ^4 j! g; ^- H% F
return;
* E# N& U. ~# N; ]}; q) n% D2 [ e& O d; f
" y9 a$ C1 M* d" y% p
int main( void )* U: x1 x h8 c5 z/ l: S
{, ?* Q6 b) G* n! H; H
p/ U- N( D! M( ~ /* Initialize BSL */
! r. O# f5 {5 Z) \! a EVMC6747_init( );
" T; d6 N' @1 Q! i! ?% k /* Call evmc6747_intr function */
; |3 t& S' u. U7 @% s( R3 B aic3106_init( );
) E& c Z4 g$ D9 l$ M' W, W0 H while(1);! X6 Y5 H O+ l t. v% E; L" B2 n
}+ P3 y5 z# H/ {# q0 R9 D
; S2 G: E: |; I$ x# s- Q: D! l
. q4 ^: ]+ F/ x9 Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ ]0 F+ p9 r$ K
/* Initialize MCASP1 */
! ^# q# u( O) |2 Z# Z mcasp = &MCASP_MODULE_1;
5 y9 ?2 F: t7 S7 K mcasp->regs->GBLCTL = 0; // Reset
, \4 O, [) b7 r" G1 U. a' {2 v mcasp->regs->RGBLCTL = 0; // Reset RX% Y; o+ E. ^' e2 S
mcasp->regs->XGBLCTL = 0; // Reset TX& A& x( ~6 ^3 U
mcasp->regs->PWRDEMU = 1; // Free-running1 T' r- g) Q4 @% a
// configure McASP0 receive registers
1 r0 S8 D5 [3 Y: m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 H2 w+ J# c6 e4 y! [2 V8 j/ x# v
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( l; O$ t* r, T9 Y* @' Q M mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ @* I y: H1 r7 a' |
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ g5 s) c) T3 V& I/ _( W4 D9 M
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side). q* K& l, S' t
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
: Q1 G1 H" g& N* I# u* N8 p" s- d mcasp->regs->RINTCTL = 0x00000000; // Not used
! I$ k* D3 i0 K# N! F: J mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. z; S; f5 k: v% u. I2 Z
2 G5 `! l9 M' S7 M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% Z2 s/ [/ i- g" P! Q9 O$ r
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' l) R7 |4 n- J, g6 `/ Y' c
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( t5 ~ V: v- D6 f7 m6 S mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
A. T3 Z" v/ j mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 F! L/ t+ y. F) b* Z' d! w. s7 m6 F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 A8 E: _5 ~* T1 d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, x; Q) x9 J: g0 ^& }
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ h s' ~+ h" A6 G
, c% b4 {; N" R' u, k) p% [ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
# ~0 I- S, l* ^- m `6 I7 ?7 v mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT2 U4 l/ I3 R+ m6 ^. s% a/ @
mcasp->regs->PFUNC = 0; // All MCASPs+ f4 \, J" ~. X* L9 T1 w" Z
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 P. i* e& ?' W9 o0 l8 k2 ^* y0 v4 j# b5 H$ K, w2 M# y
mcasp->regs->DITCTL = 0x00000000; // Not used
7 _6 @; P4 R; R2 y9 l G mcasp->regs->DLBCTL = 0x00000000; // Not used
3 k* V$ x8 W8 w- P mcasp->regs->AMUTE = 0x00000000; // Not used" @/ L- I3 U: u! b( |2 f2 \
6 h3 R& T% w, l. F3 `0 i+ q/ E2 T/* Starting sections of the McASP*/
% z1 ~4 \7 E( l5 S mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. m1 S4 ^; t5 `: L- Q$ i5 F7 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( G) M5 i: a* }1 L) d( K' x
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . U/ G9 J/ W. Q8 F( }) i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ k0 d0 H! \; g
3 n0 O3 g# X- C* g& s8 Q mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# {4 i) G: K$ ^9 Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 c4 Q* c7 h: v- `* ~6 f+ a
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 M% G3 p/ _$ R/ D* J9 ?) Y! u d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! Q( v; b. S6 x& c/ ]
1 u! x. n1 X& ^0 ^" Z# u9 q mcasp->regs->XSTAT = 0x0000ffff;
r% k! ]8 |. A mcasp->regs->RSTAT = 0x0000ffff;
' c: m# N! k( Y2 T* L
" x6 S @0 C; S! m mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( E$ L" W, k, x$ ~# I. k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 H7 r. y+ E, k5 i. Y& A
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) R. Z$ U; K' p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% u& U) t& d- V8 A. t. h
8 U0 L& M# d: C/ w /* Write a 0, so that no underrun occurs after releasing the state machine */
5 z' J% G+ K4 d: X- w. L- n& ] mcasp->regs->XBUF5 = 0; I' X. _ ?" v, e# v
mcasp->regs->RBUF0 = 0;
0 P6 ]. p" F) `4 S5 T4 c- Q! }, Z1 A( _6 _& I2 x4 _9 p
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 Y- R0 D6 _2 L7 H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& K0 L$ L. |6 |2 s* I# w/ z8 N' i mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' P S* H& c# r6 d4 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 \7 U1 \( @5 D& I3 `' v) e5 l/ A
. {% ]% G# t7 E8 d mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( ^* x# g; B( w, ~ ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 F% S, a" r _% j mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ q1 h4 | O' _7 x/ G( Q5 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 l! @& Q; A9 F4 S6 e
8 t1 r6 i$ d9 V+ _9 `% c
CSR = 0x0000;! x! R$ o( E9 d/ m
INTC_INTMUX1 = 0x3d;4 p* @7 B5 ^+ T Y1 c. Q3 i- n
ISTP = (unsigned int)vectors;
$ _; G1 }" U% ?' q) F Z ICR = 0xFFF0;
* U* l( k8 N" }3 N: d) Y& G0 { IER |= 0x12; / v: X5 ~+ v/ Y0 n
CSR |= 0x01; , [& K% y; U+ A' e
/ p+ ] q* k: W- K
: ?" ^- Y7 c% I! z- k3 _9 w' o4 ]
' ~0 t7 J7 ?1 k还有就是两个输入输出函数:
* I; Q# d! z* z3 `* p5 O/ zvoid output_sample(Int32 out_data)
) n& w/ Y: M2 T- n9 v0 ^{
- t/ W, I. ^; v, Y5 E- F AIC31_data.uint = out_data; % z+ l! f+ x7 E* l4 y [- ?
MCASP1_XBUF5_32BIT = AIC31_data.uint;
. Q$ a1 g) j. F _. }}
. I0 P+ I" U- x) o
1 q- ]$ }, M0 n! y* v2 y- TInt32 input_sample(void)
$ \0 k' G0 Z" S; K{
# P" y1 u' u* ?* u/ T1 k2 H% k AIC31_data.uint = MCASP1_RBUF0_32BIT;
" E; |$ n2 R1 I4 r/ j6 t( L return (AIC31_data.uint); n) o! k3 i* @& n+ \
}1 Q9 C5 H/ s0 t
) s0 O6 Y4 V. ~0 p, s3 J, q/ o5 S
|
|