|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" Q3 W% h& S& y
main文件:5 j3 S* f( L" N# ?" G
interrupt void interrupt4(void)
# o( ]3 Z; J2 f! h, P) p{% P. N4 {4 ~4 V9 }5 s
Uint32 sample;8 b& i1 e! b5 Q" B1 u/ Z# A: j
8 r, d `8 F' k7 L sample = input_sample(); // read L + R samples from ADC
- [7 ?# {, K/ P0 L output_sample(sample); // write L + R samples to DAC
9 B$ v1 G, }# h! _4 F7 `) X return;: L) Z% f0 h) V# g
}% O+ X" C0 O2 U' q/ r! v1 m0 O* g$ L
6 O8 E. }5 i+ U, F# a
int main( void )
$ E8 X2 o3 r2 J8 o% m{
3 s! ^ i1 s, T4 W) J) l3 t6 Y3 |- T& ~1 h0 w) ?, P* S
/* Initialize BSL */4 v+ q9 u7 d" a6 k5 P9 V
EVMC6747_init( );
) } C$ w& R) X0 R0 M /* Call evmc6747_intr function */+ {$ ~& O. | ]! F- A' {8 {
aic3106_init( );
! H) T' m; Z6 A1 D while(1);' W9 G0 a& e1 X9 r4 L6 \6 R$ ]
}" B. o; M- I n% P9 {$ s+ n
5 b, o% {1 o& j
* i K% N ?1 m2 H8 x0 K: c6 ]+ I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 X) K: f, v. |. Y
/* Initialize MCASP1 */
! g/ B v) m; s7 p* ~9 f mcasp = &MCASP_MODULE_1;$ P. i! v3 u V0 @4 F
mcasp->regs->GBLCTL = 0; // Reset
U3 ^$ Q* F' Z% o: l mcasp->regs->RGBLCTL = 0; // Reset RX# R" N: [' N: Q! R6 X P
mcasp->regs->XGBLCTL = 0; // Reset TX3 j r6 X4 u& M) h' N
mcasp->regs->PWRDEMU = 1; // Free-running
9 A P! d( K3 C; @( ^6 K3 z // configure McASP0 receive registers
+ E3 {; h8 {$ u6 \# ^7 i# s mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# ]- M, T- t, \- Z2 f$ P mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 W+ l9 R2 w3 C6 h- c$ _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 o& Q$ O! }+ ?8 e9 u5 Z$ J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" E; S5 M9 r' K' ?0 W/ @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 G3 N, d# H8 q8 }9 M( \+ W ^! [5 {
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, v+ b1 q f) `% z1 F; f' P mcasp->regs->RINTCTL = 0x00000000; // Not used0 \4 D c/ b. Y) A, J: g. v
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& f1 t0 W1 U( k0 S& m- ?, |8 E
* o2 \, o' B8 d
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
" m1 s, D) H; w& \# f7 V3 @: k; N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 s* Y+ K* Y; ~: h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ h! @$ k3 H0 F0 M* Y# [( A% h6 c mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ E& A+ N- [/ @: \' z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) i8 C1 ~8 i& ~7 W3 M j
mcasp->regs->XTDM = 0x00000003; // Slots 0,1" K2 [8 V% V+ p+ N6 f- F* o9 t
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 z7 b( z/ i( a# b' N mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- N9 n$ j+ r, E3 ~0 [9 o" ^# V
7 K, g2 y, u2 t6 b# C2 b mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( M5 H+ b- w/ c+ v _ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 U, A" H" [$ n4 x
mcasp->regs->PFUNC = 0; // All MCASPs9 i. R) k @( w- S
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" l) u' V- w' I/ K
6 Z3 Y! a% v1 E9 J* ^ mcasp->regs->DITCTL = 0x00000000; // Not used
, P" x2 j! S% g8 D1 H$ J5 I mcasp->regs->DLBCTL = 0x00000000; // Not used3 a5 j% C7 o6 o! ]. m2 ~+ r
mcasp->regs->AMUTE = 0x00000000; // Not used
9 h. q! S. ^- p9 J' j% }+ V
* Y0 ~! [* }' ^/* Starting sections of the McASP*/9 J' R% H0 c2 b2 }( H* c
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& n5 j5 Z v, N5 @: d+ K z$ t# N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 ^& }' Y7 l2 {5 { mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* g7 a! m8 p* d2 w4 w5 C3 B' T. {8 r! S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ i4 ?# u4 F" s! l! S9 g& l# `0 f* |; _+ n: S Y: T) l
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' W$ w. n( U2 I# l' S' a; ]( R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 R& d+ V* [6 J: m
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) J, ^2 X' f9 P( Z* d; S& }, m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& y! Y% B: @" T3 ]; ~7 D
3 ?+ d3 q; e& P& z( Q mcasp->regs->XSTAT = 0x0000ffff;
. v; @4 [3 o2 \3 S# K8 u, K mcasp->regs->RSTAT = 0x0000ffff;
% M+ ~* ]# z9 r! [( k+ j- K" [0 v: `" }% r9 s7 O( @! v9 a
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 ~9 F' g. @) Y" ^6 v0 z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ Q H) m7 J9 G
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( w. l8 s% F) c* q! f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" s2 J8 H2 p7 a1 O2 i. ?: q* n- l$ Z/ a9 K0 P6 r z$ T7 l/ S
/* Write a 0, so that no underrun occurs after releasing the state machine */
8 @% j" s. i: O G mcasp->regs->XBUF5 = 0;. f( z0 `1 y0 z) F5 x6 G
mcasp->regs->RBUF0 = 0;
3 T i$ c9 q( J: i
! E9 Z; f3 l& N3 s! A mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 B$ K4 b$ a2 j8 g' D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ `9 X4 M2 ?' ]- x ~. b
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" d: }- u9 L5 d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, ]- [& x5 }* s
! s; g- z; z' c* A! [( H8 E mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 X4 Y4 i+ {' N* Y/ y' w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" r& m5 d+ `8 c$ Q
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 J0 q; n0 w9 u2 u* y+ A4 w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. _+ ^- f+ z( x. M& K; f& n
8 j. @( ^+ |* N7 p# f
CSR = 0x0000; M5 H* @6 h1 |
INTC_INTMUX1 = 0x3d;5 R+ U8 l* `! Y: K' L% A
ISTP = (unsigned int)vectors;
; b+ A. ?5 P' }2 ?" m- e5 P2 ~ ICR = 0xFFF0;
4 \& ^4 F! C+ j IER |= 0x12;
o' ~$ K" q+ y CSR |= 0x01; 2 e5 X S" A: Y* j( } ~
5 t+ g7 C4 J5 A2 o$ s* {, ? ~
! V+ ^8 v) k9 w4 R1 U
6 V) L3 W4 ]3 L# f: T9 x( I0 {$ P还有就是两个输入输出函数:* q" a8 d4 o+ H5 F& `
void output_sample(Int32 out_data)2 T1 T! `$ q7 D8 Z1 I
{
3 ?; S3 }3 a: h4 _$ J AIC31_data.uint = out_data;
- ?. t l' l! B2 f( d MCASP1_XBUF5_32BIT = AIC31_data.uint;
& j+ S# [7 v% T1 R' G}
# n( q- H, s4 X: _! F# Q! z) w; z' b4 w6 s
Int32 input_sample(void)
9 _. X% A- ^0 ?1 y' n% e{ ( x' y' E4 K1 R6 O& s+ n; F5 C
AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 v" ]3 c# H I4 L( K3 O return (AIC31_data.uint);
1 Z+ L+ ~6 x+ U" [# M}: W% b' S: `' h8 d5 v( R& m
6 \- H/ X( d/ i |
|