|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; ]% R8 N7 H; V H# g7 v) K) E; n
main文件:/ }3 \( D' d# [3 t9 f' a6 o" V. L, S
interrupt void interrupt4(void)
- |0 f& y, a' Q; m) C4 W, I{
( \5 }8 i1 A% J+ K9 N! _& ? Uint32 sample;) j( G5 q t9 E6 y" _
) N# g/ `" ^' ]5 g$ F% e
sample = input_sample(); // read L + R samples from ADC$ |8 q3 l* W8 y4 E+ N( x' c
output_sample(sample); // write L + R samples to DAC
! s3 F; ]9 H* c return;
, {9 S) q% }2 q& h}* I. z' T- S% y Q( \
& Z/ q4 B0 }) L4 ?% uint main( void )4 s9 L7 V' `: v7 Q0 K
{
4 Q; p! g9 @' _3 X# D, u8 D! O8 C7 e" E! _) @
/* Initialize BSL */
1 S' |6 v3 A0 Z4 i6 [& g EVMC6747_init( );
; F, v! n- S; Z /* Call evmc6747_intr function */8 y; w( V. ~0 q2 n' Z, \2 o8 _
aic3106_init( );! g6 u- t. K4 r. g
while(1);
+ ^) _' i% |" s' C8 n A}
0 A. K9 g% T6 e# N1 t+ R4 ~: W8 S/ Y9 q% N. C# Z
4 r, n1 X4 R1 R3 ]4 S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) K, j& k0 z! n% @& B
/* Initialize MCASP1 */3 @0 n$ c, E# e" y+ f% P, m6 Z& i
mcasp = &MCASP_MODULE_1;' F5 o$ c7 Y/ r$ G
mcasp->regs->GBLCTL = 0; // Reset2 e6 s0 d- E! O/ M& `0 M7 X
mcasp->regs->RGBLCTL = 0; // Reset RX
- n- T7 w2 _- a! w% z& z2 m mcasp->regs->XGBLCTL = 0; // Reset TX
$ c P( ~' _, c7 O% `8 I! u8 P1 H mcasp->regs->PWRDEMU = 1; // Free-running! Y1 ~* i9 [; C# Y" e; c
// configure McASP0 receive registers
$ S6 }) ?4 x8 B3 T mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used5 C; @0 `9 t) \4 v
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! n( e5 Z' q/ ~9 g mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( D; r; [3 T3 l/ f- ^0 k# b mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 c9 k6 X: z* K; r+ t' @# E& i+ g mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 A. U. A" l- U; @
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# n2 l% q* Y0 M: d$ x: ]% S! d mcasp->regs->RINTCTL = 0x00000000; // Not used
0 q V3 k5 A( ^+ q& A, a3 C- q mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 X4 d. t) e5 x' n! P
& c. Y& ~/ h6 r/ T
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
3 v8 G& N; l1 r& a( ]& Z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. V8 ]8 W" |4 P) G: ?/ p mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, o# A/ ^% m7 x mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 |8 N, P2 R8 U5 J R6 ?# e mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( m# v# m3 n9 H, M( W4 z
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ d) l. C; s8 h. j9 F mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 s4 s, i9 h1 o1 S* T: p
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 [- C1 W" ^* |/ m) l
! M8 V) Q: ]7 x9 y; G# m
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' h5 c: ?3 X1 t. r$ R/ ?. R
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& [9 M" Q4 r" N. Z3 h
mcasp->regs->PFUNC = 0; // All MCASPs4 z2 J5 |! T/ H+ }( x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 [" i% \- J5 r
' _, q) E: ~7 G1 U: k mcasp->regs->DITCTL = 0x00000000; // Not used
' s. G1 p; ^. V7 M, {+ | mcasp->regs->DLBCTL = 0x00000000; // Not used1 y& J. @! M: t$ E
mcasp->regs->AMUTE = 0x00000000; // Not used
6 h: E. F+ Q- c3 y
7 `) O4 M3 \5 k/ Y' w4 c: `/* Starting sections of the McASP*/
* i' i# l5 u0 d7 B mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ H ^+ a0 U+ g* E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 g- E h6 y$ u% E
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 @8 V2 P( q5 g, e+ x7 n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 ?8 Q9 V, ]" N4 J q
% ]! z2 V2 [9 W0 V- P; g ~4 ?1 ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ b) \4 g o5 h. L2 p% b. X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, ?2 l7 n) ]0 ?. x7 e! _$ N F9 }
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . _9 o# _ F' Z; V% G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 V+ e& X' ]8 J m% d% H6 \
4 h9 y( r# r/ `* ~& N' e { mcasp->regs->XSTAT = 0x0000ffff;
$ ?: Y. q5 ]: l8 g5 O mcasp->regs->RSTAT = 0x0000ffff; : \2 T$ c) A; ?- T; Q" A
8 B: R$ \% l- Y% @& K, Y8 G! c& r5 F/ N
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ j! v4 `' H. A5 L: } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* A' J. g; W, ?
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% u$ e2 |5 N5 X' m2 Z3 j7 o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ H. M8 L+ {# m0 S
& T) T* k3 e0 g6 @! c4 d# b! j, h /* Write a 0, so that no underrun occurs after releasing the state machine */& l- i; [7 }( S# R
mcasp->regs->XBUF5 = 0;
V7 L. k% M9 l C9 j1 E mcasp->regs->RBUF0 = 0;' m0 |7 v8 f7 Z* q# V9 s
. G! n8 S' o" z5 N- A. I3 w( W# D( ?
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( A+ O9 U# Y y: P. i$ s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) l8 e7 w: \- H2 G mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 B L+ f0 p) @, q Y8 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- s9 @. n" p0 f W, S5 W- z1 y* |1 a4 b5 F- [4 @+ K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: ]6 ~ H6 S Y5 f6 `2 w m; x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ K7 R8 d" J" b# R$ C
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' b5 x* Q. g- [; H# V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ w( `) T, m- H: i. u. V" d
+ i- W- O8 z( Z- x CSR = 0x0000;" T9 o7 U! u/ ]
INTC_INTMUX1 = 0x3d;$ O: T) `" p$ I( |
ISTP = (unsigned int)vectors;
& L, J0 d' D" n& F ICR = 0xFFF0; ( l# }- L' t a7 A7 Z4 c& {
IER |= 0x12; # N I& Q2 l3 _" [
CSR |= 0x01; ! u% d: @( u. C7 q. j" u
% ?0 N c! l% F5 C" |1 _/ ]7 i( z3 `( r# \$ s4 N! o; h9 s! P H3 \
5 }) F4 b1 i3 V( C4 j5 x1 G2 k还有就是两个输入输出函数:
* d! c& M* p8 z! F1 pvoid output_sample(Int32 out_data)+ g8 [" h) e' @& `2 R
{
7 v7 ` }$ H- k; @) J AIC31_data.uint = out_data;
9 X' L) Q E* e4 t. @ MCASP1_XBUF5_32BIT = AIC31_data.uint;; D. E+ y, x/ V Y4 A$ Z
}7 q& b! n7 _7 r1 X8 j
4 h4 A9 {) A, u( o
Int32 input_sample(void)* r. X! W0 \# z! V T" i+ ^. b3 |' s
{ ( e+ g# D0 D5 o; \) H6 Y
AIC31_data.uint = MCASP1_RBUF0_32BIT;1 j: y3 l3 \2 k5 f, ^2 | E- o
return (AIC31_data.uint);: B s6 G! A9 W+ A3 f2 b
}
3 p( \! A0 n+ w
* [- |, T1 c7 ^, A4 |# w |
|