|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" { c# {4 |/ d% @ Pmain文件:! R1 Z4 n0 z- Z9 K
interrupt void interrupt4(void) ! z, q8 _0 N1 n% q2 N, @5 W
{2 Q' z) Y/ q7 T$ K5 o% }
Uint32 sample;
6 N Z# ]* H; K0 z( c: q- ]5 B
4 O8 C. Y. D1 E+ I; f, ]! F" U* j sample = input_sample(); // read L + R samples from ADC
* O/ J t- G! V$ @3 |: G* {% @1 p8 i output_sample(sample); // write L + R samples to DAC ) k2 K2 M! n; ?% z
return;) g# E, [. M+ W, }* W
}6 P9 m& Q. v6 u6 h4 u6 U
: y9 W: u) p2 }2 R9 Q3 Y; K" g: mint main( void )' ]3 Q5 U# i) k' ?: Z) a6 N. P
{
8 J4 i* l( T6 B5 W* K. }- Z( T
/* Initialize BSL */( ?, C. T6 {$ F$ O% I
EVMC6747_init( );' b- G# G3 C1 H% x9 r% ^& k$ a
/* Call evmc6747_intr function */$ V& a/ g" ~. I% J
aic3106_init( );* v# Z2 t9 ]/ N7 I: e- q
while(1);
, D: Y* i# \- P$ o4 q+ h6 v}
% [& H" {) y. Y6 u& b9 }& e/ P/ [4 {5 B. `5 H9 d& r& o0 Z
& q8 L# J- x( a9 D$ E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 N' c, f- F' v/* Initialize MCASP1 */" r A' I! z1 z: r
mcasp = &MCASP_MODULE_1;
`) Y6 j7 C4 A- g8 x( @1 j mcasp->regs->GBLCTL = 0; // Reset
# B4 \7 O) G2 n0 u' F mcasp->regs->RGBLCTL = 0; // Reset RX
- E+ G) D( u; S. P* i5 c mcasp->regs->XGBLCTL = 0; // Reset TX
, F8 b a, S. M) C7 F: X( p7 @ mcasp->regs->PWRDEMU = 1; // Free-running
) T1 U; f: B' w/ B8 L // configure McASP0 receive registers
4 i2 E! i8 x9 e2 `. C- B mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used0 [4 ]7 J. `0 i1 R! f
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 b' N- ]5 |# n+ P' r+ R" [
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 h: T# p6 \7 O/ D' K- _+ O3 v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), g6 |. g; y- ?5 p, W; ]& X) H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
# L1 }! B0 _9 t5 c mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ n, g# V+ G+ {- l
mcasp->regs->RINTCTL = 0x00000000; // Not used& ^7 N; D) R0 }2 y/ R( G& a; B! {
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 @% p, J4 G+ u% Y- @; J
0 s) P+ a3 t( t( Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 k2 e6 T1 @9 f) @; P& j$ y' U mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 e" e/ q$ C' o* q& l/ ]1 V
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* o- J* f0 d: K& y4 D4 A
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 }% _! T" o2 R6 n5 d) ~6 n4 R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ D2 M. `: w2 X# b* {- s+ [ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 N. X. p: k# }9 }. t mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 F0 p8 v# \" b# G7 d4 s mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, K: d6 s6 M8 k$ S' O; t% Y% k
% l2 Y: l3 S7 R# O9 `& o+ g0 A mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
9 W7 A D7 w, z' @$ b$ V mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) J7 w3 w" |9 T& m+ ~' P3 }$ s: A
mcasp->regs->PFUNC = 0; // All MCASPs# f8 k5 O/ n9 C- t5 r
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. s0 ]" }' Z/ @3 j b) S4 K, r* J' E U
mcasp->regs->DITCTL = 0x00000000; // Not used
+ A+ e+ |; t8 S0 j5 T! A3 ]3 o mcasp->regs->DLBCTL = 0x00000000; // Not used9 r" f+ ~* H' r# T. ]0 c7 {2 K
mcasp->regs->AMUTE = 0x00000000; // Not used
% X: v0 R) y" a1 j' r) {2 A4 ~; s4 {" c7 I4 A9 E+ C
/* Starting sections of the McASP*/
8 F! E% f$ P) D6 k mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 }1 \ T) [ z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 e8 S8 `8 T1 `) u mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( ~" V' e' U2 U5 b; ^2 C K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, ~" d5 q+ z# @% p$ p- x' }' z' v/ y
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: q; y8 M6 O) x# D" f2 c0 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); G* v N) E+ @; l
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 _* K$ y/ i) E( w( \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! k9 z- g$ X6 z6 Y
2 W, Y9 ]% ^ f! h
mcasp->regs->XSTAT = 0x0000ffff;
9 A2 u+ d" e" P9 G mcasp->regs->RSTAT = 0x0000ffff; ' K& w& r* x( @7 T3 C
, Q8 o3 j2 [* Z; g6 X mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; M3 X' A6 C; x! G s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 @! l, I8 E/ y0 i mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : Z3 r' c' @% ~! t9 T' W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) F, H1 Y7 g4 L. P6 J
; Y0 ~0 }9 ~, q! I /* Write a 0, so that no underrun occurs after releasing the state machine */
) L/ ` n' w Y3 P mcasp->regs->XBUF5 = 0;
% l& o) R) e& V/ m( R1 x) I mcasp->regs->RBUF0 = 0;& q8 }( m" {/ h" A
" J$ j) s b- M& R
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; a2 R! K2 k7 k1 s/ Q8 z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 t/ C" @3 a- v) g7 l
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * l" w ^8 ~6 O3 Q+ |6 s8 d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# }& i" e9 [; n6 k# B0 @
5 m# }; c2 q* \8 P! l' _& M
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / ^3 @6 }, o( d* Y+ V, ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 f1 {9 S: ^6 N" k1 a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 W# c% S+ J# w+ w/ z3 b8 o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 D4 |$ z2 Q* e- m' G; e
8 F6 I3 A- b$ F0 w4 {) F! ^2 K
CSR = 0x0000;' F) D. @8 T3 ?" o" K
INTC_INTMUX1 = 0x3d;
9 v& D8 V$ B% }- A ISTP = (unsigned int)vectors;6 {* p, v3 P) C' n8 [
ICR = 0xFFF0;
5 o/ y8 r5 G. S8 i4 r( ?. [" y IER |= 0x12;
* ^- m% @6 q" K: I) x CSR |= 0x01; . {% |! m2 I9 f% w7 ^# |
: v% G% A: e; n4 U4 H& ^
3 _2 L+ D" A& ~( a% w, j- d: r+ b; J1 ~, x& C$ k$ A# k, k+ ?
还有就是两个输入输出函数:
" [" N0 }' x4 z8 p# I: U/ gvoid output_sample(Int32 out_data)* x/ |+ w* R a x# U, X
{
$ P" m% O% Z) y0 Z0 c, H AIC31_data.uint = out_data;
% _& \6 b' C) {* Y% G6 X0 \ MCASP1_XBUF5_32BIT = AIC31_data.uint;& f0 e' [0 \: a6 f
}2 a# I5 H& k- s9 ^
, Z1 P* J, S4 u% q1 U; q" u: PInt32 input_sample(void)4 Q4 s; H. B( ^# R
{
, ^5 R# y6 {% M6 `1 ~8 Q( _ AIC31_data.uint = MCASP1_RBUF0_32BIT;" j" V' d- t: w* i$ V0 d8 Q7 T1 H; S
return (AIC31_data.uint);
% r9 u( |" ?/ l% _}
/ |8 {$ ]) g+ r& |( ~" H! g: V: |
|
|