|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% K) u: g& x( ~8 Omain文件:2 L1 s9 P! x. ~
interrupt void interrupt4(void) * @7 y# d/ G: p4 B; \
{
( w" l: `) k- E, f Uint32 sample;
0 K3 T/ e& g1 F. a
4 V, y, V, K' _2 p sample = input_sample(); // read L + R samples from ADC! k: h. M$ t2 H. u; A! A* ~1 p
output_sample(sample); // write L + R samples to DAC ; g _# j4 T2 m- O, u3 r2 v
return;* S; Y ^9 P: d7 M2 N
}8 O! } w) a$ A0 y' }0 t3 b I0 H U
$ y A" e$ n2 V" G2 M+ [
int main( void )
; a2 n3 S* b, h: Q% c/ Z* B& v ?{4 }5 ]% t) Y. n
5 l3 r; o' w0 v /* Initialize BSL */
) q0 [* [$ k4 I. c6 g EVMC6747_init( );" s, }3 `+ p% u) _! T7 R- i2 U
/* Call evmc6747_intr function */
5 ^8 y/ n4 u: d* y aic3106_init( );
% `4 X8 a( K# L6 m3 ~! m Z7 k I4 v while(1);7 q' Y- o" T" V$ z$ y- Z) @: m/ ~2 v
}
( E( `9 x5 I, h1 C$ j4 Y# r/ E- J( s8 K- ?
- P) Z" @3 X$ g( ~4 r4 g/ t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. ]; \4 g% R: q/* Initialize MCASP1 */
, J! p/ s V4 J) A* P+ i mcasp = &MCASP_MODULE_1;, F0 P7 [, s* U- Z) C! W A7 n/ X0 d
mcasp->regs->GBLCTL = 0; // Reset
2 s' O+ ~7 Q7 g, c4 H" Z8 {* Y mcasp->regs->RGBLCTL = 0; // Reset RX
, _& s9 c7 w5 f. [) g3 G) ` mcasp->regs->XGBLCTL = 0; // Reset TX4 o' l& U' c" O9 { M- ^1 j
mcasp->regs->PWRDEMU = 1; // Free-running9 \" s6 I' B: n! X8 x2 R
// configure McASP0 receive registers. f2 L0 t' o/ H
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( ]/ `1 [+ ?' d) G mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. P8 h) a9 B- O- f8 {5 L! y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: l9 i5 O# a0 u$ S" {" l mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 ` C* r) U- h: {8 R mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ M. W/ P9 l) R! k5 Y mcasp->regs->RTDM = 0x00000003; // Slots 0,1) d2 H# t6 C- M# q, X1 x- Y
mcasp->regs->RINTCTL = 0x00000000; // Not used
6 e- ~, w) {; O- g' @) J mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 \5 z7 S# U w0 P. B
( a5 Q! U; ?9 P6 F mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' ~/ {- M6 t8 M1 H1 r) @" h mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' M1 V; ~% z; k9 f* g" z; f
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& x; k! h3 k& a; n* Y5 W mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( d8 U3 r5 Z Y. p3 q# R _, S mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- W- S& F! T- m mcasp->regs->XTDM = 0x00000003; // Slots 0,1
& D5 m7 y* q' E: U0 i ~6 j1 m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 Y8 a. s9 K' a0 P2 X
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. c' A' w3 e) q! K- A* I1 z# t: R- c% q, |4 [9 A2 n& ~; w
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 M+ H% t7 J7 V& G! `
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 |0 i1 g0 y) ?! l1 H: ^ mcasp->regs->PFUNC = 0; // All MCASPs
0 D- y9 |% w0 y- P. z* r4 h mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 N' S0 c* b2 ~% _
* `! P9 P' U/ V mcasp->regs->DITCTL = 0x00000000; // Not used: g, B" m- t3 c1 \
mcasp->regs->DLBCTL = 0x00000000; // Not used8 U! I o/ j& F* x& a
mcasp->regs->AMUTE = 0x00000000; // Not used+ \- m4 w4 ? r1 g' s8 {
8 @& J: H# p9 Z, g" f* g: K: t+ b/* Starting sections of the McASP*/
1 g! Q' x4 o& s mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; e" Z3 l5 {5 z p' V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 I/ T, }# N3 c% w# Q) P3 p
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , Z" u, s4 B) l# b+ U$ _, j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" v6 O; I7 S P4 y/ u7 X* N
* M3 Q* R9 ^/ u s mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' {! z K9 W' M/ { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 N8 F6 d. F; j
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( k" [& c! w; \" N1 H; @% y$ M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 i9 j I* b( T4 `2 @: F' B7 Q- J. j, `) @# m: s m, {
mcasp->regs->XSTAT = 0x0000ffff;
' G) s' s7 T7 H mcasp->regs->RSTAT = 0x0000ffff; 6 G* n( a6 ^% b3 I, e
# m$ N* R8 c2 N$ t# r: T mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 W- ?; m3 k' U3 S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( p! G! c0 Z* W7 E! L mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ [. s2 i2 A3 H; ^" h% O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 y9 Q) E4 @* {
S4 f L! i# D/ C: i
/* Write a 0, so that no underrun occurs after releasing the state machine */
# C' @& W }& P7 o0 t5 [9 T$ v mcasp->regs->XBUF5 = 0;' K6 r: V3 Y9 y6 r& }) n+ F# i4 o
mcasp->regs->RBUF0 = 0;
7 H% H6 G2 J8 o4 r3 x! v9 G( w# t7 ?# p! A M/ ]9 `# [5 |
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 {8 g# Q: G5 R$ J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( r5 Y+ _/ L% i0 u0 ?" v2 a mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + A1 `& |5 y8 p( ?8 y- ~' c1 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' o. ?& d1 A3 L- \
G+ S) c8 T9 l3 f8 {6 Z* l' h8 T mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + {1 p R1 q- ^" X' f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' D# {+ U9 ~5 m% x# v0 i mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 Z" p& k d K5 I R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. y% p+ v( @5 O T9 ?& O( G5 s5 o) H6 t$ A- T- ^- s+ B, Z7 O
CSR = 0x0000;- f' N6 O7 F6 w6 J( ~# Q
INTC_INTMUX1 = 0x3d;
o4 A6 V4 d7 d* j ISTP = (unsigned int)vectors;) s! b$ _+ E# d5 P3 {2 b
ICR = 0xFFF0;
2 ^. B* }, ?6 k8 J IER |= 0x12; $ J% K8 `' G) N m- y# | S- P( n
CSR |= 0x01; $ T8 o- T( i. C# ^/ G2 V
8 a' e4 G8 K! j+ P
2 u/ L. K! t# p; C
- e. h( U2 G- l; G- W9 i4 N还有就是两个输入输出函数:
% ^3 W7 k$ N" Z2 P. ~! @void output_sample(Int32 out_data) P) n% y' F0 y
{& e% s$ m$ _/ S( D$ V
AIC31_data.uint = out_data;
( N7 x0 A2 X3 f9 s; T2 Q6 E MCASP1_XBUF5_32BIT = AIC31_data.uint;" F5 r+ C7 |. h% L+ N
}' E% C, z+ m' ?5 ?: Y
7 D8 ^- `7 T2 ^7 N6 cInt32 input_sample(void)3 q: j2 Q* k- q2 k2 m& @- _' h
{
0 u) `' ]& K; X2 U1 |! R { AIC31_data.uint = MCASP1_RBUF0_32BIT;
_! M! B4 `$ v( I9 p! T4 J6 r; ~ return (AIC31_data.uint);
; F p/ J8 Q+ r% @/ d}
e& a" `6 j7 H' T( n! q/ z/ @4 D/ Z/ D( M/ _* ~
|
|