|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 _& { |, N4 x6 D
main文件:
9 c5 a+ E) u2 o& d1 s- Uinterrupt void interrupt4(void) 5 r- O5 F+ w- L% Y+ Z
{4 X$ `$ m0 K9 ^
Uint32 sample;
. q- d) a- a5 r# a/ e& U
1 J3 o* t! t" \2 V sample = input_sample(); // read L + R samples from ADC" V+ D4 R0 q* b. @2 ]4 ^
output_sample(sample); // write L + R samples to DAC 9 [+ h n! h" L# ?9 P% r
return;
; Z# t! \8 T9 f& C/ _9 Q}( E+ }( q- g0 k
: Q8 E$ \& a- e5 q; }0 m" oint main( void )
. j2 ~$ Q* D3 B) T1 l{! R7 X- n3 J1 O1 m# ^' K, _# e
/ ?' e3 |0 q. _9 p' ]
/* Initialize BSL */1 q0 ^0 J5 u# k$ r+ P! A
EVMC6747_init( );5 D' n3 ~5 `) w& B5 Y( D; V6 W
/* Call evmc6747_intr function */ T; C1 j; }7 o V; `
aic3106_init( );$ C0 |- v- T7 K3 E" o
while(1);
' @" s+ A6 q( ?) X- o3 D6 F}
- ~1 p( t0 p/ [/ K, ]/ \
8 A4 N7 j* a7 W( W8 K$ c8 ]: X6 `+ ^2 s. }2 F3 s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, _+ R) ?6 u+ c0 C# a% L
/* Initialize MCASP1 */0 \5 ^1 W- e: i0 [8 N: c% H
mcasp = &MCASP_MODULE_1;; I" ^5 {, }- D8 p( f+ B
mcasp->regs->GBLCTL = 0; // Reset- ~$ u7 f4 W0 a7 Y+ s t1 n
mcasp->regs->RGBLCTL = 0; // Reset RX
$ [9 a' X Z" y6 c0 K mcasp->regs->XGBLCTL = 0; // Reset TX3 U4 \6 J# U+ l2 Y
mcasp->regs->PWRDEMU = 1; // Free-running. |& P3 p: m! Y
// configure McASP0 receive registers
% j& l( Q& q3 F5 E; G mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* T: c4 ?/ t# Z# Y- x; h mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' S3 ^" g( A4 G6 m4 p9 I2 D2 f9 C mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
g9 T- s& }" ] mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 y% B& ^- g* N% S6 ?! g
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 Y1 b g [9 l
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
! Q9 y+ z& Q: R mcasp->regs->RINTCTL = 0x00000000; // Not used9 J( s3 A4 C0 n
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ x& y' M5 u. {. I
- P, Q1 ?3 K2 R mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
3 t- ~+ R8 m: E L4 X mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 v6 s$ F! Y. F2 c' e5 p5 Q mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 e% Q) |6 b8 o0 G+ g mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- G* S3 O5 \4 d
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* W1 ^7 @# u* P& }& s# q/ s mcasp->regs->XTDM = 0x00000003; // Slots 0,1% w' s+ `4 u9 W; J3 C) A
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 F0 M7 [& a6 x* D4 `- E mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 q6 A7 k5 _+ h! Y
% G# J7 Z. A4 a; Y2 r8 M& J; c/ l mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ f( {6 _4 G* b5 S( y7 r! o' y mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
- o8 }: q+ e: [8 ?# u mcasp->regs->PFUNC = 0; // All MCASPs3 l5 E2 a m0 W$ E5 E8 U t
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 L9 Y t8 f; b0 @# _1 F
4 _2 u( ]" I/ O: A' R mcasp->regs->DITCTL = 0x00000000; // Not used
; v0 }) m! q4 G; X; k: b6 p. ` mcasp->regs->DLBCTL = 0x00000000; // Not used2 c* `! D* X2 {% Q7 ^ f; W$ @
mcasp->regs->AMUTE = 0x00000000; // Not used6 ]# j$ I, r2 ^ j
$ s" x( F s, A/ q% q/* Starting sections of the McASP*/
5 U1 z0 J8 f) ^9 g mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* @3 e' i2 u, H7 C B2 c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
) f) a1 n3 O$ m4 @0 X$ w mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- c, z2 q8 T# Y1 G1 Y" T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ]. k1 s$ y* h" w% ~
# {* C+ k. b: ~1 K) g
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( Z/ Q+ F+ `7 e3 p( q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& W+ ~6 e1 q0 T$ l0 J0 {4 n9 { mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ `$ j! o- ~- r: v) {9 r/ U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% o9 z, k# i2 h: v- B+ k6 E
8 z/ H, `8 q( H0 t9 }$ W3 h5 n* S
mcasp->regs->XSTAT = 0x0000ffff; + Z Q, V* k' i" v
mcasp->regs->RSTAT = 0x0000ffff; $ V0 v, I* e1 e) s" t& G" A& h
2 Y! f& d9 q: E, m- f) Z9 E) h
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' n) m" O9 ^# B6 L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ w6 v! U2 o9 Z3 v( u# Q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 z; d0 ^6 x7 F' d" @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. A$ _2 i; \1 o' N
/ L. h& Q C3 |; ~2 D7 x /* Write a 0, so that no underrun occurs after releasing the state machine */
5 Y D0 [7 w9 X# Q# A( O7 y mcasp->regs->XBUF5 = 0;9 Y. E8 j1 e5 j7 B) P
mcasp->regs->RBUF0 = 0;6 S. c9 l( Z9 T% d* f1 n
% Z$ g; ~+ K/ `" e mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : e3 c; |) r9 l' i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% y: |, P1 ?) [7 d) L mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : G0 @- A1 J+ t+ l5 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& J' M( E0 {& i) t$ V5 g4 J. n g! |/ Z- T' {6 ^
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 Z6 S M" ]+ v' i% u4 w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 Q$ d) m0 m% ?9 E& z( P6 w mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 |* O& D. d- I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 R8 z: R* W( {1 Q7 I
% [6 J5 h0 D# i- n; X CSR = 0x0000;4 a( q2 Q( S+ m3 O# ?" V3 `" \
INTC_INTMUX1 = 0x3d;
9 \3 b) _6 H6 N/ {" f ISTP = (unsigned int)vectors;
' z# c6 J/ g5 X9 V7 A9 E8 I, H$ K ICR = 0xFFF0; 4 m6 B" t, Y- W2 u7 ?
IER |= 0x12; 6 {$ z6 Q* Z$ g0 f! E! B
CSR |= 0x01; " p& K" n% P- J6 q, I% ~2 T# ]- b
w9 U6 r" e9 ^6 z% \# k' H9 F7 q7 m
6 F) Z: F J j4 c- r( d3 ~% l3 i, }
' _6 r/ @! @5 [# q, T r4 B3 d还有就是两个输入输出函数:" e1 l7 k0 b/ Y% q+ \
void output_sample(Int32 out_data)
) ^1 b' @. i9 `& w! M+ s% X{0 H. h- B) B1 O: y0 Y2 g. A9 t
AIC31_data.uint = out_data;
: T: @. x N1 n* ^1 h MCASP1_XBUF5_32BIT = AIC31_data.uint;# D% \/ `; R% Q* V
}
; W# R Y5 t, t
l- ]3 E4 Y# d% b2 \1 g d& gInt32 input_sample(void)2 B$ u0 Y, a/ j$ H- L0 `8 ?
{ : ^1 q: E% c, \* |$ X% u
AIC31_data.uint = MCASP1_RBUF0_32BIT;- n7 m! R; V1 [1 m7 ^3 P
return (AIC31_data.uint);
+ d- q3 V, _$ ~7 g}' c q' s7 S S4 E+ N
8 a# p+ K% S" J0 ?8 q4 U! R8 @
|
|