|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 ]' x1 h8 D3 h( P
main文件:! j" ^# |% d- Y ^6 C8 |# N. |, v) D
interrupt void interrupt4(void)
6 I8 x2 }+ b6 B6 W8 P+ V" o7 {6 W{1 }) e6 T" [( E: }4 k$ `* Z" h& b! C
Uint32 sample;
0 \3 L& z6 F# l* v9 b4 ~ \, z+ F! n0 Y8 q; t: v
sample = input_sample(); // read L + R samples from ADC1 h m- _6 ] v r: V/ S
output_sample(sample); // write L + R samples to DAC
9 ?8 _% P3 w. _ return;8 L3 k; s' |. |2 a6 y7 G
}
* X) t/ m( w" ~- D# O& E6 T3 {
5 @6 S$ l, I, H( I! ^* h6 Rint main( void )1 ~1 A5 k) H8 ^1 z# w5 S5 U
{' `& A6 [! u- Z7 \4 W
& Q# {& T- O+ v
/* Initialize BSL */) D9 [+ ?6 B+ G, E: ?
EVMC6747_init( );& N* m1 m; f/ r1 Q' {; C
/* Call evmc6747_intr function */
* [8 i: Y! ~/ u% r) {" g c aic3106_init( );
* n6 L0 c1 `- g I7 K while(1);
4 J1 [- D5 X) M7 d. d' @# V}
( N* ^$ k8 O# q/ i3 j
+ X$ Y$ _. U$ _2 W
: s) [9 R: q- C# U3 b1 O* d$ D/ N2 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 X/ F0 u1 {( M. Z0 K3 c O' d; z/* Initialize MCASP1 */0 P/ j9 f( S# w# F' {" W
mcasp = &MCASP_MODULE_1;
4 R3 d6 k3 i. d. s! D mcasp->regs->GBLCTL = 0; // Reset3 w8 y: _. E! T2 ?+ V
mcasp->regs->RGBLCTL = 0; // Reset RX
0 {) J, E% d# @ Z+ i7 J! m% r' c mcasp->regs->XGBLCTL = 0; // Reset TX- V* e8 s; {: g* l% ]
mcasp->regs->PWRDEMU = 1; // Free-running
) u$ |4 {5 R& C/ M; w5 u5 Y // configure McASP0 receive registers4 u; Z" H% G5 ~0 G! y
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 c' \# k4 h D0 e# C# ^
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. W% D2 e+ j6 U n$ L0 Y3 n# @% B mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ z$ W: d) q9 a9 j7 a+ S( _' S
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, x3 f1 _4 u: L' g$ p mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" L7 }' I0 O# c6 {
mcasp->regs->RTDM = 0x00000003; // Slots 0,1# C9 I* t. C" R) g0 ~& K) ?/ X
mcasp->regs->RINTCTL = 0x00000000; // Not used7 @% U9 Y0 B" R/ y2 U' B! L
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 \% }% m- U( v( S8 e0 G
. U- s, k# W# x' j/ `* S/ t mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, z1 G. M8 q) b7 t
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- V' e- K. H+ V8 }. G9 J( N0 _ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. |" Z. z* _! E7 i% u
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* V! o* p. c/ s9 s mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% T+ U" \0 b, ]$ L( {8 E. o mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 E% J2 P: ?: e% p4 y; |! h mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 V2 O9 G& T7 B% F6 c( c: n mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 r$ O+ v, L% H* P. @+ y
8 M5 w& A0 s" H e# H# u& [0 K
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, K5 U4 {5 s% h+ U
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 o; w9 G+ M! v7 {0 o' r mcasp->regs->PFUNC = 0; // All MCASPs
" s4 U: A4 l# g) c& F) E mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ n" s" t1 L/ Q
. g: `. y0 y/ j
mcasp->regs->DITCTL = 0x00000000; // Not used
5 J7 S7 o4 k/ c$ s2 S ] mcasp->regs->DLBCTL = 0x00000000; // Not used( f! W" a$ z+ U5 N2 K
mcasp->regs->AMUTE = 0x00000000; // Not used( [2 u$ g/ x3 K( c8 C
7 e8 w; H9 d) g O/* Starting sections of the McASP*/3 ]$ u. a! ?$ O/ D0 q0 O
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" C% G3 Z0 W( F7 u t, K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
a( ]$ r9 K1 Y mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + |! }! q7 r8 [' g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! O; e; X N* Z' Y! E
0 `0 J- L2 @$ r0 j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' `8 O4 ^; N& c: j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 `. \( B, ^/ ]4 d+ r; I
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- ]* ?5 F" R6 S& O3 [$ B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; w0 A' ^- X6 K* _$ x' q
+ i+ v$ ]8 L |/ v1 R7 O0 J* r# y mcasp->regs->XSTAT = 0x0000ffff; , g5 N( r& Z ]9 {, C0 {
mcasp->regs->RSTAT = 0x0000ffff; ) l# _% Z: A# N& b: G, v0 O
/ Y+ Q5 f& e2 F; r6 N8 ?
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 g% ]7 E" L1 I( F, H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ E8 K" u1 J( B$ F) _ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 }9 m7 ^* [) C7 N% }( j+ \7 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" k. q" m9 e, a- ?- M/ I
: `" ^8 O# _8 h1 T; D /* Write a 0, so that no underrun occurs after releasing the state machine */& d; Q) }; l/ E9 I# [' \9 V3 f2 I; d
mcasp->regs->XBUF5 = 0;0 o4 T0 d, ]% ~- Q8 v
mcasp->regs->RBUF0 = 0;" t& ^7 B9 [+ {& S4 y6 v
* K3 f$ B- ]# P* t+ `' i! t9 t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 H7 W( V4 F) ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ J z y7 ^) b* S& L3 b mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 P4 T, K' p* W% e, z) E+ Y- I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) m. a7 F1 X# e( D3 V6 ?# l
, V* v! ?/ V" M# P" q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 q# x. B5 q" A8 s: a9 a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 O) C3 u4 w- _7 Y. [ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * `; j- `- |- S" C6 t8 L9 b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& \2 d% _6 V& ^: D& h: ^! C1 R
7 `5 E5 |5 L$ `3 {$ x2 r CSR = 0x0000;
) Q3 C$ J# k3 F INTC_INTMUX1 = 0x3d;
4 _% f$ m0 c$ R- A ISTP = (unsigned int)vectors;5 p' S: a; Z' H: a$ A3 P
ICR = 0xFFF0;
2 K/ B, Q1 W' p: ?1 ]7 g IER |= 0x12;
9 t( i# C' J& j) a# f# j$ z CSR |= 0x01;
% t. V. ~. ^7 A9 p& \; v8 P, A+ L P& _
, Q4 ~' Z) K) i" \7 ] ~
. W0 x1 P# g6 B4 q5 D6 k还有就是两个输入输出函数:
7 Z% r' H# C5 ]5 Fvoid output_sample(Int32 out_data): r" E* S# |$ R4 h7 v; k& T1 u
{
G9 o8 o8 [2 x- Y F* z5 C AIC31_data.uint = out_data; , K& q2 } e+ P- c- A
MCASP1_XBUF5_32BIT = AIC31_data.uint;- P% U7 B; S* }1 i. h: n- r. t4 o
}
8 }& [/ O$ s: N) V1 ?/ \0 z+ |
, }- J" i3 I9 m6 y8 @9 c8 a6 S! i. {Int32 input_sample(void)& H; c) c# Z, ]
{
+ Y T5 e2 d. ^+ C4 m AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ P9 i) Y4 n3 _6 `* g return (AIC31_data.uint);* I4 ~+ [; h0 P5 U( L. H
}6 t( Y* t' S# N
/ C) _' \ i% _ r3 R+ J8 _ |
|