|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 ?* b5 C) e! p
main文件:
7 I9 k7 u, i0 w6 J0 _7 Hinterrupt void interrupt4(void)
- r' d; n( L3 k' |: A{% V" M; Y' I6 H$ `: p) I
Uint32 sample;; k* a* I! u) W- q. D
( z q' `: d* E3 X& r& N sample = input_sample(); // read L + R samples from ADC
' v! ~' `. v% Q' R$ C3 n output_sample(sample); // write L + R samples to DAC , \- ]3 {$ T6 y$ \
return;
$ @! W; s3 H& P}# ?4 L, Q. b! ~. |9 d: a
3 F7 `( s+ W5 o. J: ]int main( void )
: ~' W; J& n' Y8 _$ O3 O6 J4 d{
; y- @/ }8 S6 I
5 V3 n q8 H1 C1 H /* Initialize BSL */! U5 Z3 }/ q0 F' K8 ~3 o
EVMC6747_init( );
* Y$ l$ S! ^' Y) V /* Call evmc6747_intr function */- M- C' i. R3 f
aic3106_init( );
. O. T4 Y3 B* j, _$ X while(1);* ~# m$ c# o# e' G2 F2 `
}
% y4 L+ C% F, ]7 F, q# z. H* j. m7 [$ ^( P# g+ K. s, y" U$ I
( E# V$ ?+ M* J- X1 g. r- faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 T: c( {( z4 I# L/* Initialize MCASP1 */9 }! j+ \* ^" E, T w
mcasp = &MCASP_MODULE_1;2 g4 C: f& Y& N8 X( t H: n
mcasp->regs->GBLCTL = 0; // Reset% \3 f4 G$ p( A% i4 g
mcasp->regs->RGBLCTL = 0; // Reset RX
4 Z/ ]6 U$ a& x/ x9 k; |6 b mcasp->regs->XGBLCTL = 0; // Reset TX" @3 L2 c6 z$ ?" q# I
mcasp->regs->PWRDEMU = 1; // Free-running
2 G2 K4 i$ A7 @. y8 k8 n+ L5 H // configure McASP0 receive registers
( J, ^$ M, p, @5 b/ D j; M, } mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, U9 S/ T" s% ~: H
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 J0 I. ^' c+ O2 L2 ~ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; C6 }2 D! m1 V% y mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% Y% B, P+ u4 j6 n" b: C
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 W ?/ Q3 y7 s! `& x* Q G* a mcasp->regs->RTDM = 0x00000003; // Slots 0,1
1 a" x3 ]0 N7 R- W8 R% N mcasp->regs->RINTCTL = 0x00000000; // Not used
1 ], i \+ z: i( ] g! l mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ j" U& v! y$ D. j; k
6 h5 P9 Y+ g2 o' W
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# {2 K9 I. J; X- w$ U4 L
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 n' _& ~% e; Q1 b2 ~& a1 L# z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% D. t6 J f. M' M) W1 U
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 o: r; C2 V0 z: {9 a
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
2 z7 C) m- x2 j3 ~% y4 Q: } mcasp->regs->XTDM = 0x00000003; // Slots 0,11 l% V0 i7 R5 m
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) E: W1 ^0 C. S5 D" _
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; j3 \" S( `* m8 n. |6 D
6 O* ?# p3 {% k) ~* A mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 V* |6 T5 G, z7 ]: B& O: R mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ Q V$ |2 ]; X* D* F mcasp->regs->PFUNC = 0; // All MCASPs
1 q- @2 d3 C1 g: f& @# ^5 K. X, e6 o mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 V% {& X3 {/ x- E0 x& V
+ s& J/ i- @$ |% X% `" p+ Y4 G mcasp->regs->DITCTL = 0x00000000; // Not used; z( i/ M7 H( G7 H4 E S
mcasp->regs->DLBCTL = 0x00000000; // Not used) Q1 U- c; ?+ g9 C. o7 l. p2 W9 L
mcasp->regs->AMUTE = 0x00000000; // Not used
3 z/ x: O# v2 ?
Z* e6 j" P6 I7 w: C N# D0 t/* Starting sections of the McASP*/
$ `$ P! B0 b4 {4 B0 p mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 R2 N0 i. a* W$ }% e/ h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 y4 M5 I9 O$ T7 c! }! F# F" ?- c
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 S, A, H# `& q# d7 H6 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 I- T7 t) Y# c/ o" Y' m: V/ f( f0 W" B* R- v
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. m# b* t1 d) G: w( q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 y5 m1 A9 @' o% R5 o; p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 G4 F2 r' Y+ c( w8 P" c- @6 M9 y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 @) V2 J' w) W) g1 c; X
3 d, u# _+ \5 x3 ^4 Y4 B
mcasp->regs->XSTAT = 0x0000ffff; 1 x) k# l5 Y4 w* d; \
mcasp->regs->RSTAT = 0x0000ffff; + l) V9 Y2 Y6 N1 p! G7 n( g
' N9 }) r$ ^2 |
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! v9 `3 y6 p" K7 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' ~; Z; w z. K# `; ]. S" i9 l6 T O+ b" k
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 X. B8 ^3 E$ j. U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ i7 L1 ~. A! n: G
( Q# ~! B0 ~) o' [/ q
/* Write a 0, so that no underrun occurs after releasing the state machine */! {+ W) o; H c/ j; V. V
mcasp->regs->XBUF5 = 0;
, T( m5 L. y1 ^* }& e" C2 M mcasp->regs->RBUF0 = 0;
& L7 P* L- c" s2 F+ q" w/ R8 v" W' N& K$ M- o9 w% Q" n+ Z
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" t5 }8 Y3 K; [/ g# A/ {, H& j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' R/ P$ h% H# y, F5 J1 g# z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; e( p, s: J* U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* Q! e3 X( {( _* E+ i' c
6 x$ q# p% j5 y# `6 v6 v1 ^
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * x" l; M- K3 M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 N. X2 f8 u5 V. ^5 l( o4 S0 ]
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! N6 Z4 s/ G+ b9 h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. k# L) {# P% k
- E4 P5 D! m4 ] CSR = 0x0000;
5 y) r; i5 V3 d0 o2 | INTC_INTMUX1 = 0x3d;
" W r- e# T4 y+ } ISTP = (unsigned int)vectors;* e& X7 L* A% r7 E
ICR = 0xFFF0;
$ j6 U4 {% j) ]4 [/ P" U$ f: u IER |= 0x12; 4 V- G% `2 [/ ]0 y% k' ^5 R5 R1 }
CSR |= 0x01; . l1 u6 @+ |+ p: H4 N1 ~: K' q
5 b$ |% M; l5 M/ w7 l7 ]
7 r5 K, g& o8 }4 [$ l. }) r! m- t8 w) p( z/ A
还有就是两个输入输出函数:
' i$ B: H8 {% {/ Jvoid output_sample(Int32 out_data)
+ Q( }, l6 S; S5 Z8 ~ b' a; M% Z{
2 G- e+ n& i9 F$ H- \ AIC31_data.uint = out_data;
+ p: v! @/ N& j5 o MCASP1_XBUF5_32BIT = AIC31_data.uint;
% c5 @7 x% g( \1 h% _$ ?1 r( B2 F}9 W, ^8 b8 q% w
$ o7 S& @! ~* M3 W6 C. e7 _; G
Int32 input_sample(void)- X4 m: G4 F, k' j6 I
{ 1 g& ^& t: ]8 F# {" I7 q8 ^7 Z3 C
AIC31_data.uint = MCASP1_RBUF0_32BIT;; c/ f$ Q- K' ]% w6 G
return (AIC31_data.uint);
5 N3 A! v0 c3 I' r( q% s}
3 R7 g8 E {: p8 |% H) Q/ h. [
; l2 I6 r- z, Z Y# c9 s8 f |
|