|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" [4 @- v* X6 m. o2 M9 U! Kmain文件:
! Q* T/ U9 s; d' {1 W& ^- finterrupt void interrupt4(void)
$ M# K& E C% ?) H0 Z{9 @' `0 e0 H0 s+ K
Uint32 sample;$ e# J0 D: x- S; a2 `7 c6 V
1 ~" J1 g% ~ g
sample = input_sample(); // read L + R samples from ADC6 n; ]7 I' N0 ?9 _" C) R/ [) \
output_sample(sample); // write L + R samples to DAC
: R; O# z, u9 p+ t @8 s2 G( }4 i return;$ G- g8 ^1 F( ? r' {5 |
}) i( ^& r: {5 g2 [6 U
. }* X# _; K2 v/ n
int main( void )+ l: ]! I2 W k; i z9 Y" Y# i
{
* {" F7 ^3 ]5 L) ~' ]
8 a- V! U! Q. B: C6 F8 \ /* Initialize BSL */
9 M9 f. a# q* ^; m& I4 r6 B! ` EVMC6747_init( );. C0 G3 R, I; N
/* Call evmc6747_intr function */
+ u) y# a$ f. s aic3106_init( );
9 g. v- d! G, D$ p; m% j" D { while(1);
+ C# i# F( T- P6 e; B}
5 b- D N, N o& D% S2 F) U: L5 A8 {4 N2 |0 @( L, F2 X; I
/ p/ D3 f4 t3 ` q7 a& `1 n9 ]+ Y' Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) x' z( I* x9 W6 e! e9 L/* Initialize MCASP1 */2 |$ a% L: M( S7 ~5 ?
mcasp = &MCASP_MODULE_1;
3 m1 u; |1 t% g" v' h mcasp->regs->GBLCTL = 0; // Reset
, J3 q, n+ `5 o" w' U# k mcasp->regs->RGBLCTL = 0; // Reset RX
" ~# g0 P5 P- m) j mcasp->regs->XGBLCTL = 0; // Reset TX
! ~% `. q: w6 X X5 c3 h7 Z+ B mcasp->regs->PWRDEMU = 1; // Free-running
, X$ h8 n9 }' b% `0 p/ X) e // configure McASP0 receive registers0 V0 O+ J# K+ z6 a* a' G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% Z* U/ A, T T, @* W7 ], R mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# Y' v6 X* \7 O, ?5 ] mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& U, Q& Z3 y3 [+ j mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 \3 B9 y2 P! G$ [
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 m8 w. ^: O$ W) ?
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 {. I. ], j) {$ D mcasp->regs->RINTCTL = 0x00000000; // Not used
4 M- z7 f% T* v- u; d( y# k, ~( I. C mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" c/ j7 Y, E* s
$ H! @; i# [6 @; x mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* W5 M2 T' j7 }3 c u. N3 A5 O# j! j mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 A2 h. {7 v) p4 \# O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: L9 \9 b0 o! t- E6 ? mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( x7 m- D4 y; l! E( @% H mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK T6 J9 x* X' A0 Z' c! H
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, M8 F; a3 Z2 P* K1 ? mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 _& S, q I8 r" ` q$ C mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; b K- b% _2 l, j, X" J1 t: Z- ?# X5 F! J8 @9 Y1 j; c5 w
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN& T$ j, M- o1 f, W" w
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 j8 E9 r- f7 y$ Y( Y mcasp->regs->PFUNC = 0; // All MCASPs
; ^. _3 t4 p1 S, ? mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. V3 ~6 l: h B$ x
2 y6 K% |$ ^, E$ V; W
mcasp->regs->DITCTL = 0x00000000; // Not used# b& B# ~3 h: B1 {% X. O ]
mcasp->regs->DLBCTL = 0x00000000; // Not used/ D$ h" {& B4 y m, M* x* ]
mcasp->regs->AMUTE = 0x00000000; // Not used9 c; c5 j+ \/ W0 N) U, @6 M1 h
3 K, g; Q+ C! _
/* Starting sections of the McASP*/+ n4 m4 }! C1 o6 G" b+ t1 K! r& n3 G
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 G+ e, S. a5 y. E3 y. [0 Y$ M2 t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& S0 g @& ]3 B+ }/ m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 R+ T2 U2 F* w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 m5 i8 [. }- G9 F5 i- s; O
8 i! u- n( i, L6 X0 v
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; S4 v, x t; v: O5 Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- m/ Y; v0 g" D' {% o1 q
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! ^7 [3 q- R+ j& |, x5 U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& T% z+ T/ X* l3 G: R. j# K
# `, F6 f. ?1 X5 u/ K: |+ j. b mcasp->regs->XSTAT = 0x0000ffff;
! n% L* P/ t% f" D5 o4 I mcasp->regs->RSTAT = 0x0000ffff;
) y# L2 @( f, W8 x ]/ q8 x) m6 b$ X! S
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 ^$ G& H( L+ x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, w( X& n0 c( F' z% K mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % f( D' e5 ^4 H6 T) @: g A9 H1 m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. D! o* i. }( v |+ ~
5 Y$ W2 F2 j7 x8 o; ~ /* Write a 0, so that no underrun occurs after releasing the state machine */& C, P* V' P9 h3 \' h( F
mcasp->regs->XBUF5 = 0;
6 k2 [$ Z' b8 T' \" T mcasp->regs->RBUF0 = 0;
a: _2 [( E! N9 j u H" J
, @2 d1 `5 U! @2 i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 C9 g9 l+ D7 O" h' T0 H9 j8 Z3 X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 O6 ]8 h; R3 }" R/ T0 ] mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 x' g5 P: x* t+ M6 q9 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; t Q7 T1 s; _1 v! u9 n
0 Y4 H- _0 V: ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % }% H% B% p6 [" l( L' K7 z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ ~, @- R4 @: C3 i" L( h! f1 ~& X' y; O mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 G0 Z8 p4 V: }6 O) o$ z3 K" R3 k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& a3 z- C! D h/ T( y
7 P# A s1 Z4 Y) G8 M+ S CSR = 0x0000;
- v& J* v. l H8 s8 }' | INTC_INTMUX1 = 0x3d;& e( c" ?* \' T2 Z: Z$ W' s
ISTP = (unsigned int)vectors;% k" Q! U5 r' Q& A/ k" c
ICR = 0xFFF0; 5 O4 W3 V% G9 ~
IER |= 0x12;
( g5 i& O8 E x7 e' D5 `- v CSR |= 0x01;
( u! C1 y4 l: T8 J
$ ]& h0 o3 k. P
& s' r7 z R3 U+ |& z
; e; c E9 B8 m0 e. i$ X% h0 I还有就是两个输入输出函数:7 p" H4 \ m! b L, K* E2 A) E
void output_sample(Int32 out_data)( Q. ?2 @/ X4 X4 q3 I5 m1 Q
{
/ A, a" ~; x' O; A# T2 K1 \ AIC31_data.uint = out_data;
( M0 u% m X9 N2 w, O* n, l MCASP1_XBUF5_32BIT = AIC31_data.uint;; C2 x8 G6 |' n
}
& X0 [5 V: u6 Z) x8 G5 p1 d1 u# @2 l" ]2 b4 H- ?
Int32 input_sample(void)
$ s7 S( P: D4 C5 g{
0 R/ w1 F: Z4 c AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 X; L8 }9 [0 s+ T return (AIC31_data.uint);
$ q1 n5 `( O1 P) }3 c0 S2 p, _}
+ q6 _! h8 M7 _1 w1 Y) \% e; Q3 `+ q2 U# Z7 `: {
|
|