|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 z* l" A @8 x0 f6 s+ R1 l
main文件:2 U7 s" E# d# Y( m o
interrupt void interrupt4(void)
& ]! c# I5 Q# z{
( N6 R- R" i- o% a" x Uint32 sample;8 {& q- L1 D/ y
+ J, c q+ d u8 B" a
sample = input_sample(); // read L + R samples from ADC; N, F0 ^, e5 j9 j* I1 y" |
output_sample(sample); // write L + R samples to DAC ; f. K( l) e# N7 Y7 f/ ?0 _& ?9 b
return;
- {9 S1 S! [: D; i}
) g1 R" z7 u* C+ @% Z+ M c. }1 B
1 S1 P0 u' E0 m2 y6 U8 Xint main( void )7 g" A+ D1 F4 ~* H
{1 K* |6 h" z+ }9 j) V
2 h( q/ x2 j1 ?5 G) l) _& M L8 M
/* Initialize BSL */
2 y4 p1 H' `& e4 @ EVMC6747_init( );3 }/ H: B" c0 ?+ e
/* Call evmc6747_intr function */1 J1 ]6 `( z- P& }! [& i9 J$ k S
aic3106_init( );
" r0 X5 h1 h; ?+ j while(1);
2 K Z1 ^, h3 F2 L+ x}3 |% q, x/ }& {3 r. C. J* @
V+ ]; G9 U9 {9 S* h
8 [# `0 W) K8 f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
K& E1 g# |7 a% |2 d% P/* Initialize MCASP1 */
# w0 g: I4 h& s mcasp = &MCASP_MODULE_1;) @# f+ [0 n9 `2 G9 b- N4 ~" ` F
mcasp->regs->GBLCTL = 0; // Reset2 T- O3 B+ z' u
mcasp->regs->RGBLCTL = 0; // Reset RX
+ O( e) I8 o% X7 P mcasp->regs->XGBLCTL = 0; // Reset TX- S e2 `! E) i. d& v* A/ }
mcasp->regs->PWRDEMU = 1; // Free-running6 F+ v+ k& {) a6 ^+ F
// configure McASP0 receive registers
) {" k1 y1 J1 [: N3 J mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 e4 J2 Z# q3 a! |& o7 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, s0 o6 o( a7 G, e/ G# W
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( p- r4 Z: O& Q' Z2 z$ ]; i mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 C4 c; u4 m$ O: T3 h5 `% y" a
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ u" O3 a, m5 M6 e# e7 ] mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ P5 R; O7 {: r& F
mcasp->regs->RINTCTL = 0x00000000; // Not used
3 y, O" G+ k N4 Y( l; v/ B6 C9 | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 X! e+ ~" v0 M3 q4 X6 x
$ C2 N" F6 m4 G! U1 m9 P, n
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) J' } z; h$ Y) I# w/ r# g mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# j" }- O ^& C, b9 h5 Y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* Y. |6 V, }# R! r6 n
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 H4 Z( \; R# m mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
X6 ~& d6 s, k u6 J+ C$ i mcasp->regs->XTDM = 0x00000003; // Slots 0,1( o) H; Q* l4 J) e2 Q
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
w6 _6 L" w8 s$ H* @$ q, b: w mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- ^; \* a& T# C8 d: ?+ g( j
9 Y6 f7 L3 `% H mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
) L4 N- @/ i3 R, m! T2 X- g mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. |& W- G! U0 _- U2 { mcasp->regs->PFUNC = 0; // All MCASPs& ^! k& X; t# P0 W5 h( D
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: l) m. ~& y1 s0 E3 b! f: u2 N
" _( a( u* @$ O. D8 Q mcasp->regs->DITCTL = 0x00000000; // Not used
' ^* `% ?3 E! F3 P' s mcasp->regs->DLBCTL = 0x00000000; // Not used
: J- J7 @& h" o5 P2 c. L mcasp->regs->AMUTE = 0x00000000; // Not used8 Q( }8 s% |8 B( S X7 r0 ^
^" N* W+ P- j* `' H) f/* Starting sections of the McASP*/1 m; H: o5 w2 [
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, ]4 g% v5 e# e% { T3 {2 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 s" x- ]5 _5 x+ S0 w( ?, n F mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % C% b- N: C- W5 ?% f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; Y6 w6 F3 Z3 C$ _' m6 B* z9 ] S1 o
! t* g8 a5 ]8 X) C
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % M- n7 [7 H1 y" g; p! X( g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); o* e2 G* J3 y6 a: {9 Y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' t e; g8 U9 e4 B# k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 H8 X# |5 V2 p( v6 [
: ~; Q( ?9 j* @% C3 J x7 o' l mcasp->regs->XSTAT = 0x0000ffff;
) D9 @- `: d8 X& t mcasp->regs->RSTAT = 0x0000ffff; 8 w2 \4 x( S1 L# |" m
: t0 t. J. G3 \/ ^
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 f9 e+ T& b9 w: m5 T/ {4 m4 Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- [0 P+ ^+ g: P" T
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * i; P" Z- ?, v4 r1 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( o& b# a% ?+ m! `( P9 J- v5 `: B4 X& @
/* Write a 0, so that no underrun occurs after releasing the state machine */5 l: F/ A( I" x. W* E# h# ^( b
mcasp->regs->XBUF5 = 0;! e5 t, [# K4 @
mcasp->regs->RBUF0 = 0;; C( y4 @9 Z, u- k) }
0 S0 ]# ?6 ^9 g+ u* v
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, s) R9 z" u Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ x: [) ~2 f% n' }2 r
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * m6 C, _4 P0 W6 R' R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* F0 Y) |3 B; x- X( k4 A
% X2 \% s$ P+ s: ^! G- q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 d: e& W, g K( O# |, t# R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); t- M; f- s0 _6 c. M
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! G2 v" S* o+ l. A4 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% h: ^! x' E- u7 q0 B
% ~; [0 ~$ Q( d0 E" T
CSR = 0x0000;
5 z+ t! J$ J' O8 Z% { INTC_INTMUX1 = 0x3d;
! r5 S* c' w+ f ISTP = (unsigned int)vectors;
$ v$ t0 t: J9 [/ H0 c ICR = 0xFFF0;
, S9 L* Z! t, {4 W m/ v IER |= 0x12;
4 L0 s, R4 u' W1 `6 @ CSR |= 0x01;
& D3 Y: p( S5 V) e. o; x& X9 \+ @7 }# j8 b8 I( C5 ~7 e, X
P7 l6 C) Z7 ~* P+ k r8 M: J. F, W+ {* r9 X
还有就是两个输入输出函数:; o P( g/ d) m$ e$ a* Z6 P7 J
void output_sample(Int32 out_data)
/ G; A2 D7 S0 r; O! z4 ]8 R* L3 H{
% @, `' E! v) o( ^ AIC31_data.uint = out_data;
6 v* V1 B: H* S9 E4 q, w" n; t MCASP1_XBUF5_32BIT = AIC31_data.uint;
; q# a6 o, t& ?) r! |0 m}
. J" J% H% j r" f) w
, ?7 n* P; u W7 I8 jInt32 input_sample(void)
7 b p" q" K# z{
/ c; ^- F9 q- V3 H V% y& u AIC31_data.uint = MCASP1_RBUF0_32BIT;/ e$ I/ _6 F6 g& E5 ^
return (AIC31_data.uint);
; `3 |( y; I: C) A5 m}
h* q+ j# U/ t; N: L2 Q- [3 }6 X/ J, C7 O! s& c" X9 x ^
|
|