|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, ~, D4 M- M% l& N" L2 Q; ~# m- w: @main文件:
! l' g, y; s' c6 Z( w, [' [$ Z$ v. Qinterrupt void interrupt4(void)
2 U" ~$ C) S! N7 K$ S* j! }& b{/ o6 z6 `+ q, |" Z, q/ v+ v
Uint32 sample;9 ~# L# j2 [1 Z* m& g" h, t
/ X9 v- {( M( E2 r! e+ i2 K sample = input_sample(); // read L + R samples from ADC: r; `3 |9 ^: n1 ~2 P K# X) Z1 ?( X
output_sample(sample); // write L + R samples to DAC
1 m# j! ^6 r+ U2 a! z# @0 N return;# w2 c4 g/ `8 \( ~
}9 ^: ^0 {7 Y5 G' \6 c
0 ~; `# g# M0 s$ N- `
int main( void )' Q) P& }1 P* M5 g/ G
{8 J8 z$ C) Q3 Y0 _
" J) N' }# W9 e \( e3 K
/* Initialize BSL */
' d3 _9 [! A" g# d EVMC6747_init( );
7 \7 Y% x+ K2 C; u /* Call evmc6747_intr function */
+ V _) T4 c5 g: p6 i aic3106_init( );! ]4 f$ I! p5 Y5 b
while(1);; t8 h1 G ~5 Z* ^7 e5 ]
}
) L. I: m I" x0 R9 v
( X8 u1 p8 N! s4 b9 E; S
1 S3 d3 \6 x, p: d6 }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 G9 F8 j% V: s! v! K/* Initialize MCASP1 */
" n/ A9 G J5 M mcasp = &MCASP_MODULE_1;
8 _1 y G" }1 e+ X; y) l mcasp->regs->GBLCTL = 0; // Reset
- o+ P9 d0 h: b mcasp->regs->RGBLCTL = 0; // Reset RX
% [" ]5 q, @% g/ g mcasp->regs->XGBLCTL = 0; // Reset TX G! l* ^& y4 I2 H) e0 G1 q8 B7 ~
mcasp->regs->PWRDEMU = 1; // Free-running+ W( V7 \8 x5 s6 ^" r2 A
// configure McASP0 receive registers
: I. t4 u9 [* n4 X mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! A" a) z$ i0 ?- a; u) K
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: b1 i( L9 p" I
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& G2 z5 v# j; Z" G: @4 n mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; O# l& e8 s3 f6 ` F6 |# U; U mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)2 n# w% Q& A1 l$ ~; h
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 s9 B1 p, h: a$ P( v; ?, i, U+ C mcasp->regs->RINTCTL = 0x00000000; // Not used4 |" Y2 @3 s5 z3 s" {5 H& b) _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% ]: z; I. i+ Z$ b0 E
2 [0 g8 x4 Y1 B) g9 c2 R mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
: m+ @, |: L0 k m mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ L0 A2 t* p' Q( i+ `9 H mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 m% Q) r; H. t, J6 f$ `8 H mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: w1 y8 m# G4 q' M U
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) ^0 L# g4 H1 }0 N8 W6 r mcasp->regs->XTDM = 0x00000003; // Slots 0,1- K' ]8 C5 S$ a' m; _; R
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
# E% N3 l! B: G2 G g H8 c# c2 D0 O mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- Z- i& s( T6 ~2 y: ~, [
& ^6 a& O0 C; A
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 H$ k5 S, S0 q) y- c
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; [! E% `& ~( u0 ^/ d7 m' L) Q
mcasp->regs->PFUNC = 0; // All MCASPs
' b4 T7 R. l6 j# t; c mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ j8 m* }) c$ p# `5 E
% H- z, S5 S6 [0 V. w5 _" V
mcasp->regs->DITCTL = 0x00000000; // Not used
) s! K* v* Z W& y* U mcasp->regs->DLBCTL = 0x00000000; // Not used
+ ?6 t! b& N9 c0 ?1 Q* p mcasp->regs->AMUTE = 0x00000000; // Not used
' w$ N4 E$ B3 U( S# k- z8 `" \) J! w9 h
/* Starting sections of the McASP*/0 Z9 l% ^) N% \& b. O2 \
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 F7 P& z: s1 u- D5 Q2 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ w A9 k0 x- \, k% E1 I1 X$ H7 S mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- V, r& e. r3 C4 f6 N& a$ | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& I, c+ e, _- u6 T6 V1 C" z
: `6 L+ o! A0 X- A
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + a! ~- ~3 \6 l+ O4 W% e* Q# Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 p- L& L4 P+ S' t& W: h
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & u& A$ F! R' a# F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 l, Y+ v8 ~! d4 \6 R. j5 y
6 a m: }1 L1 D2 R9 u4 ~ mcasp->regs->XSTAT = 0x0000ffff; 1 u1 k7 y& z2 J2 f
mcasp->regs->RSTAT = 0x0000ffff; + Y8 P8 n8 j' ]9 G1 L3 A( z# G
9 V$ V. z1 {9 G5 N i0 b" x) |; t
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 ~, n8 R$ j. c+ M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 c: _% l0 {; ^; r1 { mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / [& v) w- z) [* x" A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. _& c. R- h4 H% ~# n& b2 L k
1 @ z! A- J4 A9 V
/* Write a 0, so that no underrun occurs after releasing the state machine */" J5 Q' r- b" P# k
mcasp->regs->XBUF5 = 0;
$ V t. U- G5 B& m, u mcasp->regs->RBUF0 = 0;
8 r7 S/ s. u: H1 D
( |8 q& z* T6 Z# c- e mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' P, ?; J5 {0 V$ g/ e! `/ c9 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- X- q! y3 D/ H6 L* U5 F
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ @8 W5 Z7 `6 {3 w4 x- E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 s. k& ^/ l' I+ {9 j/ i0 j# ?; ~, }" z9 C) a
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 e: P3 q6 Z( p/ E9 f1 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# u, m* c5 {5 f3 |5 ]( H mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# u/ s, y5 E0 z7 B1 o+ u- a% Z/ F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ N8 W X; \9 ]' X0 y
0 P- r( ?. e2 l3 Q8 L b% t CSR = 0x0000;/ d/ E) {# G* q9 C
INTC_INTMUX1 = 0x3d;
( s0 s2 L3 x& T: N* D' W' @6 T ISTP = (unsigned int)vectors;8 `: o* G+ W: M( t3 U1 \2 K$ B
ICR = 0xFFF0; 8 F2 h2 E$ a. A+ C
IER |= 0x12; 6 v; {" C4 R3 O/ R, ]
CSR |= 0x01;
( g+ ^5 T! M) g" c/ m; i7 f8 J6 \3 ^ \
2 r7 V O3 c4 Q1 Y/ A) v# O8 z- w F8 e* W* F k% r
还有就是两个输入输出函数:
+ `& E% ]# _+ w0 W) Z$ lvoid output_sample(Int32 out_data)* A% z* f# P h, k' z
{
) |% J- f# v+ B" v6 {/ C) | AIC31_data.uint = out_data;
1 j* p, t0 P" }# s& E7 t MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ H. B6 r7 o& O* |}
7 C5 i+ U q. P0 k9 a
. r, e# R% U$ `4 H' vInt32 input_sample(void)9 O3 l+ v9 _8 q: k- L
{ 2 m* \; |- f9 h3 r. O
AIC31_data.uint = MCASP1_RBUF0_32BIT;
; t. D0 i' M$ X* y return (AIC31_data.uint);% O4 I, Q8 B. s
}
% V3 x' @6 d& b I1 p Y5 B
+ K9 _; O0 z* ] |
|