|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* a+ o) s, X5 L' |+ |$ b
main文件:
0 d0 }, w9 l% P! yinterrupt void interrupt4(void)
( r( Q" Z' g2 |; X{# f7 m: y. H( J4 U2 u) P
Uint32 sample;
- [; `; f8 U; k0 z j( X/ F' a& _' j. J1 i
sample = input_sample(); // read L + R samples from ADC
& y0 o+ B. _0 X9 S- Y output_sample(sample); // write L + R samples to DAC 1 \7 r2 u& M* z# B
return;3 a+ H- E3 @! ?4 K3 X9 I
}, r l b S( x% j
2 ]/ W y! B+ [( d
int main( void )
- s, m; f% w$ Q% {2 Q3 c{' A, ?, z% _& H* Z0 \
' }/ F' J) [- Q! N( p" l- z+ x
/* Initialize BSL */" S8 o; H7 c9 m' s3 r% p# t9 ~8 A
EVMC6747_init( );
6 |+ t) x. }' D% C* O4 z2 a /* Call evmc6747_intr function */! `" \# G+ Y h5 w8 u6 X
aic3106_init( );
$ z* Q) ]/ b: i( V1 Z/ `, n while(1);
8 F$ N, _# ^/ c# p9 b5 i}
) S, @8 C- v& `( U' ?+ S% P/ l( t
4 a9 o$ F; A+ F
~+ O. l) ^- S" ^& l' ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' z, Y4 b+ ~/ ?+ p/ J/* Initialize MCASP1 */
; M6 J3 p6 w2 ~3 J" N7 L: T9 O mcasp = &MCASP_MODULE_1;
8 l& [2 d4 C- R( W mcasp->regs->GBLCTL = 0; // Reset
" b4 m" a4 m$ M- C' x* e mcasp->regs->RGBLCTL = 0; // Reset RX
7 `9 o% F; a0 ^+ H4 l9 h% o6 Y mcasp->regs->XGBLCTL = 0; // Reset TX6 v: }8 h0 _" s; \- A4 z
mcasp->regs->PWRDEMU = 1; // Free-running, X: V8 S, U, U
// configure McASP0 receive registers
% u2 \ D* s4 P mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, `1 O) t9 g5 S; T' R: g( j
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! v8 Z4 F0 B1 G* \( W+ n8 V/ x! k4 R5 a mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 D$ o* G/ X; z. n/ h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 @9 q. F6 {( i% p( Z9 o mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
& \, ?8 c L: q mcasp->regs->RTDM = 0x00000003; // Slots 0,1
3 X* I/ M, ?7 a- A4 z mcasp->regs->RINTCTL = 0x00000000; // Not used. B2 C4 ?% e- A
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- C" r! H" Y! W
/ K# E3 k0 y4 c! }- ~
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 z# O6 l2 t5 D2 S% Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ W- o S6 s( r8 e: z( k3 O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: m* ~5 `" z5 \( K; d g- q7 n mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ Q% z9 L" Z( R5 n) z* |( t& f mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK4 V* H; J# C$ W9 m6 v
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 D# U1 a0 M7 O" c; H mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% E* P J# u4 V2 @* t; Z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% c E$ Q; s% b7 w" }1 d
' K$ \+ ?7 I3 c6 P" u6 g7 {8 M V mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN3 i- q4 P7 _8 F O5 F4 K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
1 J* }' h- J, \ mcasp->regs->PFUNC = 0; // All MCASPs$ I L$ l& E# D. G8 v2 w
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& T. S5 ~" K/ ^" O1 D+ W3 S( |3 S4 [9 t/ y C
mcasp->regs->DITCTL = 0x00000000; // Not used
5 i' V+ B4 X9 R! I! H mcasp->regs->DLBCTL = 0x00000000; // Not used& J8 B# s: m' `6 ]
mcasp->regs->AMUTE = 0x00000000; // Not used; h4 U* k5 l; h4 h9 r
$ X! A1 ?; B+ h; V) e# E& ^1 i
/* Starting sections of the McASP*/- M' H$ g, k% U8 p! h
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ G; ?) g$ F5 L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % @$ |9 ]7 j- _' s# u
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 _( o- E3 v. u( l, X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# f, z% G: p+ Q, O
' B8 Q! i* U7 G+ w, x, m$ L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( J% R4 N7 y8 ?! {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& g: i1 \& H6 r; d p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 I) p7 `3 [7 V+ o; C/ X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& N* x; Q3 Z& X' V
. p7 c' K: @7 ~+ s6 L mcasp->regs->XSTAT = 0x0000ffff; 5 R1 D2 j) I/ P! f1 M, [ i; Z. J3 p
mcasp->regs->RSTAT = 0x0000ffff; + y+ d$ F5 ~5 R5 T5 o8 c
: Y; b- l9 m2 T3 }! m mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 Q- c% R. ^, Q5 G% {* S' c! j& | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" g& C8 A( R6 Z: }
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 l/ T) K9 ?( W) R# p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' n( U# \2 T3 G9 B) I; i: V
! V1 U# B4 z6 l1 Q% M1 T6 u
/* Write a 0, so that no underrun occurs after releasing the state machine */
$ S c# C+ J* k7 Z L! L mcasp->regs->XBUF5 = 0;. V9 \( t( w% j. V' _
mcasp->regs->RBUF0 = 0;- R4 A9 \2 X8 {4 z' Q: ~" z! k
/ g- @6 c7 O. e9 S mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 A, p$ w* g3 z( u7 {. z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ z2 T& X S8 p( P) p+ y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 I( }, T2 y: c, W3 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 n" F% n6 F+ o8 J* \$ @. X s
+ v% \+ Y6 x6 w; J
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 h( W) C9 ^0 P% ~+ g2 G g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 e+ z% H0 n6 |( T3 j' e3 {; ^( y' I* M mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* l2 u4 S5 J) f* l% k. q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 n$ f- E y: u; E+ ^
$ p4 {+ o& L9 A0 m/ \4 l CSR = 0x0000;
: O0 d; y' c2 F6 w; V+ U INTC_INTMUX1 = 0x3d;
! y4 I' a* z4 G+ r* \# |+ z8 | T+ L ISTP = (unsigned int)vectors;
1 o( a: n0 C) f8 o. F ICR = 0xFFF0; " r' \/ Q! R+ u7 c, I( d+ n
IER |= 0x12;
# {4 m+ Y, b% V( [2 `: H, x CSR |= 0x01;
2 O* U8 W$ Q3 O' h) O! h0 f7 s1 O% G( A; K8 r/ m: I
! Y4 j1 K% n+ k$ m m* w. Z+ {; t: {
: [: l* K1 W; W还有就是两个输入输出函数:( i0 ^+ p% I9 J
void output_sample(Int32 out_data)1 d2 g8 F: Y! t( _) B
{+ F) @8 S9 C+ Y2 ]9 S5 ~3 F
AIC31_data.uint = out_data;
3 P/ x1 d& M+ j ?; v) k4 O* r+ p8 _ MCASP1_XBUF5_32BIT = AIC31_data.uint;2 i1 V; |9 r: j" H. [( `
}- {+ Q4 R3 b; [. \
p _) U& o3 ?" f$ S% j- V# qInt32 input_sample(void)5 ]" r: U. H0 @
{
/ A1 d1 X1 e0 i" {% M3 ~! F AIC31_data.uint = MCASP1_RBUF0_32BIT;
. M' R) M0 n! r" x7 i8 W) U/ P% v return (AIC31_data.uint);. y" e& p" t/ S
}; ~4 l. x& i* j- \) L8 |
1 W" p2 i0 k& I# N
|
|