|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 r! B/ k, |2 v3 p2 d( C
main文件:
. Q! K) _" n; y7 g' w' o3 Ointerrupt void interrupt4(void) * O6 Y6 d+ u( m K$ d# N
{
x8 w" l; K+ ^7 Y( {4 j2 W Uint32 sample;' M2 o, u; D* X, I
' T T) @; {5 o g$ e, K6 @. l5 b
sample = input_sample(); // read L + R samples from ADC& ^* Y( A3 N3 v
output_sample(sample); // write L + R samples to DAC
5 ]0 P" d# f& n" o+ d return;
2 I0 U! F5 N# k' {4 n4 M}& k4 j' {& D) n
( ]5 e' U9 o9 } p2 Z* r
int main( void )
1 l1 f1 P/ ~% l{
; S: j, H6 g; F- k) [% w1 Q6 L
0 G0 r" Q& _, e+ Z9 \! H* ? /* Initialize BSL */; {. Z- C! }$ P8 b0 P3 _
EVMC6747_init( );0 S: O3 s- W5 D3 {- L t2 a ?, z
/* Call evmc6747_intr function */
8 Z" s4 m9 D8 F- u) c# M aic3106_init( );6 S$ |2 u4 F6 X; O) C
while(1);
i1 j3 b2 x/ N, r: J# K$ V* Z! s}9 J) I; `, N8 q" f+ Q: k
$ ^7 n+ V: z8 Q1 ?
; e0 T" o0 o6 n( U' ]" Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% c& J6 r9 l K* j/* Initialize MCASP1 */! Q7 E( |# i$ |$ w! V. b/ w
mcasp = &MCASP_MODULE_1;
5 p6 G( }* B2 z* a" l4 e# o mcasp->regs->GBLCTL = 0; // Reset
' t0 I$ h% |; d* _ mcasp->regs->RGBLCTL = 0; // Reset RX3 ?" J( [6 c/ L3 Y' G7 R
mcasp->regs->XGBLCTL = 0; // Reset TX& }7 S3 f9 s/ y' ^, P' w2 h9 O
mcasp->regs->PWRDEMU = 1; // Free-running
; b9 j, ]% O; L7 v0 [" i' d // configure McASP0 receive registers4 _9 `) P5 W1 i4 P* y5 [
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 J+ e. B) h+ j3 Q: O7 l6 B mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% I# o7 k. I' i: G+ ?+ {
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( B/ a; w7 U% u' j mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# D) h- E: D# Y; V mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" G0 ~/ Q$ V+ Z k mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ v/ n: M* y5 f7 t+ e mcasp->regs->RINTCTL = 0x00000000; // Not used) s2 d, C7 G- a- e0 G
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 r9 J( ^6 ^6 i4 S9 f) u' `+ X1 a! R" K t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, a& f* e& f; O: L5 |3 ]
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 U! \# L0 W5 O; Z6 o mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) Z/ Z! v2 ^3 _: v9 ] \ }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ z* L; e6 _& g1 P. ~' c) ] mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) F) A% I% e! ^9 b# E' X mcasp->regs->XTDM = 0x00000003; // Slots 0,1 L3 A* I4 q& R$ Q
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
$ y0 o* \+ s" T/ y mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 M' u2 f/ ~. l9 b" H
; e: l% w1 J( g6 [6 w mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. W' C0 d/ _ r; Q/ H8 r" M mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
) y5 {- }% r: ^7 q# W) s% }+ ~ mcasp->regs->PFUNC = 0; // All MCASPs Y1 Y8 p( v7 n+ i' x5 x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ n! x% l, C5 v1 b- C# ~
' J/ J* s3 P- o* r6 y0 [; Q6 E mcasp->regs->DITCTL = 0x00000000; // Not used! R M* y% O/ I* Y4 M
mcasp->regs->DLBCTL = 0x00000000; // Not used
# Y. R6 R7 U( m( T( W+ }8 b mcasp->regs->AMUTE = 0x00000000; // Not used
' a$ w% A! B' |# _; ~: _
+ \% |; B7 k5 g' A/ w/* Starting sections of the McASP*/
2 ]& s6 t9 M: k4 M mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 o( z T0 O) }5 H1 W& ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 3 F! {5 U" d! u* [
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. ^5 h M4 f8 g* F+ N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ E/ j# T$ u9 B# X8 b9 |4 _
' c/ y% `5 Y% k# [ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 H8 T. ]4 ?7 ?3 Z! \$ p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- P6 p4 d9 C- |4 `; \ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - m9 ]6 J! o0 [' l% G1 |8 \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 }% f1 }; e w$ K, G% P& H6 R. h7 @( Q$ z" o
mcasp->regs->XSTAT = 0x0000ffff;
% k3 d, p" X: g" K3 i0 O* p mcasp->regs->RSTAT = 0x0000ffff; / M# z' K% G+ t. @9 O& `3 B, V
) m5 J/ \9 V/ }4 r4 j. p/ d
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
y3 S" w* a! }! k! B( T* Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 K1 u/ j) G. m1 |, n' ?2 {1 b0 Z
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 u, y7 O | D e- K F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" H9 E7 c8 n3 S# @0 D. V9 }. r, X! G
/* Write a 0, so that no underrun occurs after releasing the state machine */
1 d4 W1 C, [" A% \, o' Y mcasp->regs->XBUF5 = 0;2 ]9 f$ c/ Z5 d0 k$ |: D
mcasp->regs->RBUF0 = 0;
6 A* O; T% Y0 ?- t4 t
$ T7 V" Z$ h: ^2 r* F1 K/ r2 ^ _ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 m0 b/ s4 I& v% F+ l2 @0 V7 e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- y8 x% Z; U, [3 X7 [ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . ?: i$ V# Q. n C9 t3 s& S1 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 e; [- g: Y+ j0 g
0 r8 \+ [7 b9 L) T4 L! j% n mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " a( V# K& N- ?4 }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ Y3 P" j# W% z, j% c8 w mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 e9 [# M( p6 Q# z! ]6 P. d m, W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! `9 g* W" C+ Z1 @3 \
+ Y! ^8 z- S% a
CSR = 0x0000;/ l* L: z* ^8 _) x
INTC_INTMUX1 = 0x3d;
, z c ]& e$ i& h6 \& f: P8 u2 \ ISTP = (unsigned int)vectors;
' @" D: P+ p( v ICR = 0xFFF0;
" W U: j3 V) ^% x IER |= 0x12; ! k' d2 Z2 O( q c: j
CSR |= 0x01; 5 v! Y) V: m* G+ d
1 D. Y1 e" F# [" k) a
9 [, ~" k! d8 o4 g6 P" L; ^4 |9 B. e
还有就是两个输入输出函数:
/ A: C, ~3 \7 `+ Mvoid output_sample(Int32 out_data)+ Z( [9 y# O7 {7 D+ L& {" v- Y
{
: P8 O1 S) {, H, o AIC31_data.uint = out_data;
6 B1 o* k6 R% T( l MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 v# q- N. [( h+ N4 ^}
; U$ ~: u) j9 j4 U% e) C
7 H) g! Q- F2 f! N4 G! rInt32 input_sample(void)
# {) A" k3 B3 x" t& N& t{ 1 c' W1 h+ Z, p3 A0 S$ F' ^5 T
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' i/ Y) K3 ?- K- ~( e return (AIC31_data.uint);
3 R: n2 ?3 d4 x6 y- k}
# Z" r+ T/ H( W6 n; r& S- K8 o6 S5 V" I2 n; ?7 b7 L
|
|