|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 y# E& \6 c! tmain文件:9 k' p- v# s; j; g' p' @
interrupt void interrupt4(void) , w; n5 o( o/ J7 ~9 m9 D
{, T/ e0 Q4 M8 e4 d/ }
Uint32 sample;
4 p N) z. R$ {) p" X0 B
1 O% ?- T. }' Z/ D( ^ sample = input_sample(); // read L + R samples from ADC
" C3 p8 K3 S0 n, V& V output_sample(sample); // write L + R samples to DAC 6 P/ W# {% W5 A0 ?1 Y
return;: p% s, a+ q# i0 A5 {- H( L4 g; Q
}
+ y. g3 {0 Q: A9 A
1 r: M9 x/ c- I7 Y; l# P9 pint main( void )" T' n( x) ] v& D
{
, E+ ?5 k' F+ `4 a6 B( x8 _5 o3 p1 |% C# s# q( C F
/* Initialize BSL */- z9 @, I q0 _
EVMC6747_init( );2 z5 U9 }/ Q* j. A7 Q& C4 W; c
/* Call evmc6747_intr function */% a" G+ F! D' w* t0 j" r
aic3106_init( );* U9 H& z% v L
while(1);
4 ]8 J1 ]) n, _1 [$ I" u) s}$ E# w* J! w9 Z3 @* y5 l
. Z; h, u9 r4 s
6 C2 p8 L8 e x& _$ maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ g r6 p! t1 U9 d/* Initialize MCASP1 */
. K; r. j S6 x! j4 { mcasp = &MCASP_MODULE_1;7 l/ A1 X# j& v0 Q( B( d
mcasp->regs->GBLCTL = 0; // Reset7 l3 W4 a6 |+ ?+ C j6 J
mcasp->regs->RGBLCTL = 0; // Reset RX3 O2 U( z$ H+ v- O v" @, L' o
mcasp->regs->XGBLCTL = 0; // Reset TX9 Q- P& Y/ d2 _; H
mcasp->regs->PWRDEMU = 1; // Free-running
3 u# \4 `, U4 w$ K // configure McASP0 receive registers
W4 Z5 s/ s4 N" _- s# \- i; x: d mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# r w8 o7 f! j$ D- |% R mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 h5 F1 e( [ U( _7 M/ V mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
6 l0 @' _( E7 e' v+ E mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 D, t/ X7 G) O8 r" @9 Q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* z5 |+ ?4 w3 w: C" j2 {2 m' N& t
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 D' g5 z% M$ J( c: H, J3 \& @! t
mcasp->regs->RINTCTL = 0x00000000; // Not used
) v- w$ @6 X5 S% I4 x+ m4 F% ] mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 |3 w6 t' H' B" f- W% ~* W( ]0 m) \; P4 q% w
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( M0 |$ T. b. M3 p# `1 E @ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) n, U; h' X; r, [$ ]) ~2 |/ \
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# [5 d& F8 T0 z" R/ q) V' ~ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ u, ^5 u2 L# q# _% j- M
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. T* G @4 r* q; u' `, L
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 K M) Z' W1 x( l3 j/ X mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
w/ N1 G3 D. z* h! H mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" S; u" g( P/ M5 S/ f
- C( c) } q! e. M6 A( r mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( u4 P" Y9 ~( Y$ w; h mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 G/ \7 I: b. A" y. G mcasp->regs->PFUNC = 0; // All MCASPs
1 T! D% P. z) ` mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. a8 ^: m& W6 b/ j9 h( O7 T( N/ r- D" P- o4 Q
mcasp->regs->DITCTL = 0x00000000; // Not used
/ j: t2 A( O, P+ c$ u, @& R+ \ mcasp->regs->DLBCTL = 0x00000000; // Not used/ P# }* F j( q( g4 B
mcasp->regs->AMUTE = 0x00000000; // Not used
5 g& U0 k# v' L( F; V! ~7 G0 b# R6 f, q* V
/* Starting sections of the McASP*/& @/ J& ^* E9 m) H$ N
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 v6 {+ V% I9 a: F7 L3 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 @" n1 d4 [# o9 [% {0 i/ k! F mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 A2 Q. G# _# @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% f* B0 K" }% Z9 u* ]0 w
5 b- E4 X. `- c x9 T0 z( e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 N7 a% u# V/ f& V: I) m. k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 {7 _3 `# J8 J& t! b% L+ M7 x, E
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# f+ f7 R# V8 R1 b( \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 e( L6 A& }' p9 B# `1 q, k/ _4 ?! i
& q+ D$ Y% D4 `% a! y mcasp->regs->XSTAT = 0x0000ffff;
9 |* h* D f& x mcasp->regs->RSTAT = 0x0000ffff; 0 i$ t7 D" M, M. T
5 d, M: |8 Q4 x3 N8 }( z6 a) J) i
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 ?' \" q6 X/ u$ S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, [3 x) s8 b) a6 e
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; f# I5 G) a& z, Z) D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 _. Q: f7 B1 s: w; S
8 D) g$ O" ^2 A; R: F" N /* Write a 0, so that no underrun occurs after releasing the state machine */
, T4 g( X ?. o. r- P' R mcasp->regs->XBUF5 = 0;
5 ]0 ?% P. I; T- a; | mcasp->regs->RBUF0 = 0;
: u, n3 z( ?6 S1 v& m. P% U5 P, ^! l" ?
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : o/ F; z ~6 X$ H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! L/ g9 z- i( U7 O6 b; Z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 H# p* u! G! T( E# n% @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- l( S" d& }4 d7 m+ I/ {& _# M
$ [" ^1 O2 ]: C) i- N mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" z, {; |& ^! `$ Y$ n9 q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: o b6 _# f) a2 e* f mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 w) M, ~( M% ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- n5 J! ^0 J4 W, Q1 g
5 L5 `/ u( l! a CSR = 0x0000;
7 ~; c! _) H2 B3 v INTC_INTMUX1 = 0x3d;
2 h& L- a9 ?1 u% |9 A- ~. l ISTP = (unsigned int)vectors;7 g3 R" s( |6 s6 [/ h6 I
ICR = 0xFFF0;
* C1 j. {- n3 z) N" g IER |= 0x12; & y& X; k. Q! T$ k
CSR |= 0x01;
1 m, s. q4 j6 A {7 Y7 a
9 E' Z- K: H% f7 f' h2 L0 f. q5 W) y
' o+ b- j7 D: o) {$ W+ D: L8 l% @
还有就是两个输入输出函数:
* d' q7 n* t tvoid output_sample(Int32 out_data)7 O) o* D8 _% f9 G# ]
{
' R( x4 N' b V( s: d) `. | N AIC31_data.uint = out_data;
0 T R7 b- ~/ }/ t; n6 D MCASP1_XBUF5_32BIT = AIC31_data.uint;
" Y+ R: x8 c! v( _}( w- O) Z4 v7 y! T4 q4 x5 R J4 n
2 x3 C* U+ E; ^Int32 input_sample(void)
4 P! Z3 k D7 m/ G: g- \# E. L{ d: P# e; s8 l6 b
AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 Q4 E+ k- B5 Y$ Y return (AIC31_data.uint);
( `& ] y! w' z3 a) ^0 V* a$ ~0 [}
( C: S M9 d+ `( }1 d* g% a/ E5 S
1 F9 W2 `" Z1 G1 o |
|