|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" A; W7 B! ?! J1 o
main文件:
0 [4 d, i/ E. E( ]( i3 l/ i+ D5 Linterrupt void interrupt4(void) ( f# k7 y6 j6 t5 a, R& B
{
$ [- t( @7 @+ t7 `6 `, H Uint32 sample;
; w) X8 s# ]- b2 ?8 V5 Q
. N% y; [/ p" q/ x1 L6 P. } sample = input_sample(); // read L + R samples from ADC* x ~4 e& H8 m" }5 s' Z& s( ?
output_sample(sample); // write L + R samples to DAC 5 g% r" x) F6 w1 K
return;$ X& W2 t$ _$ A3 H/ w9 u# S4 I
}1 J9 T8 d7 S! ]! k
7 m! [. u2 F8 a' s" r& U4 N$ rint main( void )
: m: N' R, m- ~5 x3 C4 [{8 A4 F b& g& s6 A/ R
. T5 j+ R8 o$ Y& ~3 y- V. ~, l
/* Initialize BSL */
+ @7 o9 m! ?# f' `$ ^ EVMC6747_init( );, A ?/ W- h" c/ V
/* Call evmc6747_intr function */
: ^9 ]' I3 o E; O/ [9 t* t8 e aic3106_init( );7 M6 ?- m% ]8 _5 j5 U" }0 c
while(1);
5 g& M# b6 x* v( `; l& z3 C- i}# W. C% m1 A- @" i, E9 f% c
; e4 g2 z1 \8 z1 p8 J3 `& C8 L
% F% ?) c+ C/ W# Yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) ^( w9 M9 d. C" l/ f1 k* I
/* Initialize MCASP1 */) |, _" a: Z0 i( H! i) C
mcasp = &MCASP_MODULE_1;8 w+ U2 N/ E- J4 f0 l' O4 [4 \' X
mcasp->regs->GBLCTL = 0; // Reset
+ u4 V: k2 N1 b4 v% ` mcasp->regs->RGBLCTL = 0; // Reset RX1 _" n7 h7 {" w, `8 T
mcasp->regs->XGBLCTL = 0; // Reset TX! u6 K" @( h7 a
mcasp->regs->PWRDEMU = 1; // Free-running0 y7 y% Q% p* T# p" i
// configure McASP0 receive registers$ z0 Z" p: y0 r0 U' {1 H" b
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 a2 p5 B; j% S4 ^! X' ^ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 H& R5 |5 A; J) ]$ e" m. N0 a; W2 V
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# s& V0 Y! u l% l
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- {) ]3 A3 d& x: @# c mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), q% N& j* s9 j( o7 j
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
7 m9 V4 E) `9 F8 U, F( @0 l mcasp->regs->RINTCTL = 0x00000000; // Not used
. D& p: y4 _5 j% H& y, M$ a$ _ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ u$ Y* b" @3 s3 G7 I
3 t/ s5 y9 C* B! Y7 q1 Y$ f
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 c: K2 A7 d$ }1 W$ e mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 P6 X2 m- \; h0 \) j0 m4 j- b
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 J/ c% R( c9 l" b; }/ W0 K mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" P% j/ f% q7 }( L
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK1 @, m1 z) ^7 I2 I
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 G4 |$ [! R' c mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 ^# r6 B. A8 Z# S mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 f- K8 ]; y+ X" O6 T$ ~! c/ j$ L( u; h9 Q: j
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- O; w6 h, Z, ` mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ Q6 P8 r; ~4 g+ c: l; \, ] mcasp->regs->PFUNC = 0; // All MCASPs
2 @' I1 w9 Q' r* E5 t9 x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 y2 \6 f6 J; [: _$ o$ P
" W8 g1 q* I- E1 A; P, [. b
mcasp->regs->DITCTL = 0x00000000; // Not used
: P- F3 ]0 y& Q! e( h k* a5 u. y mcasp->regs->DLBCTL = 0x00000000; // Not used3 ^* Z8 q3 s8 d; E
mcasp->regs->AMUTE = 0x00000000; // Not used
' t9 j- z5 W# M* s7 c
* r Z: [4 |/ f( h9 }1 L; G5 I# C/* Starting sections of the McASP*/, z1 I: ?/ n: u; r$ n
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- u* n8 z: }/ c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % o- X/ Q( W: r3 r0 l; S$ Y b
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * \1 I# d0 _: v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% K& b( A {+ d0 l4 w- j
! l5 G. }- A5 {$ l" ?, ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) E& \( O" o9 @" k: [+ P0 b0 h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); s( E# W* E6 |2 {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - h- G* `3 {& E+ |( z/ n) s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 k+ u8 y& o) k* J
5 E- B6 Y u, S6 j mcasp->regs->XSTAT = 0x0000ffff; & f8 N! o. k" K m( D9 n
mcasp->regs->RSTAT = 0x0000ffff;
- q, j# {0 C& M4 `1 C& D1 g" X' q% v
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) S" J5 Z8 i' g4 w8 d: P1 v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; E( K1 T1 t. m; H7 K' }
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . J) u5 b4 O: M. S1 ~2 ~) I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# a4 H0 n% W" Y3 Y7 ]7 s5 e% W3 ]/ @! [/ h
/* Write a 0, so that no underrun occurs after releasing the state machine */
; W( T6 V7 `9 M, } mcasp->regs->XBUF5 = 0;" L# m- G4 C* f1 S3 l1 V% s& k
mcasp->regs->RBUF0 = 0;
2 k* n; a4 R) u+ {0 Z5 p# r. A( v
A2 d9 v- _6 g; S, K* Z. L4 i t/ [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 V& \( A; g4 T* M9 t6 n" ^* b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 W0 M- {5 h- A& B( I4 j, H mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 i( D2 M4 |4 W ], K- I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ q4 |7 q* K3 H9 }) o9 }8 I; ~- ?2 z; \2 c
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ H/ |' e, B7 ^0 j9 Y+ V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, B% F5 M6 [4 M3 P# M5 f
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " M4 z" a% k" w, f8 N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 { Q% v% G0 d* _' p
& q* D1 z; E& F! A: g CSR = 0x0000;. Y6 W1 z5 m5 g
INTC_INTMUX1 = 0x3d;
6 C3 D% p' {! [, v ISTP = (unsigned int)vectors;* i3 V2 H& }; n( v" z/ P
ICR = 0xFFF0; 7 P9 e" X0 y# P1 ]
IER |= 0x12; ' L8 V" M) j* Z+ ]
CSR |= 0x01;
3 ~ l! U& Y9 g, m' b0 `3 v* u! U* d
$ u2 n7 ^) f" ]+ S
. U5 M: x0 {. Z还有就是两个输入输出函数:
% v: q# U5 r! Uvoid output_sample(Int32 out_data)$ q% U" u6 S# T, O N$ I
{" y1 e! b: [+ p6 V
AIC31_data.uint = out_data;
; d9 ]3 o- a" |9 M \4 O& d( @1 J0 W MCASP1_XBUF5_32BIT = AIC31_data.uint;
. @; W8 z* T+ u}
1 e7 x: q e& S4 b! l
, t, k: Q/ T) ^) H1 g# m; s7 FInt32 input_sample(void)
* A2 ^) ?5 s# v% s3 i{ - f% |$ `8 L" |( ]+ p0 g% Q8 N
AIC31_data.uint = MCASP1_RBUF0_32BIT;
: E6 U5 C( _! }/ W+ D- m return (AIC31_data.uint);
7 L' i8 N0 l' q) s}
6 k, [* r: Q, r& [! t7 u8 e+ ?7 m; V
: t) k9 a/ K) r/ c J+ V |
|