|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
g$ { ?- @$ F6 Q. ^main文件:! w3 W: A" Y0 g9 z0 l
interrupt void interrupt4(void) ) G `; x, e' n" P
{
0 ]: X+ n' S1 n" a# t Uint32 sample;
: G! i7 e( `. m' e) T% r8 v+ Q9 @
' Q3 c% _+ d2 D k: `# A6 i9 K sample = input_sample(); // read L + R samples from ADC5 x p6 g/ E5 I: _" N
output_sample(sample); // write L + R samples to DAC $ f) g; k* B% f+ }: W. P
return;) J# `* R. {( Y/ M
}* L+ Z3 H" {$ j# U( z1 N
* i! m; Y6 i# fint main( void )+ p/ [# h5 R; e% n4 F) i
{- v, X( M i- a! r! c5 g+ F2 v
# D9 Q. G, P* [5 ~$ E7 C9 I1 E6 q
/* Initialize BSL */
1 H: \' P& A5 y( }* K EVMC6747_init( );
- v5 @' S* ^& g6 y /* Call evmc6747_intr function */
! G f2 d4 j; b1 O% p# {. {5 s' { A aic3106_init( );
1 K2 B$ T( N; B6 T9 i while(1);+ d% n. i6 l, ` {& ?7 w
}
5 a. R- F% v; x5 d
6 ?/ F! ]/ A1 Z0 j0 \
1 J; ~6 q6 Z3 B2 h+ O$ Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& Q$ h' W( E; ` q( Z/* Initialize MCASP1 */
8 v% j* N, L/ W" K6 h7 x/ _ mcasp = &MCASP_MODULE_1;/ Y0 W c* j; t
mcasp->regs->GBLCTL = 0; // Reset# z* {6 l4 f# k9 |: m& O) G, j
mcasp->regs->RGBLCTL = 0; // Reset RX# }- t7 @6 M) e+ L9 X/ g
mcasp->regs->XGBLCTL = 0; // Reset TX
, a4 ~) R9 ~, j/ W mcasp->regs->PWRDEMU = 1; // Free-running9 O2 P7 E% ~7 {3 ]) G, A
// configure McASP0 receive registers" H# s) D: S" \6 C
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( ^& f+ n* ]1 ]( C1 U
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. Q7 h2 H. i# ^" O) r; X
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 f. c% n$ B& Y$ {) T+ O' E
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 J6 D( x: I1 {; s1 C2 R) N mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ b0 s b$ T! K1 O# Y5 K- r, O
mcasp->regs->RTDM = 0x00000003; // Slots 0,1- {: \/ N' }. v" }* e
mcasp->regs->RINTCTL = 0x00000000; // Not used. i# D9 i8 A, _% ]. ]
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* e' t+ `, \2 n; ^
* A# k. V3 S) S( r* T/ E mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: _4 X+ ~2 X. U' C+ b
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 I0 c; M4 c, u6 C3 Q( o; z5 e# K/ m mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 y5 ^8 R [) R9 f% n8 _ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 j- \; }# \, z: Y3 n1 r mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: s) L) B2 O' U b6 i. P1 p
mcasp->regs->XTDM = 0x00000003; // Slots 0,1* o- Z& _7 l; b: t& G5 h4 z
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 i: n" X% U7 o- Y* @; C7 B
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* x G; t! k6 r! V f* q
% x4 d; l1 S1 d' c- M6 n Q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- L8 j3 n- O( R, c! Q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( F5 n* V) K8 q. L- Z
mcasp->regs->PFUNC = 0; // All MCASPs
& W/ @' \3 c% T% W# F. q3 K mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) Z! E, [- N7 `* V% |6 W/ T: C( k
% q) U) B% |) O* g$ C6 h mcasp->regs->DITCTL = 0x00000000; // Not used$ N. K! e% y/ a8 P+ C) @
mcasp->regs->DLBCTL = 0x00000000; // Not used
7 V; K) j* b9 m mcasp->regs->AMUTE = 0x00000000; // Not used
; Q" P4 h! }7 @' `4 ]4 L; }: G& Q+ I" G
/* Starting sections of the McASP*/& i9 D) N& |* A7 K. c: O
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ `8 ?4 Y! T* }5 f* V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 N6 o+ M2 E7 j0 @% q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! J, J' j* T; u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 Q3 F4 z- ?+ U
3 T. C- V! D# ?; N9 E4 X# l0 c mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
|& p+ M! x4 x) W! e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: {* P8 V& q7 A! [4 F0 o3 l9 a! X3 z* X% S6 F
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * e2 K% n' C% h) u9 Q, o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& Y/ A8 s0 [7 b% A) s
% H0 o, R0 T* @8 ]/ t5 w$ O mcasp->regs->XSTAT = 0x0000ffff; # d7 }2 d/ S0 S4 {3 Z- Z
mcasp->regs->RSTAT = 0x0000ffff; 4 [/ c3 C& J+ L
0 i1 ^# j# a* |
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( {% v! f4 y& D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ W& r2 v" e; P+ J3 Q$ _/ x
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * ~- k% s" j* j8 U. l& }$ X9 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- w6 x; _: ~7 j7 @# q* ~- f' Q4 P( U0 s$ B$ g6 c
/* Write a 0, so that no underrun occurs after releasing the state machine */
7 c, N8 @: p7 c& u1 p- o7 G; V$ b mcasp->regs->XBUF5 = 0;: F. m( R" j S3 G4 E$ \# ~% d" i
mcasp->regs->RBUF0 = 0;5 m [2 @0 T( @ m. G
s# [% M2 b/ }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 c( X6 ?3 P! o* X$ Q0 n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ y Z7 y3 u. F mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ O, d. H" F* r- b7 H5 L6 }7 O/ ^, o- U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! f$ z, }8 c6 Q' y! W
$ m5 v w. d; @' \: X) ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& ?* T5 E, |3 Z8 ^# L- M2 a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 B/ u( `) Z0 |3 O7 X% B
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& ^. Y, K# G- Y2 n# ^! w, M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' P% t$ f/ b+ ~1 P( _: R
2 V: E$ \: z3 M; e* E$ e# D- f CSR = 0x0000;
0 N0 v) h$ e+ ~) k/ \ INTC_INTMUX1 = 0x3d;( G0 C$ C) }) j+ @
ISTP = (unsigned int)vectors;
2 q" i! i, p! F: B) K5 b ICR = 0xFFF0;
( \. Q9 {, j% r- k5 P IER |= 0x12;
. i% X O5 \5 g- \/ s CSR |= 0x01; 1 a7 Z# s# e5 t# L1 J7 p" n4 `$ s9 W! X
! B n5 t# |3 Q* H* U
# j$ M1 n' O+ }4 i/ B, b
9 l: }- A0 k) f' P8 n1 B7 m e还有就是两个输入输出函数:
$ T# C- _7 X' R: L: }* m- p; yvoid output_sample(Int32 out_data)3 e |* V( Q. |. g5 b
{
0 _! X' y: Y' G+ G3 @" |! { AIC31_data.uint = out_data;
: U$ F/ |* f1 Z! m' ?9 J MCASP1_XBUF5_32BIT = AIC31_data.uint;# o7 x+ w& M- V1 b
}3 R9 C2 a# T% c
% E# W5 c' k6 M$ C* h) SInt32 input_sample(void)
2 ? q) B; K- g- E{
# p2 a- x- O% R7 G" Q1 N( d: `* @ AIC31_data.uint = MCASP1_RBUF0_32BIT;; @3 V4 c3 }" J8 Z* u% }) W
return (AIC31_data.uint);
4 {, p8 H! ~ r5 j6 y1 H. }' F}
! N1 d" F1 ]" s* @, z5 B! |8 y) N! p- j, w- S; I9 v1 R s! U
|
|