|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 ]6 I1 G9 a* m% K6 K5 T9 O
main文件:
5 s2 I; ?$ x7 c7 t$ winterrupt void interrupt4(void)
4 D* p7 U, M: t S# X3 V) U{
" V8 r; H5 Q+ f3 e- i. p; N1 | Uint32 sample;
4 J- Y/ @8 `7 \# p/ C
3 F$ P2 l5 D u# m' Y sample = input_sample(); // read L + R samples from ADC
5 Q. L- J. V% @; H' o output_sample(sample); // write L + R samples to DAC
7 r. \: p/ F* C& K1 \+ ?2 E return;
. Q; g4 w& `- k9 N) u" `}) F4 G ?5 W+ K
& S. ^( x7 ]" `2 Y" \5 Oint main( void )
9 ?& |, v; g. E- n8 `{
/ [' ]* \3 e/ W3 A% H: D& B
# Q$ { D( ]+ Y- c6 D) ? m: L /* Initialize BSL */" E& o+ a/ C9 W6 E
EVMC6747_init( );6 f# e/ O3 ?) _/ v! J5 l# y' u
/* Call evmc6747_intr function */
2 r5 u9 Q, h& R2 C aic3106_init( );
5 X. N* e7 m- x while(1);
! y* `; s2 l. i* p+ Q) U) R2 j}5 q4 v& `: k" ]9 ^5 Z7 U
& j. {% n, ]! l, ^
1 d5 y" E+ a2 l- U+ N5 u4 ~( Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 _' a. c% x- E, v) x8 R& z/* Initialize MCASP1 */
1 H: `2 i6 ^3 H$ T, z' B mcasp = &MCASP_MODULE_1;
. t% V5 R$ O4 W7 n% d3 ]* v+ }! t mcasp->regs->GBLCTL = 0; // Reset
4 N3 `7 n1 F, j7 o' i4 E mcasp->regs->RGBLCTL = 0; // Reset RX
! H) M$ D9 k8 a; z5 x) a$ N t/ M mcasp->regs->XGBLCTL = 0; // Reset TX5 i8 t) T$ O$ e2 L7 I2 B
mcasp->regs->PWRDEMU = 1; // Free-running
% b8 e' R+ \. ?8 z$ D5 w // configure McASP0 receive registers
( m2 p" s4 g+ w# D- V: R, u s; j mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, w! ]- c$ z# E& D/ k, j2 N9 z: B) I
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# ]' d+ j. {7 {( P+ G" B, F mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( c6 U3 ? i5 ~0 |$ Y mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- [! O+ m! N' U/ |: G0 E+ I! j mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
6 i- ]1 A& \, r6 H8 t2 [( U$ A' \ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 |, D+ ?+ _/ v5 D+ Y6 [$ ~- ]# ] mcasp->regs->RINTCTL = 0x00000000; // Not used
8 H/ U9 |9 ~( D, C mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( e, c* L5 a E) {; g( \
, D/ [2 @% a* T' t& p; `; w mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& W6 p1 n+ l$ Q) S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ y6 q) d4 R% `& B3 s6 s% ~ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! A0 W9 i+ a* N5 N$ E: b
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 ?6 I2 I" h- L mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! }' j% G9 |9 S* q mcasp->regs->XTDM = 0x00000003; // Slots 0,18 |6 X, X. Q6 L! |
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, p7 F; ]# y# m9 p mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; V! x* m. q( S9 c+ F2 e5 H' c- x
8 z v' F( R8 T7 l& V; W
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) |/ _! D% U4 U# \
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* H& w5 l3 k3 o% Z2 A' F mcasp->regs->PFUNC = 0; // All MCASPs: {3 P9 W4 M! A
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ f: e6 O5 `' h' }
; l& s+ A" U" H7 N( K
mcasp->regs->DITCTL = 0x00000000; // Not used
z: \- k' A0 b( b, R mcasp->regs->DLBCTL = 0x00000000; // Not used( s; t: n" v" e% T. E4 O2 o% {
mcasp->regs->AMUTE = 0x00000000; // Not used
* T5 f1 C& \# K0 l& r' R9 y! k$ A1 I J: ?, ^0 d
/* Starting sections of the McASP*/9 J1 L n6 r3 m. R/ i/ @
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 \& t5 }6 I' X' m& t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; H8 n8 N' C. A; R* G9 S+ t
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: u0 ~& x9 q( A) k# R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# l& L& y9 K; E
5 W, J, h1 ], o" | mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) P" p, k+ L! {1 f/ o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
C2 [( w* r% A9 } mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - v6 p8 ~4 N- T4 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 ^1 k6 c+ D4 z5 C* |1 L- [0 F3 n" b2 b. @6 f4 S% Z
mcasp->regs->XSTAT = 0x0000ffff; 7 x3 w6 e- V) Q* O
mcasp->regs->RSTAT = 0x0000ffff; ) @$ \0 G4 }% ?# U( y
0 T" i Q3 C9 ?2 }, m+ Z9 \4 W mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ Q# @# P' G$ g8 f3 a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 h9 e+ W. \, w3 S. y- N1 i9 W
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 c0 S/ D; q4 P& _' i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; F# R! J2 r; n H/ N0 s7 n
9 S( f! p/ l, H0 k
/* Write a 0, so that no underrun occurs after releasing the state machine */7 l- C( d" N- L6 _8 O5 x
mcasp->regs->XBUF5 = 0;
' A3 e* A: m( N/ [! u l1 b U mcasp->regs->RBUF0 = 0;% _6 N% k$ z, H7 M) O
* X, l2 g4 b' `! E mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 ?- Z% ?4 @, ]+ i. e3 m5 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- Q1 G2 ^& _/ B9 W) c( e
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * {; g: K0 ~. c9 j$ v7 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: ?6 ]; T; h/ k9 E" Z
, F3 k/ }4 X c. _" q R# P' h mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 j& G Q8 k; m2 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 H# ]# M' G' X/ @" x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) B) Q% ]* Q' S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) q1 u- o( s5 A0 d8 u
9 n7 V; ?. O& ?1 }/ B( b x$ ^ CSR = 0x0000;7 U) _$ d" T8 a: L9 W# ?+ F1 R: k2 v9 @
INTC_INTMUX1 = 0x3d;) s' b0 Q, X1 B# {/ x
ISTP = (unsigned int)vectors;
+ u5 K9 S. \2 a1 B* u# l ICR = 0xFFF0;
6 ~1 V4 h2 m. V j5 r0 f6 Z IER |= 0x12; " Q6 O% j5 c4 u. c) }1 x* Y
CSR |= 0x01;
: `5 `5 S" N; X8 {1 N7 @/ A4 T3 n I
7 r s+ i5 U, V8 \& i1 X* ? F/ a% a
7 n* e- K/ b! w! e" T还有就是两个输入输出函数:/ m5 ^4 w- r# `
void output_sample(Int32 out_data)1 v4 p* p- x/ N v* C# B* [& r+ G6 b
{
" L5 a0 G. Q! T P2 y AIC31_data.uint = out_data; " L- P, t, T7 g. b
MCASP1_XBUF5_32BIT = AIC31_data.uint;: f) @3 O# F4 X' w8 n, h
} W" X/ H9 @5 ~4 ]1 t& ?$ [
- [1 X7 A+ F9 e: b) a+ y. ^# z: FInt32 input_sample(void)! K( K# {2 t1 Y& j( z
{
2 G0 |1 u' X9 ^) ~/ K& @7 B5 n AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ m2 [8 h, y- o7 `9 i) `9 ~5 h return (AIC31_data.uint);9 e W( p1 U+ U4 @
}5 G# \- W3 U8 |
) v( u6 q5 _, |* Y% ?
|
|