|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 c8 Y) q6 }" N' n: Z0 m# P1 ^/ P2 Vmain文件:
8 V2 J, `; ]- e$ w# dinterrupt void interrupt4(void) - |4 |6 Q' r2 k, Q! p
{
6 L5 `) }5 K' ^! N0 x Uint32 sample;; Q2 l, Z, r7 }9 T) t. s# C- @, v
4 h; C4 _ }1 L9 w* i6 c
sample = input_sample(); // read L + R samples from ADC3 W! I7 d6 `0 W Z! I3 e
output_sample(sample); // write L + R samples to DAC
+ @3 E& K4 z6 `: h& D5 d7 T return;
9 r( _8 W3 i# k}, t; u6 Q9 T0 d9 T( O+ G
# G( Z4 \: A' Nint main( void )2 D# A( d) A7 ?! u9 U4 d% t
{
6 f4 P: m& `: c# H
) n% ]+ _) z4 ] /* Initialize BSL */
. a* ~% d0 d/ D/ w EVMC6747_init( );
1 I9 `' s% C8 v3 l# o: q /* Call evmc6747_intr function */8 [2 r3 i9 j7 P8 {' A7 a
aic3106_init( );2 G$ i6 a1 B0 x8 i7 `- R
while(1);
+ a* e) m$ e g+ p- w' j, l1 a1 z$ M: ^}7 Y9 m* w$ k8 V- d P& c _
1 r- X" Z/ ], y; N4 u& c
" D4 [7 p! V( s; H/ Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 N, X9 g: N' d; o. w7 ~3 S! ?& Q/* Initialize MCASP1 */
6 ^6 {5 s/ n, L v4 V mcasp = &MCASP_MODULE_1;
% k" T& n3 r& [0 q5 F8 F0 D4 J0 ? mcasp->regs->GBLCTL = 0; // Reset
4 G0 F- [0 W! L0 i, [! m mcasp->regs->RGBLCTL = 0; // Reset RX# ?/ l; C! z( @0 ~0 w0 C
mcasp->regs->XGBLCTL = 0; // Reset TX
6 J V- ?. x/ `/ C( T) q4 V mcasp->regs->PWRDEMU = 1; // Free-running; d1 |% ^% S3 s2 X) B3 ?
// configure McASP0 receive registers
+ @4 K9 V4 P& }$ R8 ?6 R. g mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" o1 I) \ U. T- B( ] mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" y) j/ ^. h$ D* Z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! ~" E; k. s# d" o6 G
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 k% t4 B" r/ A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side); I0 E& f( a& u; E+ {
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 w7 j& V+ ]: d( d2 P) t
mcasp->regs->RINTCTL = 0x00000000; // Not used
& d( _, V/ Z' z5 G* K mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ s! \: e& B1 a3 a
4 l9 x) w2 O" W9 {' D" B mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 m% j% i, K! w6 Z3 ?/ W
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ @* e J0 @; h# ^. C# i
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- {* K% e& l# X- k mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ W) O' n' ?) B! |8 z- z% \1 x mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 y& N: T9 ^' Q6 d
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' Q u# Z: h R- C1 R4 |4 t mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit/ }- x* E0 ^ E4 w: T
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' e4 w. a* T9 E" E
$ F0 O( J$ x0 d) N, \& [6 I- E9 m
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ S. x/ W1 x5 a mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: W5 ^$ D1 H! [ mcasp->regs->PFUNC = 0; // All MCASPs
% m2 g: \% S N mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: L+ @) \* s k" i
2 f5 d# A/ w: p! l mcasp->regs->DITCTL = 0x00000000; // Not used0 D$ I" s' w; V5 j/ K/ h
mcasp->regs->DLBCTL = 0x00000000; // Not used9 K! }+ |/ V! k; N4 z- L# W5 L" Y
mcasp->regs->AMUTE = 0x00000000; // Not used
* g9 I& c# L! o/ a0 Z/ F! D
, m, H5 o+ ^" N) l5 p2 d7 e/* Starting sections of the McASP*/
6 i( {. C2 B6 Z# s( r mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; V; a2 \. r% | w R/ i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& t5 m" t3 Y+ j6 [1 c) Z mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : A1 K4 d, Z+ A+ M1 b0 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 y0 Y; g2 Q1 l. a! A) k5 F! s; Y5 ]8 Z4 ]7 u% m' K+ m# c% A" V8 z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) X8 M9 L8 z' |7 G/ j5 k/ g. {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* I% t: m% m6 i! |
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 Q# _: M# G* I* s0 S' \: t8 g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& O; J5 n' L1 X6 c$ p7 x4 g! l6 j5 Z# U& e
mcasp->regs->XSTAT = 0x0000ffff; 9 g7 `9 U! j3 ^6 S
mcasp->regs->RSTAT = 0x0000ffff;
% C1 ]) H7 I Y- j6 i5 C: y" w' `, D. L
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' V% z( Q# |4 P9 j9 ~- k6 \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 e. p- y% X! U2 F' h/ v
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; ]. `, b9 [$ g8 M1 S# Q" [2 @$ u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ v ^2 z( d6 [. T5 q0 Q6 c% E, z9 D* d! d
/* Write a 0, so that no underrun occurs after releasing the state machine */
, e1 A ^5 v, r* p3 H mcasp->regs->XBUF5 = 0;
8 G/ R5 `2 X) d( a; P- _ n mcasp->regs->RBUF0 = 0;
! B) q. e! h6 Y/ M! i
T+ n5 f- y1 w! }: `, s, b mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( a y |( U! }7 r" o/ W! p }3 Z4 g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' {1 v* P. ?* P. A0 u
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 t! c9 l, X: X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ L/ b; o @, B9 B+ J! c1 D
$ p. n4 `& |' n S$ _$ L& g mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 s9 a/ s2 E0 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) K6 p8 T/ Y6 m' p
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * ]) ^0 \$ M2 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% w2 H8 [8 V! j3 }. N. c9 t7 o/ S5 U3 k# u9 |5 J, y
CSR = 0x0000;) ]# Y% t( m* ?! T& ?/ U
INTC_INTMUX1 = 0x3d;
8 L6 v4 l- g& S& U ISTP = (unsigned int)vectors;1 e1 [9 L" s8 n! j1 H/ ?
ICR = 0xFFF0;
; m0 j2 P% l7 x3 d! l; T IER |= 0x12; $ I" S5 V% y# r( P$ f
CSR |= 0x01; ; l+ q( a; S7 q, `
: {1 E. W. R! g7 Z9 A3 D! ]; c4 _/ O1 _
# w" L8 u5 H& w: {1 Q还有就是两个输入输出函数:
$ u) r( X8 Z7 R' Y* V0 E: Dvoid output_sample(Int32 out_data)
& @" Z, m- F+ A) m7 a- K{
1 A/ c* R' z' s AIC31_data.uint = out_data;
( J/ B' p$ y- _; p2 E$ @ MCASP1_XBUF5_32BIT = AIC31_data.uint; [" ~ A! n& j: y$ _" L M# ?( C4 _
}* c( T* z* N9 m: [ u
9 A! M% U3 s4 a$ u2 M# BInt32 input_sample(void)1 d( i+ l) D1 E
{ ( r& ?# N* u! F/ j4 y* a" h
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 p( x* o7 [+ Q* t return (AIC31_data.uint);( X" A A8 x6 J1 x+ k9 y( x- e' g
}1 N+ i" T X! g3 y6 k5 h4 P) k
0 P, \! Y: M4 v: ?9 R3 Q; s$ o
|
|