|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 d4 w5 R( r; K) }/ P$ [7 { b. A+ l" \main文件:2 W6 t* E3 @# v8 k# W9 w
interrupt void interrupt4(void)
& b6 ~; I. ]: w. |8 T+ z' I S{3 m( a% W4 ~% n1 d/ K5 K" d3 X& W
Uint32 sample;
, z0 ~# y& h( M& x }; o h1 R
. f/ h& N$ O! Y% V sample = input_sample(); // read L + R samples from ADC
3 R( R" q5 G9 `+ [9 ?% R output_sample(sample); // write L + R samples to DAC 5 ~1 d. v, a8 _: G6 W. t
return;
+ K2 P0 m/ R3 @# f2 j}
' u/ l' x( X; p1 i8 F7 _: M* ^9 Z+ Y" B' g* |
int main( void )% E: B# l; ^1 x9 ?/ R
{# h( j5 X. g. u$ e
0 }3 i& P I' d" Z3 k% z /* Initialize BSL */
+ c) _% e1 m, S! J/ Z# o# t9 V; V EVMC6747_init( );; i) f q C* f& X/ i
/* Call evmc6747_intr function */; i9 ~' z7 }. j: ]( G( \
aic3106_init( );
7 Y4 |8 f' o% `' K& f while(1);) n; o7 Q$ L0 ]! H; ~
}5 l, A% a: U' F# X1 |
* ~* f# d$ M' D; J2 n9 d5 I% ^, q9 i3 Q5 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- a8 L7 E; v8 Q, q/* Initialize MCASP1 */
$ N! H, ?! v5 K( c) X; d mcasp = &MCASP_MODULE_1;
+ |1 p# v8 U0 V/ R* u( S& F+ ] mcasp->regs->GBLCTL = 0; // Reset
: l+ o( [! v9 ]- d/ i8 D) |& [5 A2 C( G mcasp->regs->RGBLCTL = 0; // Reset RX! n8 w( r+ j P! j
mcasp->regs->XGBLCTL = 0; // Reset TX% K; ^' J- I0 ]9 G8 r7 v* c3 u
mcasp->regs->PWRDEMU = 1; // Free-running* g% _4 j# \' ^; D/ ~3 T y* z
// configure McASP0 receive registers
# v2 `0 |' k% ~ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used- i* @/ x. [- t
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 Y o% o; m/ z4 S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ z9 x# P- \4 b: S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 ^: P8 I# r& g% z; B- v8 o6 I mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 R) I$ w7 E6 g' j3 O! p( b mcasp->regs->RTDM = 0x00000003; // Slots 0,1
9 }' w) T( V8 w4 t9 l6 U; d mcasp->regs->RINTCTL = 0x00000000; // Not used! Z( R( X; J7 w3 M
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 R1 D' l" K+ C1 k
! t, h9 V( @* C0 U" G; q ~0 S# e mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ `4 q3 Z" O z f
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ A" x$ i9 ~6 q. a1 F5 ~
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# H9 y7 W# d! L' U7 x/ K& P3 W: V
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! T. i z5 d7 g
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( c) c9 n$ r) e' h: t, @! m mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ F' F' R$ Z5 i5 z# d
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 D+ z( \1 `! M0 v' D1 x mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" s: d- ~1 ~- [; R+ X+ [) m) z( g0 g
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# P) A9 {. N% Y/ x: Q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, h+ [2 A8 Y" K+ c9 i. O1 v mcasp->regs->PFUNC = 0; // All MCASPs
0 ]; f6 h& a7 W, e) G, |' O mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) b5 @+ C' R% E2 L! v
- A. l* [. {! {. J mcasp->regs->DITCTL = 0x00000000; // Not used
, z: e! H2 q8 \4 B, U' y4 m mcasp->regs->DLBCTL = 0x00000000; // Not used
5 b$ ~5 y) R9 ?/ C( ?$ I mcasp->regs->AMUTE = 0x00000000; // Not used6 i4 S& A1 r3 A3 P
" A3 C" J) X; d5 e" x5 z/* Starting sections of the McASP*/( R" A+ a+ A' d1 i" R% e9 U
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , ]1 e0 @- I- Y+ m6 g0 x6 a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
2 s/ n l# \3 X Y- L% [) L. T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' h1 A7 v# o. s! ~3 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# S+ G9 ^1 W( Y9 r) d/ C& R7 a, \" T3 i' C$ V7 G
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # x) G7 _$ a1 o- s" |. n5 v L$ u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* p( X2 \$ w1 Z0 s% N: k! Y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 I! N! w) y$ H$ h- Q: b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ n* M9 r+ y4 M( [3 X
7 V6 e+ {7 H1 i" q8 u- [ mcasp->regs->XSTAT = 0x0000ffff;
- ?+ j/ C! O+ [ mcasp->regs->RSTAT = 0x0000ffff; + k. x5 W: j* W) O( u' y4 u6 w
- _1 O) `% [ \ ^9 T1 B9 O
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 ~" d9 ]- W' c9 m* M/ L3 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. x! _3 s& ~) y( f: l& i. q mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 k5 E: A1 q) Y! x0 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* v0 }4 W* B. I0 v) B; @: X& J
8 a& }; x8 W0 l$ P7 B! z+ U /* Write a 0, so that no underrun occurs after releasing the state machine */7 {0 O/ l ?) E4 z; O! d1 X% N! ?
mcasp->regs->XBUF5 = 0;1 O# T! S7 a/ T n9 m
mcasp->regs->RBUF0 = 0;: i7 a7 Q# l. n- [
2 C: i l$ }$ s4 a X8 I mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! F, T" ?. g7 A: C9 ?& G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 T$ v [& }0 ]3 D" u; ]
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : ?+ `7 C0 y* @! y. v, b5 J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 |( Y' T# Z9 ^( T. }2 p5 v; Z
. |8 m$ y2 J% l ^9 {% B mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% O/ V ^' j# i6 [5 h, |6 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ I" r! f9 i$ D' Y% |+ W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ M' H! b: e! W5 o( }# Q) x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( [/ z$ k5 I* p" _9 ^; @ z
' D1 X9 o" S: B+ }3 n: ?
CSR = 0x0000;
8 n" M3 K3 t7 x A0 i% i3 F INTC_INTMUX1 = 0x3d;5 f! J/ ?! [) M* [) D$ t2 }, }
ISTP = (unsigned int)vectors;+ O/ M0 `5 D/ g6 F3 G: j8 i* m
ICR = 0xFFF0; - P$ ]" ~+ S) i
IER |= 0x12; 8 S1 H- F' I: D; \* s/ Y* y
CSR |= 0x01;
+ { W& X: {% I2 G0 [5 g# W
5 o' C+ x f" J( g/ z7 i/ d- b" ^( p7 \
& I( V9 ]% G7 F
还有就是两个输入输出函数:
9 O7 |0 @, r7 L- h* {0 p$ G: a& kvoid output_sample(Int32 out_data)
' M1 F' a. X o{6 E4 q9 a1 l4 t9 f8 x1 m. j. r
AIC31_data.uint = out_data;
. L1 L* ?! ^6 K2 h2 z7 q1 O0 K MCASP1_XBUF5_32BIT = AIC31_data.uint;
: U3 H9 L& X+ G/ E}& j- V& i/ ?: | W; T* P/ y
, j4 I! @4 |, x& ^: a3 yInt32 input_sample(void)
: z" b# y* _" t$ y1 c{ 6 ~1 X- i/ ?5 v4 X
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' F6 N$ Z* c2 v2 Q return (AIC31_data.uint);# z/ A% V4 q* j* \( A1 l# U
}0 ]* `! V7 {7 R3 U
% Q/ X% v2 u% ^
|
|