|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! w. m- o" t- |, ^4 P2 ~6 p8 r
main文件:
3 A4 T$ `. j( _ E0 p& dinterrupt void interrupt4(void) 6 k1 l7 f) z I: |
{5 ?" t& N& B) n- T! S% h6 E* ^3 y, `
Uint32 sample;
/ t0 L1 F+ G% `) x, B9 m; T. w6 e6 g# U: d
sample = input_sample(); // read L + R samples from ADC+ N* z# C- J; K5 Z. s
output_sample(sample); // write L + R samples to DAC 0 C; M& D. H' n) p# T
return;" k7 o0 K) D8 D% ?) _1 m& [
}& D' O! x; Q: w, h
7 I. }2 M& J5 {8 C. Oint main( void )
$ ^8 o L+ c+ x9 R% H3 U, Z! n3 b1 B{ V" z0 h' I- u, O
" g2 g4 ^2 M9 v# n; Y+ a( f
/* Initialize BSL */
/ i1 u" Y Y2 v5 G& M: i EVMC6747_init( );& N& B5 Z4 K# P1 J( v
/* Call evmc6747_intr function */
; `, [' m& @- s) X' L aic3106_init( );& a f* U( g: {9 k# n5 L% |
while(1);. s; z. E" \* c2 }4 P o- U
}
7 ?) {' P1 Q* z7 \$ e$ [( C" W7 ~* ?& ?5 ^0 z" R8 J
. I% Y9 t0 b- z. q+ p$ @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& i6 a7 p$ v) ^, b/* Initialize MCASP1 */
4 c0 P* k& T( k5 W mcasp = &MCASP_MODULE_1;& y' e% X1 A, @" ^( |. X, a
mcasp->regs->GBLCTL = 0; // Reset- M7 R* N" V4 M$ u
mcasp->regs->RGBLCTL = 0; // Reset RX
! @# z J& K# {$ f mcasp->regs->XGBLCTL = 0; // Reset TX. b! Z( S, e0 P. X, F: y7 k
mcasp->regs->PWRDEMU = 1; // Free-running
0 T5 G- ^- l$ w/ S5 ]+ Z+ ` // configure McASP0 receive registers
, X/ ~+ }" `. O3 g mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" ]# J6 o& m: c" Q6 t! O mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: W- o- z% o; L1 _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. |. r! d; E; [! C mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 W- J8 L2 A; t0 c: C! m! _6 B0 J mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 d. E3 A3 _) o+ E: \6 D9 w0 V mcasp->regs->RTDM = 0x00000003; // Slots 0,14 ~" P4 O5 O" J& m5 H0 n. _% k
mcasp->regs->RINTCTL = 0x00000000; // Not used
- ?- g; c1 Z$ S y( n" ]. H8 j mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 k% s3 j( { b* S w! l* w% G1 v
( @% E6 }0 l3 T' K3 O) O
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 J- h: R4 h" m+ B" V- V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 k+ q1 }( J& @* _1 W0 ` mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 K4 q8 N) H8 }2 Z* V* f/ i mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 W! |: x4 `! ^1 K9 f, G) y; f1 i mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' U" @! |- L# `/ P+ {% f mcasp->regs->XTDM = 0x00000003; // Slots 0,12 Q9 z* }2 X0 c6 i* x
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% V0 Q& w1 M( d2 M# b9 t2 t- ] mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 y& f5 C6 o, h. e& }7 @
9 e. x+ H* t/ l mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 ~. O0 l, a. Q y$ K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 h% m7 ]. y, C" B/ Y" @ mcasp->regs->PFUNC = 0; // All MCASPs
7 L% o% D- m- Z: l& I+ j mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ m: T3 O9 x& k6 T {. I2 C
0 A6 V* K/ N3 n: `* z2 E$ Z
mcasp->regs->DITCTL = 0x00000000; // Not used4 [) p2 }7 `* u. Q4 ~. u
mcasp->regs->DLBCTL = 0x00000000; // Not used' _2 X/ e8 N, |# z
mcasp->regs->AMUTE = 0x00000000; // Not used
7 A5 @: l( X) T7 A9 W0 s0 R
' \! C, }$ }. k& }( v/* Starting sections of the McASP*/1 w3 p" w0 |+ j* [
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 ]& B8 K3 `5 b1 P) K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 S; e& E& F& a' Q# z9 \! P: m
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; a/ F; @& W& f; T$ a7 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* ^( l' m. n0 h: O; V( U" j* L" A7 \6 `( P, z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! q c h' \" r3 N/ w: g2 k( Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- z6 e& M, A/ T; P* z% {' e( N
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. z; i# |# r6 o8 @0 w3 ?9 T- o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ f' A- Z5 E5 P" T% Z- c: F ?) a N# U; F" i- T
mcasp->regs->XSTAT = 0x0000ffff;
$ I( i. s3 ~: I7 Z( i' b mcasp->regs->RSTAT = 0x0000ffff;
! b' M( j6 \, p8 G+ A+ A3 Y! z- V5 V& n
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 v2 G8 g/ [9 X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% |, ^! E% t3 \' P) m0 M0 }) } mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 D" }( K: b" z- [! Z) J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' [9 H) m9 R2 I2 G1 k
" w5 M& e; z& h P9 ]* { /* Write a 0, so that no underrun occurs after releasing the state machine */, r3 W" R) i! o2 r @# C0 O5 U4 U
mcasp->regs->XBUF5 = 0;9 o) k, p9 P3 o2 `; s
mcasp->regs->RBUF0 = 0;
) _6 ~2 u$ ^6 ?3 p8 K( w) W/ f1 T1 W; \9 |0 J: D; a% c3 i
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% v5 m9 I, q8 e9 L4 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 Q& Y0 J( O7 p! b8 l6 P. a9 w# [ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; ?+ V r; q9 e U' d& Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" [* J9 U/ z! C# G
, j9 A( e/ E% h4 C* U- ~! @! { mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( \$ g& v& |8 l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! T# H) } V. i( Q2 o4 Z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 X% c' T: ?2 a* o# ~8 i) Q J: K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ a; y+ f! L _ N
4 Q- Q& N' J/ |; l CSR = 0x0000;8 A) Y$ }( Z# N# M4 o$ w2 g
INTC_INTMUX1 = 0x3d;+ |7 ~% W8 L3 m' y$ |4 B
ISTP = (unsigned int)vectors;9 V1 o7 T5 V' h9 Y
ICR = 0xFFF0; 0 X& D& p! o4 b: j) N, O
IER |= 0x12; 7 R* H. D- G5 r- e
CSR |= 0x01;
+ `. @9 {& E5 o5 M- |1 w
4 y; v. o0 ?0 y/ C: S
! v- ?# b4 `; x0 `
6 V1 ^- V/ c/ p" c A2 c还有就是两个输入输出函数:
, U* D; V# A; G) mvoid output_sample(Int32 out_data)
9 t; X5 p" @0 C+ `{
) r( ], Z6 S& x+ | AIC31_data.uint = out_data; + ]1 U. r. }% g( J. p4 ?
MCASP1_XBUF5_32BIT = AIC31_data.uint;* H f7 y. h8 O) {8 ^, u
}
* K# S1 `/ U* |) R% ]) I! k$ B1 E. v. d# T4 }* z9 O
Int32 input_sample(void)6 @7 g8 ~# A. A6 @/ A
{
( O1 Q9 Z' o: d2 F$ z* T! d* O' v AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ {: S3 C+ f2 k& t. E+ j, q/ z return (AIC31_data.uint);
; {0 e5 K- k2 j) [0 Y- I}" ~7 k7 J, E2 X: O) ~) w" w
D1 h. |" |" A
|
|