|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ X; d3 j- U O9 c N% fmain文件:
- d( E0 U. F; a" I# Zinterrupt void interrupt4(void)
9 |. R1 L. i" l8 n2 w{
n9 i8 v( K! h+ |5 G Uint32 sample;7 c: p, ~8 P8 D
3 S7 b' x: h4 e2 N6 h sample = input_sample(); // read L + R samples from ADC7 Y6 p+ K) f: Z& H1 {0 N; Q* H9 V
output_sample(sample); // write L + R samples to DAC & q5 _2 ]! Z- c( O% }! p
return;
9 E5 m3 z% r8 f}
& A- o. K: \) f% i! i8 ~7 F# ^( r; j: Q( P
int main( void )! L$ Y' h, }/ E9 f V* w) F }
{- H! i8 R, v7 w& l, s+ h: x
' d8 O- A/ `/ ~3 c. k. I( ]; ^
/* Initialize BSL */
( }( }, S, g$ D2 ?* _ EVMC6747_init( );8 r- \" k( ]% m* V7 q" s1 ?) I
/* Call evmc6747_intr function */
3 C. ]- O" I# S/ X6 | aic3106_init( );
- l- Z g" C) W/ J& r8 H# m while(1);
~; R+ i- T8 K$ T) e: k2 A: W4 D- c} n9 `# p3 E' l5 E/ `( O
1 \2 n5 \6 ^. c5 r) H* E) F
, A4 f5 q" l; S8 G3 p
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 R. u- a! L* ]# T$ u/* Initialize MCASP1 */
, F" n; I5 N% [+ A2 C4 O mcasp = &MCASP_MODULE_1;3 |! x3 B* F' q# x/ |- j+ f
mcasp->regs->GBLCTL = 0; // Reset
/ h6 B, ?. h' j mcasp->regs->RGBLCTL = 0; // Reset RX
% @8 X" P6 L7 c* V% x mcasp->regs->XGBLCTL = 0; // Reset TX+ J/ o: a6 L& ~1 B5 `/ g7 S; t( |
mcasp->regs->PWRDEMU = 1; // Free-running8 d' H, b9 @; G2 Y; \
// configure McASP0 receive registers
& D9 q$ L$ w! { T mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ N% T; K3 Q8 a* }2 \4 f
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. W6 g1 R2 l6 d8 \4 ] mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* R! x) v3 ~2 m2 K+ h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 a( L! n5 v6 q- c4 z mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" |( A: a7 d0 l* s) Q, n mcasp->regs->RTDM = 0x00000003; // Slots 0,14 d& q1 ~; V E+ V9 \$ N
mcasp->regs->RINTCTL = 0x00000000; // Not used
( d" h5 c3 S" w/ h8 Y' a5 l mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) r* t- `6 v# {* C5 R: [, z
) {$ f5 t6 Q8 x' Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; z( q6 {3 |% v9 e7 u/ [" c mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' ^5 \( V* h! K8 ^: h$ x mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* J* g! v4 C- ? C mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& [7 c8 s/ p5 Y$ y( i mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ a8 P) d/ M, r2 E& n, k mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ M5 U9 K# |, }. |4 w( \ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 M% v" f) o7 L: P1 |
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% Q1 U8 Z6 _( C7 ]+ x) A" n
, N1 m E8 X- V* _ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 j7 E [! S2 ~$ c9 b* E
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; \3 Z+ o3 I% U
mcasp->regs->PFUNC = 0; // All MCASPs+ r L" o. C1 d$ h9 ]% K9 L
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( T; \7 E% s: a" C/ v1 ^7 H
# g/ F% Y, s6 v9 s
mcasp->regs->DITCTL = 0x00000000; // Not used y, Z0 {* J3 w( [/ o
mcasp->regs->DLBCTL = 0x00000000; // Not used
1 f& ?6 U" I0 \3 p0 t7 s$ p& I mcasp->regs->AMUTE = 0x00000000; // Not used
. q7 c9 P! O: p3 s& h6 d9 Z1 {3 o1 i! z) c. ~/ ~: l) t
/* Starting sections of the McASP*/
' w! }) x3 S2 @$ S; e1 w9 u mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 z$ E, z6 @! p; f4 p7 l# b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. }, Q1 ?. H& h( `( c2 ?; } mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. {8 E E b" W3 Z4 S" ^3 t' y5 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% @% |) O O! i( k7 q; [! Z( A
9 v; o, n8 N: U1 S mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# o7 ?# @" T) J+ i3 ?8 c+ c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 u/ g: d4 [' F& J. Y% E6 j mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% g- s% z9 l; Y: k$ [3 B1 ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) f3 U8 T4 V# p7 T" r: n" y/ d: p; ]; v7 z3 ` G
mcasp->regs->XSTAT = 0x0000ffff;
0 I, d1 R ]# s9 @% _( ] mcasp->regs->RSTAT = 0x0000ffff; 4 c, ~1 w5 H4 @+ N& I8 t
% k, ]6 t1 h% P. o% o9 W8 k1 | mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 p( ~2 w5 s- L5 D1 v1 Z3 d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 C0 Y7 z1 I% |7 l6 W1 S7 D x mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# R# s1 S0 z. ^1 b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# j) j, p4 g0 O
, _: o- Y4 \3 M! D. r
/* Write a 0, so that no underrun occurs after releasing the state machine */- h' D* j w; M5 ~$ \& ^( b
mcasp->regs->XBUF5 = 0;8 G4 R7 m# ^" H: i* R: q
mcasp->regs->RBUF0 = 0;
+ P" x4 a. o1 a! w
2 ?; x! {! m9 K7 W' } mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 N M) p- ~7 w# `4 n9 V7 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' w& U4 T9 w. d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ d ~% Z, b2 J' c# {0 x3 a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); Z/ x, \4 k( g! \- n2 g4 [
5 H+ f; k% j3 g) ]- a; y* d2 ?
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ z& b8 G/ D' b9 {' b* K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" e# N# s& F- J9 E
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 T7 V4 K9 E$ a G/ h. r& o1 g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! B+ J- K6 l8 z2 I
# p2 v1 U2 h% @# y CSR = 0x0000;, ^) [6 F; W7 M3 N9 _5 N9 G% M+ p# |) b
INTC_INTMUX1 = 0x3d;% H3 G' h0 P* u( g1 T
ISTP = (unsigned int)vectors;8 e/ ^: g0 [. y* I4 |+ R4 y
ICR = 0xFFF0; 6 {6 N- Y/ y' ^$ Y
IER |= 0x12;
7 {8 y" E% V5 d1 j. b% S* _0 l CSR |= 0x01; , Q1 |: A6 {: y
* r9 X8 W1 @4 J
( y2 f. }' E- P* c# j' ~
) j! O" j% p' h: y: D4 t还有就是两个输入输出函数:; L. X: F8 O" r3 |: P( ~
void output_sample(Int32 out_data)" U- E' H& w$ D7 n( {! x' K9 z
{
. S- @, y8 k% D- x! ~1 H AIC31_data.uint = out_data; # H% n& o0 S+ O& J4 c* A' m
MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 Q! Y1 A5 u4 X/ G$ u: f( \}1 T r8 g: I$ [0 A
. S; Y9 n/ `# i* ]" D" g6 O
Int32 input_sample(void)
- X4 l) D+ a) S# E{
3 l# E+ G$ e$ J2 B) t AIC31_data.uint = MCASP1_RBUF0_32BIT;& t/ K, ?5 y6 _; G0 v
return (AIC31_data.uint);
; m! T2 E5 C M, j+ S}
: }4 ~ q- J% P# k
, ~- m5 Y- ^0 }5 |7 \/ n |
|