|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( h$ L8 n$ i- l0 Xmain文件:
# s% G3 N: d& U; Iinterrupt void interrupt4(void) - H% w6 P! z) H) N$ ]7 |
{, d* n5 |; G$ \5 }* W
Uint32 sample;
* }& R+ w @2 x6 J; B9 [( v# E
* S' N, ] }- G; f J5 S- v' v* a/ f" V sample = input_sample(); // read L + R samples from ADC6 V0 N* ~3 r0 L+ ?
output_sample(sample); // write L + R samples to DAC 3 R& W* C1 m6 k6 U: l, c
return;; s! }2 \/ ~ U
}
$ z; l0 U M* _ [, o A) F% _0 ?. I) I, W" ?" F" r( {
int main( void ), d( ]1 V& n4 X6 \8 Q1 O9 i
{# a; O1 i9 ^; j/ y- j( [
5 ], h% W, t1 s1 l /* Initialize BSL */
( J( i( G4 k' F% g; g/ P& e8 T EVMC6747_init( );' e: }0 |# S6 H
/* Call evmc6747_intr function */' n' z# m" |, O6 i5 J
aic3106_init( );* w+ a* o" ~8 X
while(1);* S+ M9 Y3 f7 d
}4 X# a& w" ~! T8 Z
$ q" K' P" `& V; _9 @. t
9 `2 n8 `3 W' z% h) h, ?9 e2 Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% X5 q% S ^$ h: V a/* Initialize MCASP1 */
: l. v" U& t+ s' A/ \ mcasp = &MCASP_MODULE_1;
/ O7 N( ^8 q1 S' z mcasp->regs->GBLCTL = 0; // Reset
" G0 J, _6 C. D, [ mcasp->regs->RGBLCTL = 0; // Reset RX
1 }, A7 B: M2 n; _/ d$ T! { mcasp->regs->XGBLCTL = 0; // Reset TX0 Z3 B( B, L2 S o* Z, z" o
mcasp->regs->PWRDEMU = 1; // Free-running: C6 o% k3 D6 q, m7 U5 L
// configure McASP0 receive registers: P- ~& [4 a2 L2 z" r- W
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 y6 G% g: B7 H; T! o
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 S( h1 t5 ` {( D8 V0 n8 B mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 Z1 O/ I2 U& Q! R" z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 O3 `; p3 L) g' c# q5 \5 S! `: _ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)2 W5 s( h1 z' {
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; [3 V. R2 S8 w5 m/ W2 { mcasp->regs->RINTCTL = 0x00000000; // Not used1 X( }0 S( ]$ F
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 P$ a% O. S3 R) s( p* }
& e1 H& B! r' K6 j4 k! { mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- g/ Y0 i5 v2 w" \7 c* Q8 i+ s
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- H. k7 e, R, D: q& T0 D mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; r' Z L/ z1 R2 ^# L) J2 o) X9 {+ Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 A; H4 b. A; i mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, s$ {+ _8 m' f! A: x8 W" n! M
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% ]; l( t% m5 o' ]/ j mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) g% ^: v2 u% j mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 v* {. |0 ? x' p
; P/ {0 L4 M( ^ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- r* o9 O! ~ }( T1 j mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
5 p3 {9 [; z4 @% f y) f9 u, K' p mcasp->regs->PFUNC = 0; // All MCASPs
8 r; P1 F3 V r/ ^4 i$ D- z7 Q8 T mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: F; i: }! k2 K* ]8 X
* d+ _! m5 K9 m/ g. P mcasp->regs->DITCTL = 0x00000000; // Not used" F$ p( g% _ c" \# z2 q
mcasp->regs->DLBCTL = 0x00000000; // Not used' \! F% H& h! ?' D" a% q5 Z4 A/ _8 @
mcasp->regs->AMUTE = 0x00000000; // Not used
) P; r2 Q. l, w
6 @1 f, u2 o! e" O. Z/* Starting sections of the McASP*/
. m3 W" e! R! q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( v }: y! l: @$ k; n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 [3 b$ z- ]* b2 x mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" h$ Z [2 E" A! [# e* z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ y# |$ r* W, x( U Q0 y4 W
: Q6 I8 y% `' e! t mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* z' l) f( w: g( W' c3 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( J0 E3 K0 \$ \; n. K mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! Q4 g/ T3 K% k# W; f6 U+ T8 y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 C: D0 x! i& x
9 b! f1 o% O, G" N) s$ k$ b mcasp->regs->XSTAT = 0x0000ffff; 8 b' A! o- d4 m. I! F
mcasp->regs->RSTAT = 0x0000ffff;
# C; ?) `3 g0 k# A2 r! ]
* t4 M" S4 w- f* E* F* ~ N1 } mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 G0 d& v6 Z& A# I2 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ g% h8 X+ R; }# Z2 s0 Z( B
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; b( t9 m# ?" s+ R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" M: a% b. |5 k- O) g6 a5 p, {) _
/* Write a 0, so that no underrun occurs after releasing the state machine */
$ |+ Y0 R) K$ |8 a( e mcasp->regs->XBUF5 = 0;
* R% X3 j+ v0 l; I mcasp->regs->RBUF0 = 0;
, m+ s; x) U7 o# P* g4 @" v
# i5 {! D! u4 t. h! M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# `& S! }, e$ b9 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 D- a2 J5 E/ I t: \1 ?
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ ^, z. H, d+ e8 [6 t* } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 _& B4 P" L0 \
7 L8 p' o$ m: F: b$ l% |5 i mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" X# T5 H" L, g" \1 l4 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; ~' }7 c; W' Q# \9 Z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 d1 @) B/ W# {+ x5 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, ^& u8 \5 W5 {( C
- ^' J$ e# Y9 p3 q! d/ w1 Y CSR = 0x0000;
+ t: L7 a* i" y. z9 d1 M INTC_INTMUX1 = 0x3d;" C S$ g" O2 m; C8 O
ISTP = (unsigned int)vectors;
% t4 b9 M- c( L) y/ q% v) ` ICR = 0xFFF0; h. U1 F: [% s" y* f8 e$ B
IER |= 0x12;
8 A; i4 v: b1 v" S: N5 o* j CSR |= 0x01; ) [' {# |* G1 h0 k0 r
2 z/ X* M/ ?' `2 n7 t1 w& R
9 g% F6 Q. _( I( S5 e
: {% r' {: J+ f! @% z. h还有就是两个输入输出函数:) j; q) |/ B. p O
void output_sample(Int32 out_data)6 p. J* Q: z) M
{" w( s' R7 m; _# }
AIC31_data.uint = out_data;
6 R# C2 l' R( |9 ]6 F& H MCASP1_XBUF5_32BIT = AIC31_data.uint; [3 Q/ N$ W, Y- u) g7 P4 f
}
9 L$ H$ J7 S! i: z5 Y$ _0 t6 \$ l
" k/ @! P4 o% [* n9 o/ G9 V- y \Int32 input_sample(void)( z A$ ~6 N& s5 N8 `5 a8 [" q
{
* y" `1 P: h1 X/ s2 D AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 u, ]8 v. {. W9 V5 _5 w: g/ p return (AIC31_data.uint);
6 P# r* X4 N/ V4 o q5 g}- y$ A( X1 H8 _4 ?$ A& M4 |- q$ c
: q3 I9 g* t7 k! h4 }1 j0 J |
|