|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. I y& Q* f! T8 X5 K1 b
main文件:
" s7 \6 e+ [' Qinterrupt void interrupt4(void)
! r% e+ ^' ~1 z$ s# ^6 j{
. }) q) h+ c- P. O Uint32 sample;* J( x. X) l5 V
7 ?& p- I' D6 I/ ~% N sample = input_sample(); // read L + R samples from ADC3 h( f: z( h3 v! C$ B
output_sample(sample); // write L + R samples to DAC
; _' N! J# x+ B9 n7 T6 `: l return;
2 O0 I( G! Q Z: q}
) f0 e9 Z3 m @/ E. [7 J: G) F% Y% L4 c3 h2 ~1 E
int main( void )# o! J! o/ H( l1 j8 z
{2 e3 n1 i1 t0 B/ J, Q }( k
* ^! Z, I: p+ [ /* Initialize BSL */% W8 P6 m, M2 w5 l7 e4 H' p
EVMC6747_init( );
: A! D" K& b' {- I1 y# `- p /* Call evmc6747_intr function */
* I. r. X( d6 |( n# _ aic3106_init( );4 w7 @' [4 P1 i& R7 R) @! K1 O
while(1);. c) p% z( K: @+ ^+ M, b3 ]# x8 }7 l h
}/ i% N, r# F: D2 O1 N* h% [
# m& y/ g6 x( T; g2 O7 O1 c; Q
( N4 w( \; Y5 p. F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 t- m t" m& l) V8 d9 g$ V! z
/* Initialize MCASP1 */- e1 q5 P( A5 R8 v* u7 e9 V& o' g
mcasp = &MCASP_MODULE_1;
/ S6 m9 R- T- S# T8 z3 H- ^ mcasp->regs->GBLCTL = 0; // Reset' L: H# s2 e8 E& |5 G7 t8 _2 w' \
mcasp->regs->RGBLCTL = 0; // Reset RX
% \0 y9 A- ^7 n& ^7 h$ H mcasp->regs->XGBLCTL = 0; // Reset TX
! g7 d6 v5 J" F' P' ?4 H) `0 X mcasp->regs->PWRDEMU = 1; // Free-running' d+ {4 b9 }& [# X- X
// configure McASP0 receive registers
- \6 h6 ^0 V0 p mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( z- M' v& J( L. A& `' J mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ S3 o% y" O0 e( N" m6 S; ?
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 \3 @ v! {/ }% B: v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- i8 P1 ~. E0 m1 ? mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 Z/ N0 P3 j" G! g2 @
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
! M( b1 a, {* q% \' H9 n mcasp->regs->RINTCTL = 0x00000000; // Not used
& d2 f/ \% a4 l# y& ~! { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ p5 r" z4 Z+ t" g& T
" S* b8 f/ N3 E9 j# S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
1 d. N5 \: V& I/ x9 d9 S$ v1 r mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! R/ ?( f# J1 Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; s. I6 q: }9 ?3 I4 Q. u }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; P6 H; v% X8 f8 M+ a9 { mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* E" R# ^/ f0 ]) p% o) {6 u) J
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) ?+ R& R5 g$ |+ a6 u/ u mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
9 J# B! `9 K, }) r* ]) f- X mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 j6 T* s/ R; |8 o
N" ~9 g/ e8 e* W0 Y5 E! R mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN& K% R) q, }' e( _/ V& j
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( B( I# s' b; R
mcasp->regs->PFUNC = 0; // All MCASPs
8 {" C6 n3 m: J5 N mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 a/ q. J) @3 O7 l5 p" R" e
# c6 L% f" ^; O- \6 p5 S" F5 G mcasp->regs->DITCTL = 0x00000000; // Not used. t' b, H7 [. x, Y# \
mcasp->regs->DLBCTL = 0x00000000; // Not used1 y$ @( [' m7 O4 `8 Z+ z4 r
mcasp->regs->AMUTE = 0x00000000; // Not used
2 k# V" a9 `: h- m5 E
7 i L" P8 ^% v0 Q. [/* Starting sections of the McASP*// c2 w/ w7 i. q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ j0 z8 b3 k0 Z4 b6 _. S3 f: I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 5 b7 l2 u! _6 Z6 a1 C1 N
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ [: o( R: ^# K9 H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 C" y# ?9 U1 V, T1 j5 C& C* u( r& n( H
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% G" L; x/ N2 o6 C, k8 {) S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 G1 ~4 u. L) I! ~* w/ N, r
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' ?5 _1 N3 l/ I. a" u- U" h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ A( Y2 Q# A- Z, X2 k. n9 ?" a$ G9 r, W: l9 E Y6 m6 p
mcasp->regs->XSTAT = 0x0000ffff;
7 p: L& K1 {6 S8 w2 y4 f L' g9 Q mcasp->regs->RSTAT = 0x0000ffff; 4 E) G) ]4 h' V* \& x
4 Y3 _7 m! Z3 _ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 E% ~2 g+ n0 w3 W& S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 A* d, Z- R) R ]1 B4 z6 g1 F
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 K$ S6 |8 l. F, [$ Q4 D F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% _+ n4 [- c7 \' X; A; i# Z. t% c7 d) s
/* Write a 0, so that no underrun occurs after releasing the state machine */
, K+ L2 j& v+ ]% j: O' O+ U5 M mcasp->regs->XBUF5 = 0;
0 `' S5 {. J1 B- s+ s0 Q. c( ` y mcasp->regs->RBUF0 = 0;$ q" d% B6 J/ W8 ]) H2 ^
0 S9 n% V1 h8 v/ M; Z" l) v# y' g7 \ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 k# q0 o2 D9 M" F/ ?# l+ K" o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( y4 Y5 j9 o, ^) U' g6 t8 ]9 H9 m9 o: W! O/ Q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; r1 W) P& T7 z# Y9 H7 g) l! ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ c: `8 L$ z6 Y" h0 t& U% D4 W
6 j& B1 D8 o' j) E# b1 a
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 t4 u) ~* \, M' G3 g8 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! E& j+ j9 P0 ?
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 A7 }) T0 M& u. o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 D1 b6 e; n- T, \6 x/ P0 \ t8 @
CSR = 0x0000;( y$ v7 v/ o1 L
INTC_INTMUX1 = 0x3d;) s# a r1 K# N6 |
ISTP = (unsigned int)vectors;
6 |/ `2 _/ J8 y) T ICR = 0xFFF0; + _2 v" L2 n$ D a @8 Z
IER |= 0x12; % \7 j$ k5 |2 [0 L
CSR |= 0x01; 0 e$ G5 C' N( F0 m* l4 J2 x0 j; Z0 Q. `
* B3 [" q R4 n1 u1 e9 p
7 R. W5 _, A' r( S+ q7 y1 a9 e% ]1 M8 O9 l
还有就是两个输入输出函数:
" H- k. B; S' G3 R1 Evoid output_sample(Int32 out_data)8 i* Z: @6 |' @
{
: n! s8 C9 c3 t( b AIC31_data.uint = out_data;
6 J! {% |9 g1 b( b MCASP1_XBUF5_32BIT = AIC31_data.uint;
' X7 W! l% F4 o, T4 j- X. L$ U6 ^5 b% ]}0 s( H: h+ _: h' M, n3 p
+ ~- q& o$ N7 z) mInt32 input_sample(void)% h. |, ?+ J" [4 \2 `' y; R
{
: D4 w9 } f7 ^+ K N( e AIC31_data.uint = MCASP1_RBUF0_32BIT;
! l& |( C Z T4 E; z return (AIC31_data.uint);6 J x: { W8 }# `6 c
}" l3 X: O$ V3 p+ K
: |6 |& W" v2 D3 t( u3 C |
|