|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 u( ?/ V% K8 E; |
main文件:, h0 E5 _% l+ f& r' `
interrupt void interrupt4(void)
6 g5 p' U% |" Z% s* V{
" A- X% ~5 K* @$ r Uint32 sample;1 m% s. a2 y2 A9 q1 m, b
5 `9 c# D. g, f. k1 j sample = input_sample(); // read L + R samples from ADC
3 N3 h5 O6 d" V3 ^& ? output_sample(sample); // write L + R samples to DAC
0 n4 W3 s$ q' o) b- c* |4 s return;
$ [" |8 z0 a) J, c' L0 L2 Y: ?}& l' w7 q! a9 K0 R+ h
% w- i1 N( O+ ~' C, ?' J
int main( void )
9 v B' ^, H/ Y7 N{
1 M0 i2 C$ i7 x( G* }
5 O4 A* ~- p2 J! D$ L /* Initialize BSL */$ m; k8 T; J% `
EVMC6747_init( );
- h8 F! r& _7 [# ]; \$ { /* Call evmc6747_intr function */
& _2 |+ w) e( T h# P! Q aic3106_init( );
) s/ p. F* U. q6 @ while(1);/ ^: q0 z# g9 {3 a% s" Q# y1 g
}
1 m8 I- j: ~6 g8 J4 l2 D$ M; R/ _$ |8 ~" _% r: E
; n' M# h( q* t) `aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 D8 Y/ M/ {; y$ \, o1 \/* Initialize MCASP1 */
5 m( X H2 N1 v mcasp = &MCASP_MODULE_1;
" ~. v( x: l* T1 o9 ^1 T7 M mcasp->regs->GBLCTL = 0; // Reset( L# H8 O- d2 u7 f3 s
mcasp->regs->RGBLCTL = 0; // Reset RX% d6 ?$ m% t- j4 g- Q
mcasp->regs->XGBLCTL = 0; // Reset TX
: S% q4 r8 e& R6 T4 ] U" _ mcasp->regs->PWRDEMU = 1; // Free-running+ J A! a/ }5 P( D- `0 U- [% Y6 l
// configure McASP0 receive registers
+ h: S' q: V7 k' w% u mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, D1 V* `; f: D2 w6 L, g mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 @ R5 M& m! i. ?; D/ ^ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word" K( F: C v' j+ o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), C/ X* n9 n, ], C7 |
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 U7 C& M( S; d* {9 K, P$ I; ]
mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ N8 v+ O8 I/ i( Q; a c& L
mcasp->regs->RINTCTL = 0x00000000; // Not used
. r% @5 r- c( x( |+ W; u% b mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* L. i2 y6 z& T
3 P+ f4 X1 V9 s# h, Q/ ?$ b/ M8 C mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 ?4 A. H/ X8 ^) @
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. ?# |+ T% K/ f& g- O1 I5 l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" C2 O) w8 r2 t& \5 ?5 }! {4 I. s mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 E+ ] ^, t e2 w mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& v6 p" ~, p7 Q2 ^5 u4 D
mcasp->regs->XTDM = 0x00000003; // Slots 0,11 ]- B; O* j2 V/ J& @* b4 K
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit' m- }9 a) w K a0 n; k
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& D9 }% C( t: |' G) p2 w
, O P3 o& y1 W4 s; k4 k/ v$ q$ D mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
9 r/ c+ i1 e+ m0 i6 c$ G& A# H u; S mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 u) Q# }' l/ X mcasp->regs->PFUNC = 0; // All MCASPs
! x3 Q9 {0 D8 D mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 [. r" P) q) s+ w, r* q" q7 e% D" f. W) D4 l
mcasp->regs->DITCTL = 0x00000000; // Not used# W7 U$ |& X. }" z6 l. Q
mcasp->regs->DLBCTL = 0x00000000; // Not used1 H! n. h# o, q' i% L" w- f1 Z
mcasp->regs->AMUTE = 0x00000000; // Not used
# ^, H3 a8 I8 d0 c* N7 `
5 e" b5 \) i# Y1 M/* Starting sections of the McASP*/
* }; P4 ?* N9 h0 W mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 E: h5 ^6 i' t0 m& r' {/ M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : u. {& c# Q/ v) y v
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 O, F$ h' h& M0 M! |9 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% K: J ^6 m" f3 R& T, y1 {/ b& e. Q. T7 _: o; g) o
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: C2 y& V6 @6 X/ Q, |! d7 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) M j, A9 Z# ^3 c4 p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " q5 h" G6 L" w! ^- z* q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); k% J. X! L% Z0 e( |; L% G7 A
! n! y/ P4 i0 z9 d* t: B0 {1 { mcasp->regs->XSTAT = 0x0000ffff; , s+ z, x/ t. Q9 x
mcasp->regs->RSTAT = 0x0000ffff;
, }6 K. T M, X, T, \, C, M* N$ i" ^, k# V8 E
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 R7 O( R$ V4 I% H7 {& q3 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 M) I9 @- M% ] f mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( S: h2 G! n/ d$ a V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ ]# L7 q4 O7 y! g
8 q3 [1 b/ h, v
/* Write a 0, so that no underrun occurs after releasing the state machine */
$ ? R. r0 u# r3 q5 f mcasp->regs->XBUF5 = 0;
! U& A% g; c! T$ R' P8 N' n mcasp->regs->RBUF0 = 0;
% B$ H3 D* b2 Y
- j: j2 s$ d' x mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 ]. \! P) ^/ B8 b9 L. \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 [7 D) o! l5 }& y; {2 E
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. q/ _* q$ T, r, Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 u8 C8 ^- u4 z& [
, v- ~/ S: a! K2 D0 c: R
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 o8 n7 w4 k7 d/ _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ X7 Q L. R q5 b
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ ^; O, d% l5 ?# F, }+ E% J6 K1 f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 e) a: r. y4 }
e% R. r% n1 G
CSR = 0x0000;
6 l# E5 ~/ Z9 ^7 I INTC_INTMUX1 = 0x3d;
) [/ O! B# K8 z) `2 u( N5 A+ s ISTP = (unsigned int)vectors;
! ]; v9 M* O! L' {) j" M) E ICR = 0xFFF0; ; c: G1 A u- @6 B9 p M% J- z4 r
IER |= 0x12;
1 y( i8 Q# U! l, u: R+ R, x CSR |= 0x01; * s1 Q# e/ T; X5 ~9 K
0 K) j. F+ `' e% E" `+ }+ K" H! L
, s0 M: D2 o6 \
- k% t+ D) l M* H) T还有就是两个输入输出函数:
: A; B6 Y7 s; ?) P! ]void output_sample(Int32 out_data)* C# K+ }; z, n0 M8 V* u
{4 j3 v( N$ m2 |, ~8 ^" ^
AIC31_data.uint = out_data; : C/ I @5 ]+ C2 `+ r
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ Z% u+ |+ b3 p8 ?! S$ q
}
- }) [+ Z5 @3 M) c" d( o; ~7 X2 g( b* l) D
Int32 input_sample(void)$ o% w# t9 Y& P0 c' Q( b1 ^' w
{
. p1 A) a$ M: r1 `2 W1 e& @ AIC31_data.uint = MCASP1_RBUF0_32BIT;
; a+ c1 Z- Y2 U) A5 j return (AIC31_data.uint);- C W( G7 U$ F6 d) c) W
}
* l. U" }8 p. j J( ]; L8 `% Q' B
$ i8 Z5 I) ?5 D$ Y |
|