嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ Y0 S" M. q" @3 ^7 U0 _/ j: S
Void UPP_TASK(Void)
% G% u% t+ e% `, [( M7 Z* l
{
: d1 z3 |! d8 q# b
! z p* w5 m, `% V7 ?, Q
int i,j,k,target_int_count=2;
; M `3 c, n* b# O+ q/ j9 s9 T
char ch[2];
3 G( B) g4 k% b# h' U
- h8 I0 ~4 x" e# \9 G
$ p/ l( x8 _% ~' Z7 d. Z. G L
# e, V G( c7 M! n% Z
upp_interrupt_count = 0;
! h- o1 j* a% U, B! [
upp_error_count = 0;
4 F% @& N9 o" P, B$ X, K' S+ }
: I2 ~3 @/ W, _9 n
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. U3 r" j& a8 l4 l" u0 U* Z( j3 q
// Initialize data buffers
) P& W6 B" \& b" D
for (i = 0; i < upp_frame_size; i++)
) ~+ ]- V l4 Z
{
2 T2 s6 `. W/ K+ k2 F
upp_buffer_b
=i;
' C8 m: p# X8 V# j
upp_buffer_a
= 0xDEAD;
/ T4 c# i. [0 R. y7 o# x2 ~
}
4 r. V5 R& W" _( U9 A
' o5 ~9 x$ R" b5 U- N' Q
//for(i=0;i<1024;i++)
" S8 M e6 W/ f2 Z' ]
// temp
=0;
4 o6 ]( U. Z. G# ^
2 C0 d( `3 l* u: L% R
//UPPReset();
$ k+ ^: ^- L3 v! _$ A- v* f0 T% g
/*启动UPP DMA传输*/
) s8 I# [' `, |7 _7 s
UARTPuts("upp_prog_dma_i\n",-2);
# }/ @- r; y' l. g8 t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 F# W! }! O0 J8 ^6 c9 {! L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 `* n2 A+ d/ u( {
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 C5 b! V9 _9 C4 c& y
# H# S. X* E4 ~% ^7 [: o) I
UARTPuts("upp_prog_dma_i\n",-2);
8 L f7 }6 s# b I7 e) P! I5 f8 @7 m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; U/ P) f( y$ S- h! H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! A+ w$ u( A, \4 z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ z& }8 `" j r1 [! o v
* P1 I, Q6 b0 y' ~( V9 p$ X% S
/*等待UPP传输完毕*/
5 c8 A( m, a7 _- a8 c; P+ _
//i=0;
" ^2 E W {5 ?1 y& D+ f
//j=0;
8 R$ V+ M2 h9 @3 F2 p9 Z) I
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 n0 y6 p/ R1 b6 ^
{
$ q& {% \' m3 {! D/ U* s, C
/* 测试UPP传输的同时操作普通DDR数据
; Y, {# R, N5 ~+ K9 V- d& \
temp
=i;
! T6 b- F0 _( h' n! i6 Z
i++;
* \# N c! o# e/ W+ R
if(i==1024)
/ d# {+ U9 k1 O/ f/ a0 i1 e+ x! z
{
+ b. v. _: U, D- a) n: b
i=0;
& k8 [) }3 u; |
j++;
. j, S( S& @4 C
}
p: l8 W$ p$ L9 T" G6 K( N. h7 `# e
*/
) n$ {, K/ e$ P2 y
( N7 E& }! s$ x) E
asm(" nop");
$ I3 j x8 _" ?8 E! ^7 U2 Z
) }- |/ e+ F& J9 A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: C4 Q/ I4 {6 K, a8 L, r8 g' x, O/ V
}
0 q1 V3 s/ ?+ \# v+ ~# ^5 o+ _& g
7 U" V5 o0 j k- V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 q6 c( F6 ^. _
//UARTprintf( "i=%d\n",i);
: X7 Y0 \# z/ H& o s5 ?- R* m0 g
//UARTprintf( "j=%d\n",j);
& g# d% S7 h c7 t- p s
UARTPuts("Data mismatch in buffers.\n",-2);
4 m: z: `/ ^4 j6 a7 R5 C
if (upp_interrupt_count == 2 && upp_error_count == 0)
, |9 e. P/ b) t6 Q1 W5 X1 D
{
$ C5 r3 z% j8 X
for (i = 0; i<upp_frame_size; i++)
$ O- A2 S' g. Y0 Q! U5 i# \
{
5 r1 o# N+ n* r m4 u+ ~/ F5 T3 M- x
if (upp_buffer_a
!= upp_buffer_b
)
: I6 d5 d5 Y$ P, I) h) `3 T; K
{
. H7 H+ {6 N! j: q
upp_error_count++;
% F% O) E: O8 V- W( \/ I
}
( N: g+ |4 ^$ X1 X5 I) ]
}
7 [4 e" N3 Y4 E; I* E) ~6 c3 H' L
}
0 P s" s$ |: b4 |( U; ]1 ?
7 j- P4 x7 _) l* p8 I) g
/* 报告通信结果*/
5 }" o$ L5 g% i' G1 s
if(upp_error_count != 0)
% l- a! G1 t; z8 T, }* i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 G: {- w: v% I- b+ u5 [
else
% p. N; z* D# L
UARTPuts("uPP transfers complete!\n",-2);
) G# O4 s2 C. Q* v4 f: q( T) ~) ^
" F, n, H' b" i1 B- _
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, G- X, r3 _, w" z( [' C
UARTGets(ch,2);
+ J+ Q4 D1 G8 C" p
UARTPuts("\n", -2);
r2 [/ m9 G3 b/ E6 q' ^, Z
d/ ^& x" ^6 L3 E+ O( L; {& `* s
if(ch[0] == 'y')
+ b4 G+ R& i$ M( |3 g0 k
{
) z( X+ j; D* D7 E' i6 a7 B2 q
/*打印全部读到的数据*/
( n$ X- H+ l1 q: o
for(i=0; i<upp_frame_size; )
! J% t m8 Z* |( U4 x
{
, o6 M3 d3 ], L" I
for(j=0; j<5; j++)
# O6 u# E0 j3 s+ O
{
8 W3 v* d* ?( t+ H8 T, \) L
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 }, L( X: u' r0 i( z# E" M$ D
i++;
. a5 Z/ Y& c3 g. U2 ~& y
//if(i >= 4096)
O5 z4 Q# }, ^* D" I; p
// break;
# P- S# l$ x1 n( ]
: f `( X. B2 X8 x8 c
}
* l0 G# J# W$ q2 F0 G
UARTPuts("\n",-2);
( C" r+ u2 I6 n2 p
}
8 j# \* i) N6 `2 j( Q$ H
}
$ M b$ U& ?+ A* @/ O }6 M
5 Q* ^. K. `" k
}
% u1 O; a/ Q# [
$ Z# c7 H, I# x$ y) F7 g
G1 U- r' n7 w2 x9 E! c& L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" N1 f5 u# J0 Y" O4 _) L8 W1 ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# Y: d0 _$ u+ _- x% q# U% g
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4