|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 f. M, u- y4 g1 Smain文件:
0 k9 }+ M- {! A% t! Binterrupt void interrupt4(void) + j) d3 z* K+ o- q, K% A
{
( u" z# B6 o4 r' w6 ~, Q+ [ R4 P Uint32 sample;6 c- M& p$ ?+ X; q: U0 r5 C. s
+ D4 z/ _$ m3 w( a7 u/ ^! y
sample = input_sample(); // read L + R samples from ADC4 v$ r( i! @9 Y
output_sample(sample); // write L + R samples to DAC / w, d8 t4 s# f- N9 V
return;! U8 b+ V6 N# B" J& e6 S: l9 f
}
. [! C) d7 |7 e. M" A5 N5 s- R' k) A- [2 Z
int main( void )2 f. Z7 m' C) j
{
5 d8 v- W7 Y8 M+ F
% F8 o$ s9 _2 K, m /* Initialize BSL */# _) ?* y! \ P
EVMC6747_init( );
) D0 v+ y" |; P8 W9 u /* Call evmc6747_intr function */
7 u# u0 S @* B1 {, s; a% d aic3106_init( );
5 ?" d( \9 Q O6 N0 \' d* g, h# B while(1);! @3 _2 A7 T0 P9 O5 ~
}
7 |3 h% s0 n6 s* B
; V$ U B* K7 W) E4 S$ }8 W
* T7 i, m3 {1 N7 d6 _# T* Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 a) C7 ]. U% u/* Initialize MCASP1 */& K6 e4 i. F$ E: C3 e' ~
mcasp = &MCASP_MODULE_1;
+ n8 c1 M7 |# l6 g mcasp->regs->GBLCTL = 0; // Reset
; _0 b* `% U3 p9 f mcasp->regs->RGBLCTL = 0; // Reset RX
# |: ?" E! T$ `5 f* R& d mcasp->regs->XGBLCTL = 0; // Reset TX: S' N s% ~" n3 d, z) _7 V
mcasp->regs->PWRDEMU = 1; // Free-running2 Q0 {& t& }+ g* p$ J
// configure McASP0 receive registers
7 q$ B9 D. x2 ?+ y4 P3 n! O; l mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" Z( _. ~- ~* Q% _+ G7 `0 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. o/ l* n9 |, l/ l$ M3 W: ^ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ p) i4 c$ G* S& X# x& B- W* E mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' A2 E+ g* b3 G) F/ y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% r" \1 V3 H! O: K mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ a: T4 H a% v- r# s
mcasp->regs->RINTCTL = 0x00000000; // Not used8 g( k& x9 m, z! b+ c" H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, p, }8 J* e) h( A' W0 I% K3 M( `1 E4 ]+ a5 B d3 `
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' h2 `" ~* u+ @; N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! l' r" J' N; N; Z( R mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% c/ v- q& `! e' [# [
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& F5 r4 a0 g. u1 k3 z( K mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, V+ \* U4 x& u2 x; t$ { mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" |7 a) R7 k3 v, X( @ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
# G V7 a# E8 ^, o2 m! k& y; \ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
a$ v) q' Q; t" B
- m( X. q& x9 f4 g' n9 H! J mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: B1 |8 ^' f2 H/ q% i( s0 |
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
% K# `2 }" ?. ?1 \7 W R mcasp->regs->PFUNC = 0; // All MCASPs' O- x- t9 U% `. s# |3 E* u
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 N( z1 Z" ]( c4 x- y
' ]: z% }8 Y) ?) |& [1 P, J( a mcasp->regs->DITCTL = 0x00000000; // Not used
9 P0 g+ k) J# p g! x2 E mcasp->regs->DLBCTL = 0x00000000; // Not used+ F X+ p" Y6 C; l0 a' l; C
mcasp->regs->AMUTE = 0x00000000; // Not used
( J8 L8 t$ P. H- O3 l# b" B& T+ p1 W8 C
/* Starting sections of the McASP*/1 {2 D8 ]+ P$ f
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' B% W# s: S: i" u2 C' `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ p- g8 J; p/ H/ h m1 ~' f mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 c8 l) _; x8 ]/ R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# _5 J3 D$ G5 @ J n% M
1 c1 O3 w% m T5 w9 z9 H5 _: ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- M: a" E: p. ~! b5 Y2 y. p( ^9 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( {# d9 k7 {8 T! i z D6 z7 y& y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) h! _, o) ]% N& d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* P$ L9 D0 P8 q, M; \
5 A2 D0 }4 t+ o3 E- J+ W
mcasp->regs->XSTAT = 0x0000ffff; @1 W$ S, t' o- }
mcasp->regs->RSTAT = 0x0000ffff; 8 O$ h- I. s% ?5 v* t+ p& s: u
$ y1 R% ]7 l% t
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! O) c/ H+ Q4 B& K; ^9 N/ M! T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: G* x* b' T8 ~; B/ V
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 G9 S. R8 i- G2 E8 t6 L# |& p6 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
u6 z1 s. c+ m3 p% n# D0 d! {' p- z3 N- e- d, n1 F) x, [* T
/* Write a 0, so that no underrun occurs after releasing the state machine */" F- H3 w* D* P
mcasp->regs->XBUF5 = 0; w { G* T L
mcasp->regs->RBUF0 = 0;* t6 y# E1 z; v0 S8 w8 D! M8 ]
- D& z% `; Y: O B+ p1 {. N3 ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 M5 t7 _& v3 N* o( B) N# v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 P* }0 |6 Y+ C/ A; g9 O2 a5 l mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 t- D! j% t" C2 p1 V9 R+ j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& @0 N6 T J. F, g* c" F. ] V- h. W5 K7 }
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " |2 b3 j' I6 \9 h& B4 U) @3 j! E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 W2 l# u: g2 J/ ~ Q
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% c' X' O$ u O# O$ N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 s" i& Z! C$ x7 d2 }! S1 G
1 k- j \2 D+ ~8 }4 X5 `0 J CSR = 0x0000;
* [% W7 v( u8 v' u! c INTC_INTMUX1 = 0x3d;
6 _. I! @& b/ ~ ISTP = (unsigned int)vectors;' u+ D0 ~- m; p/ T
ICR = 0xFFF0; . B3 k! z4 w1 Q3 p
IER |= 0x12;
4 f8 z8 g+ B$ Q2 I6 V. t CSR |= 0x01;
: s0 ^4 q& X. }: g* X7 ~5 m- ~! A+ h! v& J* p
- ]0 f- @* s- h6 H& r
- k& a6 ]2 b% _6 Q$ m! q, P Y
还有就是两个输入输出函数:3 N7 Q7 y* u- b. M- v
void output_sample(Int32 out_data)& O" D0 W* E3 R; p6 @0 z
{3 c$ v: G- _ J
AIC31_data.uint = out_data; ' I, D& W6 c& B5 A: i$ o$ c: Q
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 F" h( f' A; J- v* Y
}
! q0 \4 [0 J$ D$ x/ }2 v- O# d) H3 H$ O7 E# u% D H
Int32 input_sample(void)) j3 b4 u7 y/ M' ?% r/ I' m
{ ; W1 N1 e$ B' S& P
AIC31_data.uint = MCASP1_RBUF0_32BIT;1 i. C$ q2 Y0 J
return (AIC31_data.uint);& @0 ?( f P/ ] g5 ]8 g1 J
}+ n) y& F0 M; V x' h; Y
; `: d7 l7 z+ T4 p4 v( _+ M- g5 G |
|