|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 J: J7 W( }3 V2 Y. P6 F9 _+ e
main文件: P; F8 D7 I" _+ [
interrupt void interrupt4(void) 0 Q- ~" A- X, m {* B! H1 Z
{
4 G+ y$ ^* T. B4 e" N0 E Uint32 sample;
6 i9 n/ d# ]4 X' f2 ^
2 Y, M* w; [ N0 ] sample = input_sample(); // read L + R samples from ADC, Q1 v9 U2 }) P. q+ ^8 g
output_sample(sample); // write L + R samples to DAC
; N! ?$ C& H4 G9 z1 e4 k" q return;
6 Q4 m r2 f$ b b}
% h" ^0 N( @, J* W8 M: [8 P! n/ \: a3 x( E+ x3 ^
int main( void ): j0 J8 R( D* `* w6 {: {
{0 D$ x" @# N o# y9 T) m( ^
9 q; i/ T9 c1 V5 \5 n: _ /* Initialize BSL */
" _' c: x% T& H0 A+ L EVMC6747_init( );
4 S; }* G0 y9 [" o8 j. R; n /* Call evmc6747_intr function */3 X w' q. Q4 K, y! w. q
aic3106_init( );
* e. ^* N- h/ I9 t while(1);
* _" z# B/ _6 I8 `7 i% B6 }7 y& C}
$ ?* A* L2 R, V: {$ y/ N' G( g" z: Y+ m" p
$ }, }# H; ]1 I1 a4 G
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" h: j3 f+ L4 t( s6 l4 K. O7 ?
/* Initialize MCASP1 */) a7 ~9 j7 a. D# t- _" [
mcasp = &MCASP_MODULE_1;6 z. i9 q) V& J* S
mcasp->regs->GBLCTL = 0; // Reset
C( G. ?. }' x: f; | mcasp->regs->RGBLCTL = 0; // Reset RX
) q) r) f' w8 l5 V W1 r mcasp->regs->XGBLCTL = 0; // Reset TX8 z! a6 H3 C' X
mcasp->regs->PWRDEMU = 1; // Free-running
/ Z" K' [/ M3 T$ N1 @8 f // configure McASP0 receive registers
: F1 M2 {7 R7 H3 V; u( X mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used0 j. X) Z! Q2 O4 X/ L
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 z; o- |) J5 t6 c
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- k/ N& P; v3 G
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
y3 B# y# k5 B# y! f7 l mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
( V6 {8 S; ~9 P mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ R- ]) i, a+ h
mcasp->regs->RINTCTL = 0x00000000; // Not used7 a" [( z# i# d$ X) M4 i
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& n, z; [# F# v2 ?" O @+ ^
+ ~( U: J% i+ f# o# W, s mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used& M' u7 f! C0 p/ }' e9 B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- Y% y9 q, w2 O: E* V5 p mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% ?, ]1 ?$ G4 w1 e- ~4 U mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& f f1 a4 s# O+ O
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( @4 D" d7 o8 |1 d9 o1 ]& |
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) ?) Y/ w- H3 k( x- f. ~ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ P' h& R2 v( Z7 s9 w9 @) \) s* a mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 q6 o$ R: Q5 b+ T7 [$ o: h: y5 N+ t- ?% S1 o
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
, Q/ s) C1 F, C& Y9 N: z mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 U* J' W* i6 x4 u' A
mcasp->regs->PFUNC = 0; // All MCASPs. h6 Q, ^1 W" t$ g
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 \8 F) R4 d/ X- g \- _
/ u$ ^0 M+ y$ q$ j mcasp->regs->DITCTL = 0x00000000; // Not used
9 w' C% t. S+ r+ P mcasp->regs->DLBCTL = 0x00000000; // Not used; J) @% B& Y3 n* w
mcasp->regs->AMUTE = 0x00000000; // Not used
! Y9 F+ ^6 h/ P% _' |8 T7 F
/ S7 w9 A' c9 i# \% P. S# E0 t! A/* Starting sections of the McASP*/& C( S7 N; k( \) H! i
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " ]! h: g7 H( d! R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & o; z8 V1 R) }# h/ S, E" U' z9 n6 n
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 w( q8 j; V( H+ B) O7 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ T: H& i/ _4 Q
0 |) P Y( S! X' s8 C, F% @ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: u. O: R8 F/ v% s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: S, Z) V; y I0 H6 i$ N# j5 u
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , R: q8 U7 E4 u; u6 k+ E- M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' _- [* w" v, O/ D; @0 h
1 r6 I; _- c" [5 s( Y, O B2 L mcasp->regs->XSTAT = 0x0000ffff;
4 E u4 b2 h8 V$ z mcasp->regs->RSTAT = 0x0000ffff;
$ T0 W" s8 T* a9 Q* g( b7 J/ c9 y* @ }9 y1 ?
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 K2 E; K. L v9 [% a3 U4 ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 h4 W* G8 M2 r- D$ O; y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 v% N) v" F' a2 \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* F9 f$ _2 A+ G9 X# u7 Q) Z( P! o/ f0 X4 u8 G1 y9 y, M
/* Write a 0, so that no underrun occurs after releasing the state machine */
/ o) q X- O! J) o- ]" f mcasp->regs->XBUF5 = 0;3 C5 l* b, D# e7 l* m
mcasp->regs->RBUF0 = 0;
- d% t% l" c x1 C) V6 Y% x; W. L8 ]3 l
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 B, e- \+ b$ ~( X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) l f n' d; w* b8 j mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! V' h) U- R! r2 ^, N0 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" @" N) `$ ~. S6 t
& L& h9 k. ^( \ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 K' v, A( L/ x8 M/ |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* S% P$ O4 Q8 Z$ x! | mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : U% A2 ~# n8 m; W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- t& y" {9 }0 `5 Y- N- D; F
9 f+ ]4 z- C$ b8 C" @( m4 [ CSR = 0x0000;8 q' @; I9 x) _, l" L. Z1 X3 e
INTC_INTMUX1 = 0x3d;- G' c3 G: L4 |; ` ]
ISTP = (unsigned int)vectors;
/ |. ?# ?8 A0 a" I, c, x ICR = 0xFFF0;
- X5 P+ Z7 Q% V+ [2 U1 G+ e" K IER |= 0x12; ( f$ k+ w" f! S# M7 ?7 G
CSR |= 0x01;
8 t5 T9 }$ E3 X7 {# f: C$ ]- K- P* i6 `+ S1 B
9 I B" z3 E9 I7 L2 R. k" g6 D5 A/ i
还有就是两个输入输出函数:
+ q5 ]" g5 ^7 V( z6 cvoid output_sample(Int32 out_data)" z/ ~( o! ]. j6 D
{8 I# K* p8 {! r4 h2 X2 G" G
AIC31_data.uint = out_data;
" l) }1 M* H5 ?$ } MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 o. q& U( c+ {# d}9 [' i8 S3 \# [' ]& @
- J/ `, N- c$ qInt32 input_sample(void)
5 v# s! H, s% u: `{
9 h* `' [) Q0 j' m1 o AIC31_data.uint = MCASP1_RBUF0_32BIT; b0 J9 o- v6 [8 j* C/ D
return (AIC31_data.uint);. x' o+ o5 z% m* b
}
3 o1 X2 F% O; [* T5 z) l) H# ^
|
|