|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) h. M+ x: J$ g
main文件:
, \& Z: Y9 Y0 t Uinterrupt void interrupt4(void) + ^, l7 [: {3 q, c
{5 U, ?7 ?) X" ]3 y7 C
Uint32 sample;- h! H* K4 v6 b
8 \2 N7 H9 q1 m) w
sample = input_sample(); // read L + R samples from ADC
9 q3 G" r4 M& b# o1 U2 O output_sample(sample); // write L + R samples to DAC
* N! W+ v% n$ W( S2 G" r return;
" W# `4 ]: m+ Q) S+ v}0 [3 X4 N+ L8 U# I" U
4 |0 D4 |! M9 o9 F+ qint main( void )* M. c2 m& U2 ?3 `
{
9 E3 K7 n/ ?9 `$ [$ Z: f0 }# t6 P3 P0 o' F% k" o9 z
/* Initialize BSL */
6 Z( ]+ z5 ~9 y* u/ f" N EVMC6747_init( );( M* y+ m# o9 u, V# b4 s) z# I2 p* `' ~
/* Call evmc6747_intr function */
; n& }3 c0 @+ M5 v `7 C aic3106_init( );, K0 s0 s6 c& ~8 j( c m/ j' c
while(1);
* V) T2 \/ Z! f& ^' t! |$ f}
+ H9 q. m# }0 d! x5 v% X, r5 a" J( r
8 V/ u+ \8 B$ y! F; u2 }. z
7 `8 F1 s& o3 s- X# maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 D* Q5 s. t+ i4 o
/* Initialize MCASP1 */, m% N T1 b# J
mcasp = &MCASP_MODULE_1;) ^/ `; R/ f0 F+ ]
mcasp->regs->GBLCTL = 0; // Reset8 |# S% t& O M( g* d, e+ i
mcasp->regs->RGBLCTL = 0; // Reset RX5 v4 a Z+ {3 z$ J" u$ Y
mcasp->regs->XGBLCTL = 0; // Reset TX5 _9 M& E" s. G, {
mcasp->regs->PWRDEMU = 1; // Free-running
; E6 o' g7 K2 o( Z. Q( \ // configure McASP0 receive registers$ t) u$ c9 x3 |- s; k; t8 w
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
6 T9 \- F1 q0 I1 m. m mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
m% |% a- E* Y9 } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 ~) i; A! R& J+ ~+ z7 `" s6 w mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 e+ f. h) Z& c/ d7 V6 e- l
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ b6 r$ U* f0 D; u2 ?
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
0 m7 B* q# {. O: m7 ?9 _( ~/ J; @8 C mcasp->regs->RINTCTL = 0x00000000; // Not used: i9 P1 W, ?0 \2 I( d
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" s2 z4 b ?+ u
1 X7 D8 i0 M1 c8 X mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 C3 k6 m: ~( [8 |2 V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 H9 R, f; I; w P( M* `
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 S, z3 u1 s. l& V8 f1 z
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ V6 @2 L* W9 C# v" Q2 S* B" R
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ P' I L5 u9 {- L; r9 a1 y
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
! {3 Q2 ?2 E4 C* e8 h mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 N C# t) f; x
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- K. o9 X4 b) {! p% q5 d2 V7 E6 t. O1 q8 m
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! m2 x3 O, M; x' ] _: L; ?) [4 W0 q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ U' |3 |2 c$ d9 {6 S2 q1 M; {
mcasp->regs->PFUNC = 0; // All MCASPs
* ]2 j, s* V1 ^3 | mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. \4 x3 m: Q" q
4 c' O! h4 f0 T: N mcasp->regs->DITCTL = 0x00000000; // Not used
Y/ k B0 h/ ]( n mcasp->regs->DLBCTL = 0x00000000; // Not used: d( Z( S, U; }
mcasp->regs->AMUTE = 0x00000000; // Not used
- p! [3 c& e0 I, V: Y+ R. P& V# B9 b/ X( w& k/ C
/* Starting sections of the McASP*/
# a, x; K- K4 P6 {. A! G% ?. O" `: M7 F+ Z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ o0 K" U* P/ |; @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ |+ i# M3 T' ~3 I
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 C; U. B0 q% G+ z7 M( R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! m8 k3 {" ?8 J
4 p/ k7 g; k$ B4 U mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 V, Z G0 P3 o5 @/ ^7 i0 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' ^& S1 b+ x' E1 o# @' ?% O
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, ] K2 L" L5 W* A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 q$ U: @- n e
" e& a* \5 f2 O2 n D% W
mcasp->regs->XSTAT = 0x0000ffff; 3 N2 l: e* i4 @
mcasp->regs->RSTAT = 0x0000ffff; & i* |2 t0 P3 M, k
( D! }$ K- ~2 e2 M9 s) ? mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ]& A* G4 T B. U5 {) i; O; } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 |5 C' }# f1 a$ n S* T
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 i0 [; V, m4 a' K% R$ w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- ^& m- g* v. C4 z
4 P8 P4 u* b! z* f) k /* Write a 0, so that no underrun occurs after releasing the state machine */) j* V# l& ]2 n) n
mcasp->regs->XBUF5 = 0;0 _9 P# g Y* v2 {+ B
mcasp->regs->RBUF0 = 0;
6 R# g; w# e. d% F; U' a- p& I& I$ Z d0 c7 R9 g) k" Q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& S3 V2 e5 J$ T7 Y& ^' J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 i7 P, W" P& F; V0 p/ D
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ i2 J0 z5 b/ b1 E) ^" z- v) k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) I7 ]$ Z8 N0 f2 {: Y, [7 ^
6 ]- ^2 ?+ C9 l; V
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / f( }4 _% t2 y' R3 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& v7 \: y/ O' g0 m* h
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! O6 ?4 z' M" q+ @4 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
p' X& D0 m4 ^$ y. M% N1 Q1 r7 Y% N
CSR = 0x0000;
1 L) r0 L( B' V' U8 d6 R INTC_INTMUX1 = 0x3d;
& W# i% N7 S5 ]1 G" z, v ISTP = (unsigned int)vectors;
0 F3 W0 y+ `% S6 H7 _6 [ ICR = 0xFFF0;
# G6 X) C( l8 S) A$ K- z IER |= 0x12;
8 h+ Q% c( K& ^( z) y" O+ G CSR |= 0x01; . L6 V2 `% O5 V) i$ |
! x& a' s0 @8 o) H8 g6 [9 B0 N+ H6 `
9 y) I' \ c$ ]. Q) s: t
还有就是两个输入输出函数:" i/ X# O. s, B- Y' w$ L( x3 l
void output_sample(Int32 out_data)( [0 I* U. A7 \# U
{& K# B3 J2 I+ @
AIC31_data.uint = out_data;
Z' W: b. J' \& f" F MCASP1_XBUF5_32BIT = AIC31_data.uint;' z+ ]3 R8 I) A4 Y. j' f0 P
}
# {. T& Y' o+ |' r
. M3 c: T* j* LInt32 input_sample(void)# B: v* ^3 U0 [7 V6 g3 p: y
{
1 p4 G" q0 Y) D AIC31_data.uint = MCASP1_RBUF0_32BIT;" D& M" [* K1 @9 Z, v$ n: p
return (AIC31_data.uint);+ m$ B' ~" ~1 \; U, [- V0 H e
}
- V+ a9 `/ _$ W& y1 T! W' e2 |: x9 R" |1 J
|
|