嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 c- J7 c- J: h' |
Void UPP_TASK(Void)
/ X1 Y6 B# \( p! R2 A
{
$ N+ i- k* D3 f* N; i- H+ X% i- Q* D8 R
) @6 z$ B1 K' @
int i,j,k,target_int_count=2;
* I$ [% N! P6 r
char ch[2];
$ [) _9 q6 V$ v7 w
' z% R4 |( R ^( q: Z4 o0 C
* |, `- C% m) Q8 w1 V" }7 e
- c6 l: u% Y' Z% E7 }4 P, F# b
upp_interrupt_count = 0;
5 H1 C( s9 N- `" Y: _, @* y1 ~
upp_error_count = 0;
9 R9 l% W4 T! W: p* Q3 L
. S+ L( \, G& ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! c0 z. m* L- L
// Initialize data buffers
2 E- M& g' e! r k! L+ ?
for (i = 0; i < upp_frame_size; i++)
2 K! C* X+ i- N: @4 J- U" O6 g
{
% ~! q: F* C+ M9 _- R3 v: S
upp_buffer_b
=i;
5 b$ A* K; a& m
upp_buffer_a
= 0xDEAD;
* W; j' E: E9 K4 @" B. M; p
}
$ E5 T* E) K% _; A& f# I7 F- H7 z
1 w% E( s' f/ d% v9 A
//for(i=0;i<1024;i++)
: K: }3 r! \0 c T7 V3 g
// temp
=0;
: _$ g" C3 H/ y% C5 Q
: c T( @6 f' I( Q# h
//UPPReset();
. \( q8 w$ V) W2 U* i' K0 s7 k
/*启动UPP DMA传输*/
" Q+ C: ^; u! L6 Y
UARTPuts("upp_prog_dma_i\n",-2);
! h2 v4 B& F% t3 T/ t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. X& v0 A B6 P8 T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* p* f: ^, @3 ~3 d. E% i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 s* S9 q( p# P4 [
~: ]( g/ u& ^( J
UARTPuts("upp_prog_dma_i\n",-2);
/ K! T$ t- Y4 r; t. K3 Z; f9 k
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. t) d+ o% o5 D4 X# k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 W+ @! k9 U& f- s: Q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) y; S) V5 {* Z6 A2 U
. ]3 m9 E/ |7 S9 T% `
/*等待UPP传输完毕*/
# D$ y6 E. r8 Y- y
//i=0;
/ r7 h" v+ C& v6 ]; [
//j=0;
" @! y) F* U B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, X& G' x3 D8 c5 M. \
{
0 I3 R/ H- M$ j1 G" } w3 t5 ]+ j
/* 测试UPP传输的同时操作普通DDR数据
- N! L! v4 m m% y
temp
=i;
8 f0 J( q# M& J) ?, e# Z9 A
i++;
! s0 M; R8 U- L3 M4 Y. v( |% Z7 Z
if(i==1024)
; m' c m4 J' }3 o" G: d& t U; N
{
8 O, O( s: i9 Y2 j, {, q6 A
i=0;
4 A$ O# k/ m& [9 S. b6 r( Y8 W0 g
j++;
+ \# J/ X5 ~5 C$ z; ~7 W
}
+ ^/ I7 E9 G3 ?
*/
$ |5 g4 l5 s2 ]- [( X' c
! ^& \& f4 W7 T
asm(" nop");
' B* \+ _) g V5 @+ l
1 h0 Q" p$ A: c d
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 T* j! N$ v- X; k
}
: ?3 V* T6 R+ `- ^
, e) q W( z: k, H+ t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; k* F+ Z0 Q3 ]/ X5 Y2 x- r/ W
//UARTprintf( "i=%d\n",i);
2 O# p, j2 y7 M9 ^. c. y8 J3 g1 X2 b
//UARTprintf( "j=%d\n",j);
( W$ h) E1 O1 u5 F2 m) n1 u7 m' L
UARTPuts("Data mismatch in buffers.\n",-2);
3 _1 H8 \; j9 J6 y* Z' K* q
if (upp_interrupt_count == 2 && upp_error_count == 0)
" E2 W0 H, {7 } m+ a3 e9 i# P
{
) p/ T' ]- |3 _" f) @/ k
for (i = 0; i<upp_frame_size; i++)
- F3 H: i! N4 \; S5 ]2 S9 o% u
{
u4 i6 ?2 {. d3 E# c3 g8 @3 u
if (upp_buffer_a
!= upp_buffer_b
)
3 V4 Q8 R! C' f3 s8 I p
{
. w3 w; C: p3 V5 r$ {
upp_error_count++;
- Y+ Y9 M' }5 z$ L4 e
}
( X3 i5 h! m B. c
}
2 E4 e- {- e9 h. e: y: M! e$ V. L
}
" j8 @; C7 I- y$ {3 T% U5 R( v! T/ ~
( Z+ u7 w; N6 R& ?% L
/* 报告通信结果*/
$ w" q" i% _, t y
if(upp_error_count != 0)
% n# D( T. ^7 h; I7 p9 ^ o
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* v. k& p& N! b
else
7 x+ B8 Z2 b0 m7 m# e/ @: q6 ]0 M
UARTPuts("uPP transfers complete!\n",-2);
& w3 n! V* q- ?/ t
( g: O/ e- |! t
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# T S, A K% N
UARTGets(ch,2);
) l+ O) o. u! O7 }- I
UARTPuts("\n", -2);
1 f: ]( W) s7 a
8 \ ^4 P y6 c' k5 a& M
if(ch[0] == 'y')
, s& D6 j' n& \1 q$ }# Z% @8 T n
{
3 e4 i% g* p D
/*打印全部读到的数据*/
1 `0 ` ?9 |2 I' r3 j" E- d
for(i=0; i<upp_frame_size; )
. u' f. i/ c$ h
{
2 p3 x9 y8 C6 Q$ B- S6 F0 Z
for(j=0; j<5; j++)
1 J9 Y3 ~1 b% d
{
' D, b/ I' f5 X. N) j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 w. Q3 _: l; t7 j/ R
i++;
) f8 X9 m6 l; l0 x W
//if(i >= 4096)
* T r3 g7 L# i/ F8 z
// break;
. i( o( o- b/ J! \8 Z/ e
4 s: V- E: v9 X8 P( Y% _+ ~
}
. i2 R( x* W F8 t# D, Y
UARTPuts("\n",-2);
0 R4 Y, \- p0 R: X$ N6 Q
}
" F1 t* R0 Y0 I' P6 N4 Y8 Y
}
! ]4 s+ y4 ^6 p$ b& F S
9 y, X) O5 u/ a$ a u
}
2 @7 |" B( B' n
3 j7 b }! [# b; ^
9 P) H. }# ^1 P( e$ Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 w u0 A8 d G: p ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 ~% q3 H3 q* d @0 c2 [
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4