|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! h# o) D S: {) n9 G8 a6 a c
main文件:
% k T" }4 [' ?/ }8 w* |2 x# zinterrupt void interrupt4(void) 0 D0 Y7 B+ S- z/ l
{
" p2 f. ^8 m5 e6 y Uint32 sample;+ f! c/ `& d, A3 B
% I @# z$ M9 `" x sample = input_sample(); // read L + R samples from ADC
) x. {& Z- @& h. w0 J output_sample(sample); // write L + R samples to DAC
4 f+ S- h4 R/ Q9 G1 U$ s7 R return;0 O" B/ X* v0 R: ~% e* [- ~
}
- x6 `+ Q* o; b4 V. N, d9 g) M6 A& R+ P1 H1 e0 n1 F
int main( void )
! ]8 C: f2 }* j. C8 {4 k) S7 U9 F- r: h{
! G0 z, f4 T. A9 E) j" `
/ _/ D( b; P( p& i& i i /* Initialize BSL */0 a! E: S1 e' |
EVMC6747_init( );( Y6 v9 [# w/ l, }4 W- I" ~7 {
/* Call evmc6747_intr function */5 Q' N% _ i2 {% n G) _5 N! i" r; }
aic3106_init( );/ v) a X/ Y6 e4 p8 a8 e$ Z
while(1);( a0 W7 F: m* f% w$ V! a
}
6 _* S; O/ R( W$ ?! ~9 `! w9 l$ }1 F' m
) Q( i0 y. [4 I9 s4 y0 h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) k+ R/ K7 H! T% o7 X3 E+ n4 a
/* Initialize MCASP1 */
7 _. c; w' i! i( Y5 u1 U- m- f mcasp = &MCASP_MODULE_1;' r* p }: {* o0 _" n& S
mcasp->regs->GBLCTL = 0; // Reset
0 F8 V! O; d! h0 F- c mcasp->regs->RGBLCTL = 0; // Reset RX
8 z4 \ P, s9 D9 j mcasp->regs->XGBLCTL = 0; // Reset TX
. [- U- y$ I3 D1 o" v5 O0 y/ O mcasp->regs->PWRDEMU = 1; // Free-running" q7 H0 ^1 G, O: }
// configure McASP0 receive registers
8 r5 ^. r# n4 |& c" K0 K mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
7 Z( u: |" |" o6 X7 B" G mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' ~9 X) X0 u; | mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* s% v( S0 O* Y; o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 ]& c2 B5 M e2 [
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, ^) v9 c( M1 |7 q0 X mcasp->regs->RTDM = 0x00000003; // Slots 0,1& B9 d/ g" ?7 j9 S+ [! ~
mcasp->regs->RINTCTL = 0x00000000; // Not used _2 y9 x) H, u% p) u
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 O9 I, ]* s! u
2 q( s( T: l6 a& T mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 m7 i+ e) d `( J
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 S" k6 L5 ^8 j# ], Z$ f( W mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( W0 w9 e( C5 `/ e4 {) S" K mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' R' I& i" k0 [* ]
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK ^' f2 [+ l/ L! z
mcasp->regs->XTDM = 0x00000003; // Slots 0,14 B! x, h9 z$ z* X
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
/ o- e' I9 a5 X/ S, e1 f mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ i$ ], g; m) x. J8 V
- Q) }& q h( q' T+ N% N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 }. Q g' i* e* i0 Y. z$ N6 ? mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* O8 I6 k6 b# t2 y" C1 h! A6 T' K! y mcasp->regs->PFUNC = 0; // All MCASPs) n: Y. R0 c# ]! f2 a8 u: a
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; f# \8 ?/ |/ f7 p2 K( q
/ J6 ^+ s0 Z$ l. Y% A4 R( q/ N5 v% R3 Y* o mcasp->regs->DITCTL = 0x00000000; // Not used1 o. e2 w0 @& c, R; y
mcasp->regs->DLBCTL = 0x00000000; // Not used: Y9 U+ v6 f1 L9 k0 a
mcasp->regs->AMUTE = 0x00000000; // Not used8 ~. ^! j9 A7 X# O9 }
' W) D5 S7 c2 z% \) m/* Starting sections of the McASP*/
% C' c' x/ Z' j* j& S+ m mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' D; [5 R: W0 p( w+ ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); - h+ X; q& J6 B6 l& r, F
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 f8 [- n# J% K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ j, n1 H: e# I/ D e
' Y) m/ \* L6 m$ s( O mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 J$ C& E! @! Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* R; n" N [& p1 }! X( q- i$ }* [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : O t4 L8 t" X4 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) i2 n* i9 w# Q3 @* |
v& B; V2 D; _. Z. B mcasp->regs->XSTAT = 0x0000ffff; ; l1 I5 ?- c% b. d }% s
mcasp->regs->RSTAT = 0x0000ffff; ; P7 n8 y2 T9 a& O3 W
6 z' | ]7 K; C1 a8 z) Y% a
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! r0 t' x5 F# y# c* f9 }0 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ L+ E$ C) H, I3 f mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) K: t" J" S) y8 C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% Z6 i5 ?/ v# s, c
" R9 c' m; y/ l9 d$ Z3 P+ B9 }
/* Write a 0, so that no underrun occurs after releasing the state machine */; Z7 d5 J/ Z }2 z4 h6 W' s
mcasp->regs->XBUF5 = 0;
3 }4 ^& @; x0 E. r2 \ mcasp->regs->RBUF0 = 0;
" `" b0 @- k) Q/ B( f1 C% z! `6 g
8 `: O. d/ o3 r3 H mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- F5 `0 R- z1 K' p) {/ |) c; | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 _" B- I! U$ l; f1 s mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % m- [7 M2 A6 X6 m1 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 |# b- e4 G9 X! T
4 c8 ^5 i: ?8 i7 F
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& g2 a- E3 Z5 P2 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& j0 I' m& j4 P! V" w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + j x7 k! z. V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, k. ?/ F: s$ R* N' g: w) R/ K) W9 Q8 j7 @1 E6 {
CSR = 0x0000;
7 S% s6 `& \4 k2 S; Q7 g" v4 v INTC_INTMUX1 = 0x3d;; l f$ r# w$ L
ISTP = (unsigned int)vectors;
# C4 i# _/ j+ G$ i& x$ z# N, { ICR = 0xFFF0; 7 j3 O. ~0 [! b( _3 K3 u, H
IER |= 0x12;
. W7 q% y/ \: Y CSR |= 0x01;
! g. I" T3 e3 D0 H7 S* i+ W8 G
/ H; m6 a2 p+ O5 @5 X F8 v
5 \, ]& o' m, p; n' H8 Y& w7 X1 K; W( H1 I4 e/ F9 G' Q
还有就是两个输入输出函数: O4 a" ~) e4 }; u, Q3 K" }
void output_sample(Int32 out_data)
4 \5 h- H- c: i& L) y# G8 ~{
8 U3 G- K. _8 P$ v( q9 b AIC31_data.uint = out_data;
/ A0 c0 U" ?5 G6 t MCASP1_XBUF5_32BIT = AIC31_data.uint;
: d1 N7 ]' v; x}
! m0 z8 X5 K( M) s
& w2 i; U" p9 L2 ~, l4 \" ~Int32 input_sample(void)* [4 Z7 V/ g6 T! X, g# ]& k/ ~& G
{ - W& [$ x( ^9 k) t
AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 k0 v) R; P2 o% p8 ?: _ return (AIC31_data.uint);+ c5 L0 ]: u% @$ O; g8 Z- g" n7 q
}
+ ]- V! m ~! V! Y# Y& C, O6 c7 I) u
|
|