|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& a) c& d0 }6 u( m) Kmain文件:, v. d0 f# N" O9 g0 ]3 u7 [4 ^% Z
interrupt void interrupt4(void) 8 s1 ]* W8 o/ u3 u4 n" E: S
{# p+ B* Z$ |- `
Uint32 sample;
' g( X# J* Q5 ~) c
2 Q0 ]. Y2 t* w8 D+ R2 F0 E4 N sample = input_sample(); // read L + R samples from ADC' p. Z2 E3 z, C! a8 S
output_sample(sample); // write L + R samples to DAC
4 V' O; E6 W. O. F1 H7 C return;
; u; P6 l2 S8 }: }}
& [, [& d1 x* H/ U) [
! H. J4 m5 w% U% P: qint main( void )$ x+ q4 I% l' {
{
. x& Y$ J' o4 J4 U% }+ E+ l* E! t2 L' ]9 P5 |) E+ t
/* Initialize BSL */
0 v! ]* e0 ^& b+ P0 Q EVMC6747_init( );: e* M7 @$ `* C; r- C6 `
/* Call evmc6747_intr function */9 p* B0 i/ S- u6 J$ N) V0 M
aic3106_init( );5 d, E" d" j: N* f# z: c9 d. ]
while(1);4 k4 x4 a+ ]# X" ~; ]7 \% {
}- m, @, j) L$ e. f/ H% V
9 X$ e% R" z+ ?2 c0 ?
8 x8 U: E" U* ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! t0 T' o! T3 V! U A8 o/* Initialize MCASP1 */
+ W0 V7 _3 I2 R; F- h$ l5 {8 Z6 r+ g mcasp = &MCASP_MODULE_1;/ ]; ~. ]- R; c/ W( l0 _; \
mcasp->regs->GBLCTL = 0; // Reset
: b6 }6 I/ p/ H/ m- V mcasp->regs->RGBLCTL = 0; // Reset RX! H* v) H$ W5 h) w6 {( ~. N! |
mcasp->regs->XGBLCTL = 0; // Reset TX
3 s2 A+ Z- A+ F0 |5 P mcasp->regs->PWRDEMU = 1; // Free-running- u; I* c y% x2 P+ Q/ V
// configure McASP0 receive registers
5 D; ^4 x4 x' O! h, m9 m- F4 \5 k mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: S" U$ \) W( z% L/ K, ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; @9 d$ M6 V5 Y; p% b. T mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! g2 G) ^& w) C% Q# p
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# l1 B& q- o) F, m4 P6 p7 ?8 k
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 g2 i- e8 X2 z mcasp->regs->RTDM = 0x00000003; // Slots 0,1
7 ?8 ?1 T. P# O9 W3 g% F: j mcasp->regs->RINTCTL = 0x00000000; // Not used
# r$ D+ r% U1 U" ?* x0 T! p, F mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 ?4 k" J7 k% {/ J- ~& \' p0 D* S: H( y! G
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ a( X6 {: A/ `1 k* L0 D mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 e8 l4 T. k: O1 ]- j# u0 ]
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% p7 p1 e3 R7 G0 s mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ C( Y6 G8 m8 x5 H) h5 g' ~ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' C: D0 g7 C6 T0 t4 q2 l mcasp->regs->XTDM = 0x00000003; // Slots 0,1: K5 B8 s( {# d# E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, X, J% r- W8 C mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 }1 A4 h! j- Z2 S5 D6 U2 U7 B4 f
/ l( `7 q- R% v% y8 T8 Q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) Y; y2 ^5 n3 y
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 n0 p, Y8 |& s% B7 }0 k2 h1 E
mcasp->regs->PFUNC = 0; // All MCASPs
; k$ |! _+ _0 N mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; H2 K9 B, ]- e$ s7 e, y. ^- P7 g$ q: L ?3 d1 M0 D$ ]- M
mcasp->regs->DITCTL = 0x00000000; // Not used9 [# J8 O' ?2 _4 h0 C" ?
mcasp->regs->DLBCTL = 0x00000000; // Not used
" ?5 c$ f; j" `3 { mcasp->regs->AMUTE = 0x00000000; // Not used
, P' P4 l6 z6 m, Z W8 f! }5 o Z% H4 f* M7 e+ Y. v
/* Starting sections of the McASP*/2 A# U# G. ^" q" K# z4 f# T, H# _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 f* T. @1 m' Y' E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- [6 X/ I/ _* l& F2 h o, y mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # c# Q7 Q w8 r; e/ W# M% F7 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* h" b: o' Y& I, q* b5 E% x/ }8 H# S, g- c6 z' |& B
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - U6 t% t1 V/ Y0 G T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 A: f! s: b7 C/ [; p mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 G7 V3 q$ G. |% n& h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. f9 Z: S5 ~8 y! h% b- f6 ]5 \+ f# A# Z* Q* D+ f
mcasp->regs->XSTAT = 0x0000ffff; + j9 E$ y6 d2 H) [3 T! j, ^. F
mcasp->regs->RSTAT = 0x0000ffff;
* t {1 ]2 ~/ s- M0 c5 X2 {1 C
' a2 J- |# R( p& L& w ? A1 A- G mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- ~- H( p8 p( m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 A, r+ _$ ~( x4 k mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. T4 U2 ?0 Z+ g) y8 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 g# O: s$ N* q4 ]$ r0 W5 |( A, _
/* Write a 0, so that no underrun occurs after releasing the state machine */
! r& w* U8 i# ~5 E2 n. [ mcasp->regs->XBUF5 = 0;4 w* j% a ]8 w2 T
mcasp->regs->RBUF0 = 0;2 r) d/ \6 X# d8 F8 r
- _+ l9 b* R b7 `) s% ~! E
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 z5 R4 d4 p! t, k) T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ g; g6 r. M! m mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 {. U @. R2 b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 A2 S7 m& n4 T6 x, [( X* z; Y) z
" X8 Y: [2 e4 a5 O: ~! @3 _
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 \7 J, R/ e4 ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 ?3 \3 y+ |2 J, o mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 a# Y( j0 A8 v1 U: E) J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 V- L, a) @+ O2 o1 U+ n
7 B1 A7 u1 I F$ K. s# ^: I: S/ m" E CSR = 0x0000;
( K. t- E$ O+ ~& V x2 y INTC_INTMUX1 = 0x3d;
) d' @! z3 G8 M9 j ISTP = (unsigned int)vectors;' l8 x9 }4 S( J( E2 L2 s
ICR = 0xFFF0; ( a- Y0 @/ k1 `
IER |= 0x12; 3 F$ P6 h5 O& L. q
CSR |= 0x01; 5 I" p$ H! ^5 |2 t g
$ ?) V5 t/ B6 o& C, O& F
; |( x! n' i1 k! Z
5 ^1 @7 e' S, M1 H3 Z7 ~还有就是两个输入输出函数:
+ f/ `, A% J6 h- H5 hvoid output_sample(Int32 out_data)
8 Q- C$ T. s0 `9 C4 N{3 i4 x0 M% N+ x5 p3 i o
AIC31_data.uint = out_data; ! j/ v# ?, ~" [; @2 X" z5 A
MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 ]8 W2 @# c. V3 y" x}- G6 k0 J) {) I8 t ]; { G; |
" w6 [1 S) W, x# M N' XInt32 input_sample(void)
+ S& F# N! m% h! X) _4 \{ * ^4 V0 W a1 `' S; [
AIC31_data.uint = MCASP1_RBUF0_32BIT;( [! O k, [+ |; h
return (AIC31_data.uint);
6 E/ k' e* ?$ e2 e$ U}
: E( r0 ~( y( W8 V/ D9 m6 b* P# _6 i- ~2 P* p
|
|