|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ |: Z$ k% K9 m: tmain文件:& _ X7 u! S5 H# A# C
interrupt void interrupt4(void) ! b0 c" G+ t: ~6 L4 D) _9 c: `
{
/ I6 b, }* G {# ] Uint32 sample;( ?6 I- a5 C9 U0 T. c N* ]. b# D
8 K8 Q! u E7 H" t" n sample = input_sample(); // read L + R samples from ADC
' i+ z4 L- n$ l. m* e* G0 q output_sample(sample); // write L + R samples to DAC
+ f$ O2 F; @9 G/ F1 k2 [/ I return;
2 U, J7 E( o6 m! l4 R, v9 t}
( P# t0 ]4 h6 ]" @* N$ X
) d* K |' r; I7 N |int main( void )
; {8 M& u" w) `' d{
/ V8 I( b+ |- N$ l
& y( P& B, L) y /* Initialize BSL */8 I! L" P @* J- p
EVMC6747_init( );4 U2 x6 e& n+ j# A2 ]4 }
/* Call evmc6747_intr function */# @* P' `3 G- l! ?. f8 E2 j! g
aic3106_init( );8 n, v0 b, ^! w0 z- G
while(1);; @0 ]/ M; L: B2 C
}3 u$ f F0 F# A- a
! }. p: m3 r! H2 J( N' B3 Y, U) {% @# @2 V& x0 [# `, W& e/ W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# j3 A# R: }- ~0 o5 G
/* Initialize MCASP1 */
/ _: p' S6 I+ N6 }% ^7 O9 O. C3 w2 h mcasp = &MCASP_MODULE_1;
9 q8 r) c( {) o9 r/ b8 y$ S2 G mcasp->regs->GBLCTL = 0; // Reset
, F' [' C1 h5 v# c: I0 ~ mcasp->regs->RGBLCTL = 0; // Reset RX$ ?" K n( ]1 {- j3 F
mcasp->regs->XGBLCTL = 0; // Reset TX
1 |9 b+ ]! ^8 x+ \7 @6 J mcasp->regs->PWRDEMU = 1; // Free-running0 D$ n( n5 Q, Q' I/ z/ K1 M Z
// configure McASP0 receive registers
. p( t: S' F! P5 w' w mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 ~: y( X* l" \* M3 S mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 @2 n+ f1 P- v3 j: _ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' j' _/ V$ T( j* k! J* Y. \0 b1 ]+ M
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 \. p1 t5 |8 [4 B! V" _ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# R C& q3 D6 W1 g: A" t. ^( J
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, q! e: t9 I9 n# N4 s1 c mcasp->regs->RINTCTL = 0x00000000; // Not used; z2 \/ Z# l T1 d' \
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' r5 E4 D- M& L* |; U5 r: G
/ p& Q% Q5 S3 X( i" p0 A& |0 U mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 I6 A3 U/ m9 L# m mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 |: G! v/ n0 d, R+ Z2 Z+ _
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- e4 X4 d+ Y( o' C+ z/ c mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 }. l* s6 p ` b% l% p, H4 U mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 |: @ d/ H. E0 d; y; J
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 `6 s% k1 a- ]* ^1 m. U mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- y' m4 x+ Y, U1 r mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 k) Z- e& t5 a8 l3 c) g! F
5 e( d* S. @% ?' @& v7 W mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- ]8 Q, E1 G) W0 L a8 n mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ ~5 y9 c; C' [, ` mcasp->regs->PFUNC = 0; // All MCASPs2 ~& R9 u) [) l# K3 m, e9 {, e
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 Q1 ?( V) l0 `& A' K, U
% K6 z+ r Z; q( _. m+ W
mcasp->regs->DITCTL = 0x00000000; // Not used0 V& m" l9 j3 D: o
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 ~ Q5 [" |& Q$ o% }3 m mcasp->regs->AMUTE = 0x00000000; // Not used6 Z* N+ z& m2 ^! }
3 [- h- E& x2 y' M0 T. J# s
/* Starting sections of the McASP*/
8 E% Q6 @# Y! H6 h3 P3 x mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 n. l- p/ l/ Q& }3 U1 ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 K4 o5 b" w& @4 U R3 ~, [) X
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& q. F5 L5 p' S5 N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ T7 x2 p& |! g/ P4 B0 a. O
; f/ Z, M7 ?# O1 P) e' G+ ~1 `
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # ^& {# ^& J# F5 ` D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 @% x) p4 l a/ d
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- G b4 ~' J( S) Q* v+ u2 {. K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' h. O5 H! L5 P3 q' U/ b+ U
7 g5 C. E0 E+ L g0 {% O+ F" }
mcasp->regs->XSTAT = 0x0000ffff; ; H3 m; p; V6 v' U# ]
mcasp->regs->RSTAT = 0x0000ffff; , I4 Y+ p* p1 \) B# S
+ s4 k! {! I. Z8 }0 n% T. D8 d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. u- _; z; y& [( o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; A4 L, I: w7 t& r! w9 X mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 f0 m3 \: {0 d% T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); h9 l% P2 s/ l4 z$ f h; Z
2 X" T t. P+ K/ u6 i /* Write a 0, so that no underrun occurs after releasing the state machine */& S6 ~: O: F/ [0 V0 j% A0 s- z
mcasp->regs->XBUF5 = 0;5 p5 S, ~8 ?1 d8 m) g
mcasp->regs->RBUF0 = 0;
3 i' L* o+ ~; j+ e7 D
P8 x5 s% g* l8 ^- o mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 z+ q4 X+ ^3 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ ^/ J. b! P( i+ f3 D1 d' l8 }( A% p
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) ^$ @- _; L: V5 J8 V9 \- S& C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& g" K' z) F* A1 I7 c/ }9 }: p
5 C1 Z6 T' [/ g# e
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ D' _# G9 ^" h d S* U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 R* b# _ [+ x9 V2 t1 F
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , `/ g4 b2 k. z* I8 `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# R0 N2 D' o$ L2 P: Y8 b! Y3 a
CSR = 0x0000;
- c6 D9 H' U+ d5 ]8 u# s INTC_INTMUX1 = 0x3d;. Z& t9 X1 r: p& O* o
ISTP = (unsigned int)vectors;
* o/ |, U5 i; r9 ]2 e6 O ICR = 0xFFF0;
2 E9 e1 Z; H i& @/ B$ A IER |= 0x12;
3 z6 K( |" S+ e$ U, l/ C# B CSR |= 0x01;
3 h$ u5 C2 E2 W- @% \. I7 E0 t; E M7 ~( i/ X0 [" y' ?
: p6 v: Z+ K5 P* E# A2 p. d
' y6 z( @: g y还有就是两个输入输出函数:
1 O, ?3 s% L! Y5 fvoid output_sample(Int32 out_data)
! m5 C! s; {" D! Z/ i{
]( u' c& j2 \0 B AIC31_data.uint = out_data; * \& e* ]/ f0 t) h, W9 g
MCASP1_XBUF5_32BIT = AIC31_data.uint;2 t' n5 N) [# G a6 ?" e
}
" Y. Y/ y0 E' n0 \$ w) h! p
8 t5 K3 g8 R& d* p/ J" s0 v( PInt32 input_sample(void)
$ x) L" o; `" i5 l{ , W( J; M" U7 X5 d
AIC31_data.uint = MCASP1_RBUF0_32BIT;8 ]. m" D3 M- ]- A' z% _$ W
return (AIC31_data.uint);* p6 m$ i0 Z4 C1 D9 u' D/ v+ S
}
. h1 I' {5 t- u1 s' M1 D2 ~6 I8 w0 }4 r( T2 ]. r
|
|