|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: m' M: C* e: N! h, v4 d
main文件:- [8 p: i8 |$ J3 m: d/ p- v
interrupt void interrupt4(void)
9 Q: r) u0 r8 u$ L5 n; S* q{2 o& J( R/ c; u3 {" V" y
Uint32 sample; ]4 K/ D: b- b# v
# ?" h6 E& z; K6 d( _
sample = input_sample(); // read L + R samples from ADC2 `! Q5 R, c5 w& |, C. d) i ^4 [" [
output_sample(sample); // write L + R samples to DAC 9 {5 T) h5 Y" v; B. c, z+ i! N! S% h
return;
" X. y& E" j3 ]}
7 i0 W F& A6 k' L
1 `" X( I1 G7 Lint main( void )
8 l& K' p- X) x. [ ~{
" G' R+ b: \% y
' E1 Y+ Q1 a1 w. z& X3 g /* Initialize BSL */6 w2 O. `9 q& M/ N; [1 R! R0 y
EVMC6747_init( );
7 g: M9 a! a& A' f /* Call evmc6747_intr function */# M! K: k% y, X: v
aic3106_init( );) g- O ~& _* L5 y; d' ?4 J: Z& x, }4 {
while(1);
; L, e8 j5 C( V M: _- Z}+ J4 V5 H3 X3 q. q
( w* f5 e, _& c7 s) O8 \ T: N% G& X. v% c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 Q1 w# a9 H; [3 V( W0 ~% K! {
/* Initialize MCASP1 */3 [% ~. o# u* p% n2 P$ ?: M
mcasp = &MCASP_MODULE_1;
) ^! C" o! {: j' ^/ j mcasp->regs->GBLCTL = 0; // Reset
& ^7 U# a( u @# q7 v, E mcasp->regs->RGBLCTL = 0; // Reset RX
6 o7 z+ J( @( o1 {* P mcasp->regs->XGBLCTL = 0; // Reset TX8 \, S5 i% P+ `. S6 P
mcasp->regs->PWRDEMU = 1; // Free-running' \4 h+ Z5 B1 a K
// configure McASP0 receive registers
0 u6 _! N. c9 G) O+ A" P$ m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 s& E/ D1 e* Q
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ D0 w+ w, N( c mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 @ k7 E I4 w mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* V7 \ z5 R }' V; [$ i6 P
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 y$ g' W! U# n) f* I
mcasp->regs->RTDM = 0x00000003; // Slots 0,17 r$ r8 V# A' x' R. C
mcasp->regs->RINTCTL = 0x00000000; // Not used
8 k/ |- {- U6 j$ Q2 X9 s mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) k0 Z& E) U5 D* {/ ]: Z3 R# l; K9 l5 J C
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used' z+ B, V. k4 z
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 h) T" S! i7 l4 g2 f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& p# l( T3 g! w mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- h, n! F. C* S% P2 Q2 y& O
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 H) D$ f( Z# O: l% l" Y" | K
mcasp->regs->XTDM = 0x00000003; // Slots 0,1' Q; [1 U- {& A" j; k7 s$ ]: B
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
o5 x( m; [1 n/ t mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% r& s, ~% s9 Q; M
% v# g1 M* F9 `% V- _' } mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
S, h& m: d3 o( C, D1 x5 H" } mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- C6 S' `% B2 W6 Q: s" M" p
mcasp->regs->PFUNC = 0; // All MCASPs
( c. C, q& N* C: Y9 V mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" |: \ m8 {0 _
$ u0 g4 n- Z4 ]. k. I* o mcasp->regs->DITCTL = 0x00000000; // Not used% Z! f- @. e: L3 U4 A
mcasp->regs->DLBCTL = 0x00000000; // Not used
$ ]& y4 B; f3 J/ s. s7 o7 b7 y mcasp->regs->AMUTE = 0x00000000; // Not used8 M m) |" {! i
# m8 r2 f" G+ e5 f: ~: G+ L# o/* Starting sections of the McASP*/
* Y5 @* l) r# l$ [0 X; S' L% ?$ {5 W" c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 S2 }' j* N" J5 [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 O/ o- }$ ^8 z8 Y6 f0 H mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ S9 o; D! b% E7 p6 O: D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! Z5 }; W/ @$ A( G" V
" v8 R o" Z. G# U" h @
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, G7 r+ s8 V/ S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ f$ W. F6 D% n9 \9 K' x1 A mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- V- P U* P$ ^1 Q3 G; b6 `, j0 W3 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 v6 E+ k* i8 y5 G) w( W' K3 `: x+ j4 R
9 c$ x- n: J6 v3 @' w+ m+ W/ Q
mcasp->regs->XSTAT = 0x0000ffff; 6 a; w1 h- F$ H
mcasp->regs->RSTAT = 0x0000ffff;
) Z* g* h9 q. t& X8 l& _' s) q- U1 @
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 M. I) f& y: U/ E1 V4 H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% Y, P, }0 M2 _; M5 z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; f# `# p, y) N2 F T6 d- X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 L$ e1 z4 z9 m( d" F- L9 n
: |2 Z$ j& y/ z) {1 |
/* Write a 0, so that no underrun occurs after releasing the state machine */
# D f. e% w% t' }# q+ I mcasp->regs->XBUF5 = 0;
: N7 [9 d2 k4 h; J. ~ mcasp->regs->RBUF0 = 0;4 d5 H7 z; ^8 P& ^6 u+ t
h! {3 U2 ]# R* p) A$ i1 a/ m mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; O5 ~( P! m; H% c6 @" V4 a& \# ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ p/ c! z4 k4 g, U7 c# |
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . n4 O9 t, o. D$ e2 V) ? C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 V, V, j6 o0 v" @5 B
( D1 x9 H i$ |( d+ Z+ E& a mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; ?# n; A z2 ~/ q) k3 ?+ L. v) ?; u- F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ T! }4 {5 `7 @; B' L) w5 Y G
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % `( i0 P5 N! a: m& C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: Y7 p& q( e) C8 u8 F' Y) i0 `
2 Y. ~9 P! \: H
CSR = 0x0000;
. t! ^) G. u: D6 H INTC_INTMUX1 = 0x3d;
- Q$ |8 t; X: I& `' O ISTP = (unsigned int)vectors;( S2 [( e7 i2 J* G
ICR = 0xFFF0; ; ^$ N9 y. }5 y B" j# h0 f
IER |= 0x12;
5 M" |9 N; a) Q1 w7 g$ ?( d CSR |= 0x01; 5 C/ a+ X. j/ p3 S- z5 P
! K7 q6 J+ X& A2 W* y* u; a: a; F9 v2 Q, c8 C# P
& r/ T2 @: x: R |7 L% u Y9 ^
还有就是两个输入输出函数:6 \/ ^/ M7 J3 V/ T- _
void output_sample(Int32 out_data)
. p8 `3 g+ p1 A7 j$ |{
. q' t: R' h, ?0 x% v AIC31_data.uint = out_data; h; Q" u: d0 z- X
MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 G7 N& k4 |7 Y}; D: ]: K: t f& O; b5 w
4 T/ [0 d$ b. vInt32 input_sample(void)- N2 N; ~' [+ S# L# e9 `
{ + g9 \$ t2 r! j; \6 ]# J
AIC31_data.uint = MCASP1_RBUF0_32BIT;
& n2 A$ U/ R6 m& R return (AIC31_data.uint);
8 c/ S$ L, ]% `# X3 }4 [: N; Z}8 h) I' B6 J6 f6 {3 E4 B
6 s' {/ p0 E! ~
|
|