|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 u6 G9 L+ n) v/ Y7 U% x/ y3 {
main文件:
/ C& i2 e2 O; z% ]$ H! @- _interrupt void interrupt4(void)
8 S9 j' `; s, W{
8 [( M5 @8 l- c; h" {, L' W+ E Uint32 sample;& b# r3 z9 Y8 n& e
$ ~ j( e8 }/ Q! r$ A! x sample = input_sample(); // read L + R samples from ADC
8 D ~2 c' [! S output_sample(sample); // write L + R samples to DAC
6 u# a; {& c! }' x$ w& ^0 n return;8 n' a% o( N) g; |5 A
}
$ P7 Q. E' T0 }8 q& N' `2 q- V* a, I
int main( void )0 u: P$ t. I# k5 @, A; W# O) i
{
4 z' `3 J/ O4 S z( [3 ^% I
, ^% S9 k% N5 `3 W2 Q9 R6 |* g /* Initialize BSL */
6 Z' X; z1 k$ N" N( ] EVMC6747_init( );1 s6 h4 X0 o7 T5 g
/* Call evmc6747_intr function */
; o. s, C( m/ b' P! l" M/ y- } aic3106_init( );7 d1 e0 m( j; ~# b
while(1);
+ [$ h: e+ [7 D2 R8 {0 f}
% }5 A9 `4 Z( _9 t: A; q% Q o( u* }' N$ r
( b* C8 l$ I4 s3 d3 `, Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: N: w9 x- l& ^5 x4 h) d
/* Initialize MCASP1 */, i P4 @: {) n* E. ^
mcasp = &MCASP_MODULE_1;/ Y0 i5 x* c6 R, p
mcasp->regs->GBLCTL = 0; // Reset; {' E8 X6 a2 @* ~
mcasp->regs->RGBLCTL = 0; // Reset RX
4 ~' `5 ]& p& s- g8 [, R/ ?; y mcasp->regs->XGBLCTL = 0; // Reset TX6 R9 U) w7 r9 T6 V. P, \$ P
mcasp->regs->PWRDEMU = 1; // Free-running
1 c! A3 @& p" I- v1 o, s // configure McASP0 receive registers) ~ _. x7 E+ B6 C; Z. e. u
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" P1 @+ g# Q4 H5 u$ q4 M% P+ A6 A, e
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: V& m+ u$ z$ g8 M* t, P d& X
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ }& S1 s! N+ `6 X9 ~
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' U- t+ [9 N- n$ H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
( F" I2 Q* ^0 l( { mcasp->regs->RTDM = 0x00000003; // Slots 0,1) g1 @# O5 I! ?1 W8 T
mcasp->regs->RINTCTL = 0x00000000; // Not used2 V; Y- @) M+ I( e$ J$ t
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 {; W$ M% X% O$ o7 f
1 t; o/ L; g8 N; F, Q, n
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 r" f% N0 u8 A. J1 m0 Z
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ v" W3 U3 m. w mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' D% a. @5 H g$ X
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ T" t: v6 D, e( h
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 W7 }! p# V! R. J
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% @# ?& C* V" o- B mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit3 T& [* z l7 h, ~6 I/ j
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 {- E( ^1 ~6 o7 [1 E. d' x
2 u ~$ L! j; e1 S; ] mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
& ?& F$ x) b4 K4 q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
5 F1 ]9 {& z! S. U/ s mcasp->regs->PFUNC = 0; // All MCASPs5 m5 x! _' W8 a
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! y& W) Y; x0 Y N J
$ t* E1 B3 V( N1 _ mcasp->regs->DITCTL = 0x00000000; // Not used4 p/ i+ M* H. M N% `+ E. s
mcasp->regs->DLBCTL = 0x00000000; // Not used
b8 } S# }) Q$ v+ y mcasp->regs->AMUTE = 0x00000000; // Not used
/ s \. b: a7 Y2 X& u! i2 c- B
; m7 K0 H! Z, `6 t+ m) y/* Starting sections of the McASP*/1 w- a" M+ a6 Y/ x( j( q( j* Y2 ]
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* \4 T9 C( q" V/ f; T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 a2 f2 t7 m5 B8 I, Y mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( O% F; S$ n; V, ]5 U1 ~1 W4 @9 S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, o. t }+ O1 ~. z+ h2 Y8 ?6 F5 F
! l8 w; A* k0 a* |- v+ j5 X
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 a8 Z6 ^+ p1 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ O9 Y+ f9 E6 Q
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) G6 \2 E: l/ p" D; o, i2 u0 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 v1 l, a" @" {1 X
3 o+ {' A# k, d, Q ~ mcasp->regs->XSTAT = 0x0000ffff; v5 @' v3 i9 @ s) v# U
mcasp->regs->RSTAT = 0x0000ffff; ! s7 @: W, q" B1 D/ r$ N) r6 X
' e# Y7 r$ h |8 J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; V# S; u" t$ D7 a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 v* ^/ O# C' j* k7 m mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - X+ x4 n4 ]! q* ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ O% m+ f) `/ b- ?4 b1 N
3 m' F# h8 q2 r3 A /* Write a 0, so that no underrun occurs after releasing the state machine */$ ~' P1 [# E |2 ?
mcasp->regs->XBUF5 = 0;
v( q/ f5 f5 X7 ? mcasp->regs->RBUF0 = 0;0 f$ Z: n0 y B+ {: D9 _
8 m" G; g. T1 [. G mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! z+ E Q- O# k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
Q* s o) k( m mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 x$ T/ P6 L7 g; I8 J7 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ]. Q$ f: J' ]0 ^9 j: [
2 r7 O. \2 V" j7 @0 k- z0 f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 |% S; a, f, J' e, X- ~# k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 A4 B5 ]+ ? U
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & @6 q7 k' Z7 d1 z) }. u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# d/ K! d( h$ S; p( [/ P, Y- _* K' k+ y4 f) s- D: R6 W
CSR = 0x0000;4 ~1 k9 V& `. p( q3 i# z* |
INTC_INTMUX1 = 0x3d;
x3 H. g0 W" B" y/ n- } ISTP = (unsigned int)vectors;
1 q) {: m! V& v8 L5 s. ` ICR = 0xFFF0; 0 g! c" [. A& L5 j+ w. X' K7 B+ i
IER |= 0x12;
6 Q4 [* P) I4 ?/ @" E CSR |= 0x01;
8 P( x- Y* |- f7 b; @+ s9 i7 b( b! O
+ o6 }# K7 n! o/ ^; ~6 U
# z; ^$ D# `* G& s还有就是两个输入输出函数:; |' s' I6 _8 o. V
void output_sample(Int32 out_data)( R. d2 F. [% b% Z9 G2 N4 f& e' W
{
/ d' M* g+ s7 t! W' U, q5 x AIC31_data.uint = out_data; ; Y2 i5 P9 c3 t- N
MCASP1_XBUF5_32BIT = AIC31_data.uint;
. E: Q- W5 B, F. X}
6 Z; A+ j' s! p1 n- W2 g( l/ a* t7 C9 V& C+ I6 X
Int32 input_sample(void)4 Q5 F2 K7 N* ^8 Z6 X. N! m
{
/ L- ^" P) M1 h$ @- I& v. v0 ]% L AIC31_data.uint = MCASP1_RBUF0_32BIT;
( c& _0 d7 w; V, U return (AIC31_data.uint);
! @5 ~! r, c) A$ t5 t4 [}
4 S; S! ^3 I5 ?4 P* J* M7 u2 M) X) n# u5 \+ ^0 Q7 s. R
|
|