|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) d, h! k8 k! W7 h/ |9 z$ P: z
main文件:
. ]4 [2 K5 t$ k1 q3 X% Kinterrupt void interrupt4(void)
7 v- [. ]8 M3 ?7 l4 U7 N4 A# h{9 x9 u0 y+ ]! x4 x
Uint32 sample;
1 k3 C$ }1 [' S& b6 y U+ r6 u
0 G( }' Z2 v9 d' G" `7 n0 e* A* M0 ^ sample = input_sample(); // read L + R samples from ADC; Z6 r: l0 W3 G/ K. O) B
output_sample(sample); // write L + R samples to DAC , O: J+ c# k& L! l
return;
u. S# G* D- C+ ^3 ~9 y# w, X}0 _1 }+ k' N7 |1 T2 N
) J' }% E7 F! h" o3 m5 F
int main( void )
0 l- E/ k" {( ?{
; Z- K0 O" v- _9 }, d
- j% ^# M4 b6 c% D/ e; P+ `( ~: k /* Initialize BSL */3 g( V3 ^' R/ t$ N' l0 u* U; Y& ^% l
EVMC6747_init( );9 w' b/ u4 Z. a% E; I7 Z% b/ m
/* Call evmc6747_intr function */
9 r- S% |/ a+ c6 `2 \% ]! @ aic3106_init( );. x; V; t# Q8 K" ^. v; n
while(1);
" n( n+ L2 [ m; e}
" F- `) [$ O6 ]8 I* K' R2 \- @, ?# z: O% L$ V4 r5 x
+ U; c. \. C8 Y, E3 l Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) Z7 j" o. U& |- f8 t# M: A' I0 Y
/* Initialize MCASP1 */
" U; W6 j( I$ y7 |: A; { mcasp = &MCASP_MODULE_1;
( K8 q7 C/ [2 @ mcasp->regs->GBLCTL = 0; // Reset
% }4 p% f) G9 b) ?# Y+ ]$ W9 q mcasp->regs->RGBLCTL = 0; // Reset RX, @$ u, K7 J' y. C7 s" J7 ?: v
mcasp->regs->XGBLCTL = 0; // Reset TX
) S1 P4 M. e6 E mcasp->regs->PWRDEMU = 1; // Free-running
8 g& t. C% w _. ?+ A // configure McASP0 receive registers
$ [1 T0 g$ n( a( V: m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ ~/ |( ~# c" [% W- O
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ r8 n! u/ ~# Q9 e) w) ~2 B
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! k( |+ E! p h/ l- p, G7 h# G q
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; L1 T! t0 V7 E3 ?, h) \ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 s1 h) B! F5 B p% c! t1 k mcasp->regs->RTDM = 0x00000003; // Slots 0,1' t( j0 b3 j# e* [+ X+ i8 ~: e5 Y
mcasp->regs->RINTCTL = 0x00000000; // Not used
7 m9 L/ {) G% \4 [* Z mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; Q( f+ A: b" j) h6 U/ w: u- S7 ?+ o
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 S, I& ~7 E9 n# F! b! F7 m
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" x( n/ q+ {+ f6 Z1 V2 p% [: `
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' ^$ Q. C/ g" J( r mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# N2 T- U' V+ n9 f* B+ W
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: C+ G, d+ C8 }( `) ? mcasp->regs->XTDM = 0x00000003; // Slots 0,1: E# O) O9 i. d2 J
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: s3 [ [/ r% l
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 j# D c8 g! @7 q6 O1 Y }$ Q
/ E0 H. s; O) D+ i
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- G3 f' ?1 J3 |; @/ o
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 D) @; `& O9 T. x) U+ I1 k# [
mcasp->regs->PFUNC = 0; // All MCASPs
0 Q" ~5 n3 i: [ a$ T2 l mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 }' W& {& F5 A" s
6 O" U1 ~ q# X& d mcasp->regs->DITCTL = 0x00000000; // Not used; o0 U$ ^' r! R# u
mcasp->regs->DLBCTL = 0x00000000; // Not used
: D/ ]7 K. a1 R" D9 T mcasp->regs->AMUTE = 0x00000000; // Not used% K) I6 @8 {; R; ~0 h
$ |0 v; F* I4 Q/* Starting sections of the McASP*/
3 @# a! N' Z0 ?; v, A4 [: T6 n$ T mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' D9 n5 d" Y- N' n N; C5 A- X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 K2 V2 p- |' L" c$ T1 m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . z/ B$ s% y, @0 P8 _% U! E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; e% L( n- ~) X3 j
: Y/ F$ ?1 d# q- m. Y: |+ L mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# b( O! `- A& w' S/ w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" e- s$ F" ]! H: ] mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( K: ^' D5 l Q2 h9 P% j5 r ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, j. Q# r/ q$ ^( _' o
2 n. w6 j+ g/ Q J8 `" L
mcasp->regs->XSTAT = 0x0000ffff; 7 t* L8 j$ {* ^) c
mcasp->regs->RSTAT = 0x0000ffff;
' D6 Y7 h. r- j4 [6 v
9 [# `7 b' q! H; J mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* |) d& K9 M0 ?# O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) I2 e) w% m! J$ x! f+ ` mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : W1 n- o0 s) n7 g& n4 t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) B9 M7 f& S, d, m e1 Z
+ y" w+ ^) I9 }2 N- h /* Write a 0, so that no underrun occurs after releasing the state machine */
; ^+ b: M8 R( u" k mcasp->regs->XBUF5 = 0;
& D( R4 [( o5 {& l1 n mcasp->regs->RBUF0 = 0;
: H5 m8 K- Z% H; V9 b; Z' V! L) E
& @ `6 I4 O4 n7 K6 w4 n* b mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! j$ C' V; u0 s# C3 y: D( S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) p% t; x7 j s mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; U( v2 M! ?- b6 n) Q: X. c. r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 e7 \9 V+ C3 F7 u" ~7 F
5 e, o1 n6 l" E; H- D5 a7 M1 t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: ^8 \! u/ t5 s1 H# m5 h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 E5 Z: `% W: g9 x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% [# ^. ]! o6 T0 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" L' h! R+ |% R: ]0 O
[8 N3 Z& G0 k' W) n' [ CSR = 0x0000;
& p4 U. m/ M- r% R& S4 E% \# N INTC_INTMUX1 = 0x3d;! Q4 x% z, P6 W9 f8 b* ]
ISTP = (unsigned int)vectors;0 S9 C" } `: Q1 y
ICR = 0xFFF0; ; f+ n+ M7 d z$ a
IER |= 0x12; " m6 R# Q- l. y- S% Y
CSR |= 0x01;
5 H# V# v5 j0 L( K. ]% ~
! g, L6 r& p7 I9 m6 _# f- U& t, v5 y5 ^3 `0 A
$ D) Q9 G, Z0 Q0 i
还有就是两个输入输出函数:3 n6 d/ M1 K+ V0 K
void output_sample(Int32 out_data)
5 q$ z' R7 ?" U& K" J, ]6 t! q{4 `* F# W9 b, y- H( `, q
AIC31_data.uint = out_data;
- r& B2 j& F% q' `+ ]5 G MCASP1_XBUF5_32BIT = AIC31_data.uint;$ T; E! r/ K& L/ y% a) i
}
* s2 \$ K' m- h9 b) ~3 T9 h4 b& }! a7 b
Int32 input_sample(void)7 u j) f! E' d, q5 B/ t
{ , [2 x. z0 Y. |5 U5 \; x4 \
AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ V# S( Z$ O* o, d3 f return (AIC31_data.uint);* w6 |( q6 j1 g1 }2 _/ [
}
' o4 P8 U) G; N+ y2 Q4 y0 b! b0 }- N/ ~2 F4 H2 h& _
|
|