嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
p" ~5 G- o7 u2 N
Void UPP_TASK(Void)
+ m7 O C! z5 S
{
- g) g2 P9 k$ _; U
* [: W6 T: s6 T( U6 e6 j$ x
int i,j,k,target_int_count=2;
" A% S9 D" S; b) w' \
char ch[2];
% y$ ~2 t# @/ X2 e6 h4 v
6 n9 S3 _, I# p
8 N& t! g6 K# s3 Q2 J( K( r
0 I4 v2 r: ^, V# L( j- C( B6 ~
upp_interrupt_count = 0;
/ Z' Z! v1 t2 M. o% m
upp_error_count = 0;
0 a# [ S5 c$ M" O+ S. W
5 ^$ _! p5 t8 [! [+ p0 F+ e u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" U& g+ H' ^6 Q, ?9 W0 C! ~
// Initialize data buffers
7 v' N6 J0 g" S6 A4 E" }8 k
for (i = 0; i < upp_frame_size; i++)
. e0 _* x' ? s
{
$ H1 A- |: e& Z) r: \6 D: X; }- {* b F
upp_buffer_b
=i;
8 x" u$ r$ |9 M
upp_buffer_a
= 0xDEAD;
7 Q8 P+ J3 ?: [% f" t3 M) j8 N
}
5 j- l1 ?+ W8 F% H
Y5 X. K1 Q7 b4 a
//for(i=0;i<1024;i++)
5 p+ N* V- g' U0 x( |" m
// temp
=0;
$ X% d/ i! A, N1 X
; j! l5 o- Q$ H0 e# R* R9 G
//UPPReset();
( y/ i; B5 F7 s% k- m& t/ ]( B
/*启动UPP DMA传输*/
! F; q/ z5 U/ b9 v- g# i8 t4 l# Z; i
UARTPuts("upp_prog_dma_i\n",-2);
8 U/ K* ?; ~% C' m o" g* a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
y( B1 Q$ a- d/ |, |& |) N+ h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 |: ^: f3 J' L* Q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" E% }8 k: @3 E, x1 E& ?
' P n( s# ~5 u+ S; N
UARTPuts("upp_prog_dma_i\n",-2);
5 U* |8 Z% C3 N
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 V4 x- ~" z V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 W3 h. k! g; O3 _- O
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 A2 S! b8 O6 v, q% A, n3 q
1 ^( \ h0 d0 v0 A C
/*等待UPP传输完毕*/
1 k/ g. a$ i; [. z
//i=0;
+ o& d g" [/ o/ N6 l7 P7 N
//j=0;
$ S7 B5 V$ K3 B1 M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! T; Q* ^) g( l, P$ q& N
{
5 c6 V) [# ?( E# Q
/* 测试UPP传输的同时操作普通DDR数据
. [: p* z6 E, E
temp
=i;
- c* d! {; R: H. N% o
i++;
2 @0 j/ D% q y- ^8 e
if(i==1024)
. R7 j9 ]5 Y" I: K: H2 E
{
9 t p( \7 [+ M0 R2 K
i=0;
8 a y+ ^4 z ~3 Z5 l; D* ~. a9 Z6 q
j++;
% O: o- q" H4 E+ ]( l) p- H6 u; Z, g
}
$ O- j4 H' S- q, ^* `
*/
" l8 ]3 V* ~+ p0 D" Z* F* U9 I
4 M( I4 t O5 K" p( m% j v" K8 K
asm(" nop");
) r! j( k" G$ F- @9 }: I( L7 C; {7 d
( T" x, w9 ^) |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% C! P, e0 |0 n# }7 D. m
}
7 Y6 Q. b/ f4 U# i
3 m8 Y+ |" C1 L. N, s7 j- m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* j' M5 H7 P0 N: \: ~
//UARTprintf( "i=%d\n",i);
8 _* L3 R' l( F+ i' }' ]
//UARTprintf( "j=%d\n",j);
3 e( m# p$ M& S3 s, w9 ^
UARTPuts("Data mismatch in buffers.\n",-2);
: Z0 X! l$ \) l% B5 h/ K% Q& c
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 Z) l n7 u) R% E9 @
{
8 t" V6 ]* f t, F. _7 y
for (i = 0; i<upp_frame_size; i++)
- W) O k) j- I% L5 n0 t! u
{
$ z% s- G9 n2 {- ~3 V) _ u: n
if (upp_buffer_a
!= upp_buffer_b
)
5 t. s( G7 a. H4 R- X6 v
{
: G5 {2 K1 Y9 h! y% y
upp_error_count++;
- V2 \0 Y5 R/ M1 T
}
6 i) O2 G: m6 e
}
4 {3 e" e6 {- `0 Y
}
6 m1 y( [( c8 ?1 i
& `* W& A7 r( R# \5 M/ G3 M; m
/* 报告通信结果*/
5 M* W6 R/ |# E7 {' E# m
if(upp_error_count != 0)
) z: h* V7 C9 |
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 S6 j0 I' |, O+ S( u; p# k/ T: U
else
& Q# A$ {/ Q) n5 i( k2 b
UARTPuts("uPP transfers complete!\n",-2);
# H- h. {/ F& e! r% ^
; y2 S) c" x* O( e+ k- H
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 r7 ?; i- q4 M- ~
UARTGets(ch,2);
9 @' b- Z8 u9 r! b
UARTPuts("\n", -2);
: I; `" j. k0 i' _3 s
4 z; c2 x$ S8 b" h7 N& W$ h" i
if(ch[0] == 'y')
. a: @& x0 _7 Y
{
5 H+ g% I/ C4 K6 Q5 L
/*打印全部读到的数据*/
7 ]8 C0 G! M9 U+ k# W0 r
for(i=0; i<upp_frame_size; )
' G9 g0 m/ `$ A0 W. G+ Z( w
{
) e/ u' X7 U) W7 y& J. D( W" |
for(j=0; j<5; j++)
) ^6 B; v; j F& X; U9 [+ q* ^
{
- U) J. V$ Z3 { g1 v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 E# I Q" e- A6 M
i++;
- P7 T6 \$ ?- B( T$ y- x% p7 Y
//if(i >= 4096)
' z5 \: y& D4 x. E( C7 `
// break;
" u2 w% k/ U+ q3 A6 g! f
2 z. s) w- Z6 D% A* j I+ ~' a2 u
}
5 D0 Y; A) O9 h8 |1 k+ y2 U& J t
UARTPuts("\n",-2);
0 O% x" r: O H; @% ]1 g' K
}
' y8 w& W; R2 f. x
}
$ M! `/ |! N- U- q( Q- {' {& S
& n k+ I+ {1 l5 Z
}
$ ]1 r! e: n2 L$ @. X' P
P) i% B: T" q0 h$ S, l* j
: x, f0 K6 F( k/ h) [1 Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ S0 O' e% P) }: x5 b4 U0 \/ h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
^1 o- L% Q9 H' w- Z/ |7 X7 M
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4