|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 W# I: j6 C2 E$ ^8 l/ Xmain文件:
5 Q) Q3 Y3 }' i* a4 Y6 C" minterrupt void interrupt4(void)
% z5 Y3 C$ w8 j" ^0 N" X4 M% _{. C! K7 c% U9 n1 _: \& I4 O
Uint32 sample;: R: y9 s- {: w% Q
6 ?: W7 _8 K, {1 M0 G sample = input_sample(); // read L + R samples from ADC
7 Z+ q. j2 ^4 ^: p7 H$ D. i output_sample(sample); // write L + R samples to DAC
4 e5 |5 }3 `7 k return;7 c$ g Q7 d4 ]" ], H7 O' m
}4 K9 w3 P q4 ^* w0 Y7 N4 ^- [7 b
6 r6 S5 y1 p1 ~6 G$ H' |
int main( void )
) o$ J/ W/ V! @9 u) c3 y7 f{
5 A1 q2 ]8 E2 z8 ?6 @# P! p% G0 B- A" v7 e* \% B- l
/* Initialize BSL */1 p* Z7 x$ C. D- ~+ s. ?" t0 F
EVMC6747_init( );: A( {3 E. @8 c! v+ u
/* Call evmc6747_intr function */ ]8 L5 O1 {3 O7 E% K
aic3106_init( );
) a+ A$ i& `2 e2 R while(1);5 T7 ~2 b' e" N% L& ?
}5 s* x/ j3 ?6 W4 n4 D O; L) w
( Y1 ~# G* q2 n* z3 P6 N2 g4 R' j
2 k( J' n! S. L2 h. m3 Faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ i: T$ r8 P# `8 m1 [* I8 Z1 j/* Initialize MCASP1 */3 J5 J9 @; B" l q
mcasp = &MCASP_MODULE_1;" U) t5 v" J# ]# @( q% x
mcasp->regs->GBLCTL = 0; // Reset
' @& N& b. t* ] k mcasp->regs->RGBLCTL = 0; // Reset RX
5 s. ?2 t u6 k; Y mcasp->regs->XGBLCTL = 0; // Reset TX
( ^! _3 `$ f: h6 ^& Y, F mcasp->regs->PWRDEMU = 1; // Free-running
' ~$ J T N- v% F) r // configure McASP0 receive registers
3 d# V7 s. X9 E% Z: D6 D4 Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used. D8 d5 v/ v6 n( s) b+ @* P
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! O8 E# y7 Q6 [1 |* X mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 V" \8 [7 v8 i k mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% P! }1 T% e( b$ J! O
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ G& X) I V8 e0 c4 S
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 B+ m1 r$ e/ p3 u mcasp->regs->RINTCTL = 0x00000000; // Not used, ]5 O3 {8 m o: v4 B3 ~
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: Q1 |* @" G0 J9 R& ^" _
2 m3 x; r% c3 R# g1 g n3 U/ [4 x
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) N8 h' g' \ r! W! A
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 s! x1 w9 ~3 m- q8 l" s, h% Q
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 s: M) j% X& `5 e+ M
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) p$ J$ h6 g% }' |
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ I# ?* j- S0 S" n
mcasp->regs->XTDM = 0x00000003; // Slots 0,1( z: u! T# I3 n9 S5 B
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 z0 c5 l3 f/ Y# r mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# t, B) r p; v+ E; z. o
: l! X- ^ ]/ u3 Q/ ^" G mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
* p+ a& s$ S% {3 A* o- o( g! _ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ J4 E( }' k% a7 H7 x9 c& i mcasp->regs->PFUNC = 0; // All MCASPs; `$ e; g9 F" q8 v* b ?2 _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& E8 x8 {6 t4 Q: O3 f
: t' d7 j' b1 Y# J
mcasp->regs->DITCTL = 0x00000000; // Not used2 | k* T2 W0 J" v
mcasp->regs->DLBCTL = 0x00000000; // Not used" s, r3 p+ }) E5 [) m# z6 P- _9 g l
mcasp->regs->AMUTE = 0x00000000; // Not used& J: z- f) _. ]5 N1 Y- y* y* X
' l, } X2 i: i/ K" P; U/* Starting sections of the McASP*/
/ Q; m2 N/ R8 c7 [" C mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 F. n+ a: G+ B; O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# k7 d, V; M8 f3 l2 r6 R9 t9 v: y mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 |5 m- p+ N. u% I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 T. ?5 o; Y9 N: R) k
' a; C" R! F/ H mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ ]* l5 r2 q5 m% A: B% Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) A! s, Q2 ~; M2 Q# Y- e
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
H! b- _8 N+ R& a. @9 h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' l n$ n8 S3 _! d; P% t% s* z
- [" X5 Q, H: y$ `) ?' d mcasp->regs->XSTAT = 0x0000ffff;
, t( ]: Z) m4 b mcasp->regs->RSTAT = 0x0000ffff;
/ O* W( U. u1 @8 n" v- `, K! v
: C* v2 T3 A; n7 G# m mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ |+ {: h( Z$ l" K/ J7 Y Y2 u- e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; c& `; f, A- K a( n/ L mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 U h$ [6 B* p, v& g& K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- M' P) m) Y& P+ [
; A5 N! z5 p9 x( e$ v
/* Write a 0, so that no underrun occurs after releasing the state machine */
" f/ x& S1 x" g3 ~. ?- _2 @ mcasp->regs->XBUF5 = 0;
: O0 P9 A( |% ]: w9 t mcasp->regs->RBUF0 = 0;
- n" x8 ~) z1 c4 u8 n6 u7 f( w; C
' a+ L' J0 x. V$ q' N; k mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + J- p0 P# S5 ^9 h$ s( M7 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( @( D, W' Z7 W1 k- W: h
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ Z8 l1 E. z% h" w7 }& ~' Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ [4 w" {, y2 y$ Y* N; o
2 a% m& E: b' p0 e6 K O' U mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % m5 x# k$ U* E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. {+ ^4 T* v, ~: M/ L mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% z8 b* X* Q5 B, a$ b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 y D+ J' Q c2 b- s' d+ n; ]2 O
& @: B+ S5 I* v7 @) ?! a CSR = 0x0000;
) b! R( I' X { INTC_INTMUX1 = 0x3d;
: [8 u0 Q" O" W3 B ISTP = (unsigned int)vectors;
* u( I6 E5 C; R" z* f5 N. D ICR = 0xFFF0;
: Z% G% ]* k/ s$ m5 S IER |= 0x12; 7 `) ]7 y7 b1 A! R2 |$ s
CSR |= 0x01; / z v& ^ e/ e9 E* o* {* Q# W, N
( |4 a; F! J$ U* q+ H# n
9 K+ C- a N. J' L8 C7 q) K1 p9 }. m# ?
还有就是两个输入输出函数:5 E# ^! _. g* Q \$ T3 I
void output_sample(Int32 out_data)
1 J& \4 E1 q B* _) D( Y" c& Y{
5 X* s% W0 [' w& S AIC31_data.uint = out_data; ( W; j" ^; e Y4 Q6 l
MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 `+ H6 g3 J$ v* h8 f}
6 ]7 H/ r0 U+ {7 ], c2 i3 F P& X
Int32 input_sample(void)0 w0 W" z6 q! S+ A! K( s
{
/ m2 ^0 W9 q' x AIC31_data.uint = MCASP1_RBUF0_32BIT;2 b( V3 ?' a: U6 z
return (AIC31_data.uint);
/ v0 R( l4 W. [* k}
: L/ I# L& P1 t) k0 O& R- ]
+ W3 w* B4 m h( d" _2 v |
|