|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 \/ ^0 ~0 Z( {0 m1 qmain文件:' y4 I* t. j, c
interrupt void interrupt4(void) 1 E% k/ @2 s5 Y" ]
{$ e- U+ {4 {: A9 M0 T" V
Uint32 sample;7 E7 D6 O. E0 f( ~8 [
3 g) n% r V; z1 B0 W
sample = input_sample(); // read L + R samples from ADC. A: @6 Y5 [( ~ ?/ `) n
output_sample(sample); // write L + R samples to DAC
6 G2 c( V- X& t) |" j return;- ~- e1 E% l) _0 J& H
}( J6 s/ S% C% V$ `
! ]3 t: f( a: Q/ l2 Q
int main( void )& X' P! M x9 g5 V
{# o" Y0 g' e1 @- V
" W0 F4 N7 e% h; u" a1 N
/* Initialize BSL *// m/ F6 Y6 r$ A9 l
EVMC6747_init( );
. u: ~% g; }9 d- v" ^# D6 R /* Call evmc6747_intr function */
! Q! m1 h) y" j8 @7 A aic3106_init( );# S2 d$ `. \4 w2 P' t }- i8 `
while(1);1 I3 s6 u+ c ^3 V( N2 F. D
}
2 b3 d+ A& d( ]# C) v
6 T) n. G8 Z8 ?# F" O: q) Z0 g* [5 E# ?5 L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* _# H0 A R5 O# l7 D( |# N
/* Initialize MCASP1 */. i3 u5 h5 ~% J% Z
mcasp = &MCASP_MODULE_1;0 u( v6 M' V- Y
mcasp->regs->GBLCTL = 0; // Reset
( \. l! a8 |1 m" {/ Q4 q9 a2 H mcasp->regs->RGBLCTL = 0; // Reset RX
* E$ \: f/ E- m, K1 L) X) W mcasp->regs->XGBLCTL = 0; // Reset TX
) E U% o3 }! z& H% Z7 [7 D mcasp->regs->PWRDEMU = 1; // Free-running
& T* Z1 F- g% v4 Y D // configure McASP0 receive registers5 b2 S) d) p8 H: M- F
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 j5 x% Y( s+ B) i5 O
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- ?7 q2 ]+ J. ]$ Y) d mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, T0 t2 X) D# o8 c+ ?, D$ { mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 k6 K: g: m. x. ~* O! e9 B/ n
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 T/ p, Z" E; W1 t( r/ A3 {( a! g mcasp->regs->RTDM = 0x00000003; // Slots 0,10 Q1 b9 P: c! Y5 j! R( |4 e- Z6 D4 m
mcasp->regs->RINTCTL = 0x00000000; // Not used
* }' @! K' W* R/ L mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" M q- Y) T# U5 U# E/ I. p0 c
# G }' w5 U$ r8 K8 O mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ V3 V2 u& M% _3 c
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 p6 m, q+ ~2 \5 U ~0 Z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( a+ Y t+ D+ k# J. ^, z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 d! V0 B6 n4 }
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) ^4 [9 n3 H5 ~; V) ~ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
3 A) v4 W/ O) @. k& p# T, F mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; v7 H! s1 J D5 {0 {& u7 L4 ?4 D
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
^+ b; `' q3 J! L
7 Z2 v9 Y( H* M5 d mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 r/ h5 W5 s( }4 s1 z& |& _- i
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 k0 b( ]. D3 [; D$ r mcasp->regs->PFUNC = 0; // All MCASPs
4 t" k1 Z7 [& \4 g8 D' x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 l4 n1 K1 }+ e: N2 i
% ]9 r' s) M9 \! W7 U; ?2 b; h
mcasp->regs->DITCTL = 0x00000000; // Not used
8 b) T7 i7 T: H# W" W8 e mcasp->regs->DLBCTL = 0x00000000; // Not used
4 ?+ s: U) E7 j4 f9 W mcasp->regs->AMUTE = 0x00000000; // Not used
" H( h: I1 b/ ]# n9 r6 V; K8 i$ i5 Z7 Z- u) b
/* Starting sections of the McASP*/) ~. b% V' W, W8 W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & Q' N# B3 y% r# K( V7 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 A K7 u2 n& _2 Y% k) X mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * c8 B% i- U( {% E' _8 a' T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: E& A6 X& x2 M" ^
# ?2 O( R, e; p+ e! e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 Z4 u: |+ T( F7 n# L6 Y: |* L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- H9 V H1 \- J2 s a6 e$ {: ~ s
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 J. R/ B$ ?0 Q# a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
U, F0 K/ d7 O: o) l% e9 K/ F3 r5 s( ^. e- g$ v4 o7 ~( V
mcasp->regs->XSTAT = 0x0000ffff; " [5 @1 C) a. {0 a/ ~
mcasp->regs->RSTAT = 0x0000ffff; - }- G1 C% i5 Y5 F5 O [& G
, r5 [" L/ @, S
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! ^6 b3 S) ? S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 c& E- r9 S2 V3 D# O% |. Z! I mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , K9 [) ^0 F* _* Z, ?2 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 H9 e3 A9 ~$ c$ `7 q4 W! n( i8 F8 j( N0 p, u0 R" F- ?/ {
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 V S3 A; O7 `" R/ Y: m, G* { mcasp->regs->XBUF5 = 0;& r) x. h' g$ @6 | {9 J: g
mcasp->regs->RBUF0 = 0;
: G7 M! C4 F" A7 `5 k
& S! f0 V' O0 V) j, m mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 f( T+ {) s1 A B6 m# J/ u0 {. l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" k/ }' C' W, _& C! A2 @2 Q) D mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ }0 \6 s% y6 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 d* i6 K5 G, p
, m; S* @- o$ U6 o" v9 M5 J4 f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! {7 s: K# {+ t) ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. f" z h" V) i+ m; p
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& X) x" o: \- ^2 W* d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ V' V% w& p! ~7 Z7 b% ]: w+ B) b: K) a2 y: m0 ]
CSR = 0x0000;
# B/ |2 g+ U D1 J INTC_INTMUX1 = 0x3d;
7 m% a0 `4 s5 [* K ISTP = (unsigned int)vectors;0 S9 t" h+ m+ Z8 F: V
ICR = 0xFFF0; 4 g% N. k6 l# u4 u, ?- |! |
IER |= 0x12; / h$ g3 Z5 E# q4 ^- l
CSR |= 0x01;
' `) {* d; c& ^: Q- v! ^2 S% C. f5 Q$ f* D/ d/ K
$ O% Z$ K: S, T
6 {8 q- d4 {3 R9 [- h& E# d/ T; w$ P7 u
还有就是两个输入输出函数:
' j! c/ r# r6 v6 lvoid output_sample(Int32 out_data)
4 c; _2 h3 |, d! G- p3 x{3 ^* C8 [& a! C1 M6 |3 e; P" f2 q
AIC31_data.uint = out_data;
6 r5 |8 Y0 L! I% L# a6 v MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 _1 ? v" q, Z+ U" @& _* ?}
- E; V5 R0 P) i& z
) s) {' i4 g8 F. a, HInt32 input_sample(void)
2 p# R) l$ F' F! o+ ?' K1 {{ 2 X6 H4 Y; w1 U/ g2 B
AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 o- b, J ?/ A0 y- ]7 t: ? return (AIC31_data.uint);
7 [/ u' z' E/ R, n) z* l u}
+ W1 c# X& i* y! l2 e2 Z5 R5 I# p5 L0 `4 z$ A( M
|
|