|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 k C8 T0 q2 hmain文件:
$ q- G7 ^/ y) k0 a. E; x; minterrupt void interrupt4(void) , ~8 ]! u) D8 ^+ r. T4 D: g
{
* S! u4 Q1 B9 G+ j3 K Uint32 sample;
) r3 ^# ^- Z8 R- } Q5 U8 q7 l) O: b0 q/ f; N
sample = input_sample(); // read L + R samples from ADC
$ r2 I9 X" v$ ?9 T, k; R output_sample(sample); // write L + R samples to DAC # `. W4 \" h9 @$ f/ \7 J% d
return;4 B- g& H @7 ~0 f' Y" F
}
9 |% k' I2 ]; b( _4 i3 A4 F6 |7 a" A" L0 h& J p, c4 j
int main( void ) I5 c1 ], x! \+ W) c8 h8 b
{
) B% D H7 C9 ?1 h+ U7 M1 ^$ ^. @, X* b" S3 D$ `1 W, Y
/* Initialize BSL */
/ U+ {$ |* b* g* f EVMC6747_init( );+ W8 \ }+ Q# B) l, |
/* Call evmc6747_intr function */
+ q% l) o0 S0 A aic3106_init( );
% T; ~7 _# [5 V4 a, d3 | while(1);+ b# S* C! \/ \7 _9 B* ?
}
# u1 f9 g' D! \8 H# ]/ r
3 P' N/ _! b1 ]! |+ L6 v
! b' n8 N0 [4 V0 C" L8 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; @- N% Z, K# [
/* Initialize MCASP1 */# S1 j6 w) B8 f- c C
mcasp = &MCASP_MODULE_1;
6 Q7 i4 _9 s: f mcasp->regs->GBLCTL = 0; // Reset
4 F% ~& W# \$ i/ q7 x: [" r9 j mcasp->regs->RGBLCTL = 0; // Reset RX
) N ?% w$ M. A3 Y% `- t1 I1 K% |- b mcasp->regs->XGBLCTL = 0; // Reset TX
e9 q( i4 m8 f. O mcasp->regs->PWRDEMU = 1; // Free-running
0 P( z6 ?: G- L, t* [3 a. [( @ // configure McASP0 receive registers A3 F" E1 z7 U( Y7 N( V8 B
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ {# o; m8 r" t& } mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
A# t* M T$ f$ m+ y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! J( G5 [; N, ^. G: O: G: J$ k
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" c6 O5 J& ]+ W! K+ q3 ]! F7 N3 P mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 y6 V+ s1 Q0 k" f' `4 S
mcasp->regs->RTDM = 0x00000003; // Slots 0,1# i; ~9 ?6 }& C# K9 S+ D {3 N
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 D# J6 Z3 W; \5 w0 I mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* i/ J6 N j1 m. \. F2 [ O" g) D6 T3 j+ y P
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# r) |+ _) {8 l7 y1 i mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; k# c2 r. T7 S& [! M% E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# f e( Y( H0 _% n mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' Z* M8 Z% P% ^6 R9 H/ v5 a mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& R5 i7 q+ W. o+ A# w7 | mcasp->regs->XTDM = 0x00000003; // Slots 0,14 S* ]9 {2 r1 z1 w B' T, L
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ F4 K3 r2 w7 v- V9 \ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 w: U4 {% S$ c6 N* i
$ M- K4 j/ l- g mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN% I( ]9 K8 Z! \% O0 f* k! D+ u
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) J* Y! Y: Z! a6 k2 j) _8 ]
mcasp->regs->PFUNC = 0; // All MCASPs
# v+ U5 [% w) N6 P8 d, z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 f1 B7 g9 E6 z; `
) Q$ J2 B7 {$ F( c5 P% B+ P mcasp->regs->DITCTL = 0x00000000; // Not used( B, v( p/ _ ~( K) h# @
mcasp->regs->DLBCTL = 0x00000000; // Not used& C8 |; |) m% k! K
mcasp->regs->AMUTE = 0x00000000; // Not used
+ K: J! p! ~! D# y f' y3 V" i. f4 w8 a2 f/ `: C' V t# E" j: @
/* Starting sections of the McASP*/7 T% T# q- D# D5 c3 Q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
^( n$ R2 W+ a0 Z |& U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( h) n Z0 U9 \3 W8 l mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & x2 z$ n! u5 Z$ F0 y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, s2 t) _7 B, A# {) T
+ M1 G8 f! X0 X- r8 t. j t4 j4 T" ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; \& P' |* E- }# T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 w! u& v0 b- Z& `& o+ c" Y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 w* V1 c5 Z4 P6 m# U! _: W2 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 D- Z- F3 ~" T: l" M1 `
8 |( e/ c$ |. V. g6 x mcasp->regs->XSTAT = 0x0000ffff; / w( ~9 N4 K5 `: E ?
mcasp->regs->RSTAT = 0x0000ffff;
* r4 j4 F l5 y
. ?! p1 Q) }8 G mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; k. {* I9 s" N2 r6 [! N3 g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
S" ]$ J5 U* w- C0 s2 s mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 ` S* i3 @5 u R/ z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- ~( J: v: ~: B, d$ c) h- W$ E1 X3 y2 b
/* Write a 0, so that no underrun occurs after releasing the state machine */
9 ?8 }; S+ Q% n- Q3 I mcasp->regs->XBUF5 = 0;: h* S5 ]6 y1 y- e v: T
mcasp->regs->RBUF0 = 0;7 e0 \, Z0 H+ J
$ [" H5 ?( n; t8 W# V. o mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) H _% j4 S$ O1 L! A" {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) {/ o6 y* G# Q4 M
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ @7 R- u, {" M/ p, I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: K$ H/ q4 v5 L8 K1 k
7 t8 k! s4 |; ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 ?+ q5 p5 S6 S' ^: T: T* ^* q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! F' x9 h9 d& ^( n# c7 q5 p mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 I4 \; X7 |) [, c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# V+ e9 T; b5 A! h; S) I% \( r/ ?0 ^% r! c! f* u+ ~, i
CSR = 0x0000;
( P4 D* d7 ?4 A INTC_INTMUX1 = 0x3d;- H6 Z" P0 W: m: x" p
ISTP = (unsigned int)vectors;* U0 j3 `% X2 ~* b6 J
ICR = 0xFFF0; . ~ s# t& T4 _& L" W' k: g
IER |= 0x12; ; i7 o# C* |3 m" p9 V" |7 |
CSR |= 0x01;
- ]( z- ^9 Q; |4 q9 z7 g5 C4 _: d, W: U) F9 W
. }! v& Z6 y' C' e! q' G! ?4 Y, \8 i# x! ?, c' P
还有就是两个输入输出函数:. g' m( n: Z6 P+ D
void output_sample(Int32 out_data)
( r, C$ C1 u7 T' O% G9 n{' P$ K: l' n/ D3 W Y6 ?$ W0 p/ }
AIC31_data.uint = out_data;
8 r8 U7 U% _0 O MCASP1_XBUF5_32BIT = AIC31_data.uint;
' V' ]9 p0 I8 f/ X0 ]; W& u}
3 h: J9 Y' b/ G8 A9 D$ m8 Q' V; N u+ |" m9 {2 H: X- r9 D+ ^
Int32 input_sample(void)" e" V, h8 S5 @# B
{ ( T5 z1 T W8 s' r ~/ z
AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 D9 [- ?* K/ r0 R* U return (AIC31_data.uint);) u+ l0 R: i! q
}
. A( _" B& c4 J/ {7 V+ m) \ t* G# b, B5 O" V
|
|