嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ n1 G4 k3 `" S; N F' `. A
Void UPP_TASK(Void)
* W; o3 i) h/ |3 I( X5 m% p
{
. B; l; }7 N7 g8 q6 L: U7 u" X
) R6 q' F2 Z' W9 U
int i,j,k,target_int_count=2;
6 B, m! b" u0 J. Q7 K9 H% L; [
char ch[2];
+ {4 _. K* l0 h# Y$ x% e7 p9 m" {
2 F- l9 m( f* y' {3 {
3 h+ F9 {) B X9 z. s
, P; I% K% q% Z! z k/ V$ F( d
upp_interrupt_count = 0;
- t! [: E0 h& V/ l+ y5 B/ b* q
upp_error_count = 0;
/ I. e% o" k+ m4 a. O) o
2 I5 {$ z9 @; t6 l+ S2 }) k" B7 a- ]; ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 F% u# r7 \( V6 _' n! q$ Z
// Initialize data buffers
% e' U9 y7 h2 G" J) R# Z
for (i = 0; i < upp_frame_size; i++)
7 M% C0 y4 c$ j
{
" O- |9 k+ P ^' |1 l7 B
upp_buffer_b
=i;
& a' n% T- \8 ?# i8 }& M
upp_buffer_a
= 0xDEAD;
" j5 t) V ?' Y6 _: y4 f
}
- `8 E1 D, _+ }% ^+ t
. {* S* t& [6 F/ W& L; {7 C
//for(i=0;i<1024;i++)
, f: |: d Q( m! K" @
// temp
=0;
. F, e( m% j3 G) }* j0 e
* y) x! M0 l6 @! o ]
//UPPReset();
) B! n; k' k0 J" P% J
/*启动UPP DMA传输*/
( O- I# U& S" Z6 r* g, H
UARTPuts("upp_prog_dma_i\n",-2);
. d' a0 N: R: G% P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* I* r( O0 C4 K* o, c
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. v0 m6 O) W0 x2 o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) j& [% @9 T- j7 v) z7 X$ j
+ O! W; K c3 p, @
UARTPuts("upp_prog_dma_i\n",-2);
: b7 j0 b# ]4 C6 I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) I, e3 Q7 P7 d6 M- K R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: h3 W; `; T# t: W. t1 A# r p
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" w7 O, e- U- F9 |) {5 D3 ?
8 s o( k ?! E2 ]/ d
/*等待UPP传输完毕*/
t, b6 Q0 v) [- x- l( x
//i=0;
7 ]9 t6 H* j1 f0 Y u1 |
//j=0;
" h% s# t2 U9 I) E( N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 r8 S* K( ?" }1 W- Q9 g3 C' F
{
) c" l6 ~$ k# X0 Z; n8 G/ R
/* 测试UPP传输的同时操作普通DDR数据
9 l8 D6 n* ^/ o
temp
=i;
# o' N# i7 ^3 \! E4 g6 V
i++;
9 S! j- F5 _9 Y5 I) @
if(i==1024)
; |# o- C2 E4 f* L# m
{
6 _5 x- J$ ?# C% U- G. u
i=0;
6 u% J/ t0 a. j
j++;
: L$ ^) J D' K: I9 t7 d" j
}
& A% w5 I+ K; p6 N
*/
# I* R4 y& h. V D, _
* k* M- _. X5 T/ X3 r0 m2 r
asm(" nop");
0 [# w5 Z- g: P; \
8 p/ E1 }4 o4 V
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) o) }2 \3 C1 u* Y( E" b0 v1 x, F% g
}
) ~- p8 n! m5 M# @7 }
* c, a( g; }5 h1 d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; |' o, B* G' V1 f$ `" u
//UARTprintf( "i=%d\n",i);
% m, \# X4 Y5 r' @0 ^1 Z
//UARTprintf( "j=%d\n",j);
- R' I1 r$ }% k% S4 M6 Z6 S% h
UARTPuts("Data mismatch in buffers.\n",-2);
: [' l- p% w% h# I& v) b" a
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ d9 x K" \1 ?% S1 h& J/ z% A
{
( E F9 w0 n# w% R! v! |/ h
for (i = 0; i<upp_frame_size; i++)
' y- k% b1 |* e
{
8 p$ |( g+ {. k: T
if (upp_buffer_a
!= upp_buffer_b
)
) q o% J D) ]: Q! j! |
{
* i9 b! e: ]2 M- I- n& k
upp_error_count++;
$ |9 Z8 c# @% ]( p! q2 u
}
: J6 m( \: q7 w* j0 Y$ W; V2 p" c0 X
}
5 |* E( j: B/ [: `3 w
}
' K/ R4 ^/ d4 h8 M& p8 x# V, o1 b
+ r5 |" f% n6 p8 F& W7 j, h/ a1 b
/* 报告通信结果*/
; s' Z9 o* i* G1 D' B3 I
if(upp_error_count != 0)
" ]: @/ [9 j" g4 V
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 y- T# r, _2 W3 R: g
else
" S# M5 w) `' Y* S( C5 o) a
UARTPuts("uPP transfers complete!\n",-2);
0 T1 y* C" W+ J+ e! R" ]
4 K r& a' [- C! T# M0 ~
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" K& f3 [, n9 o y1 k% y/ `6 b
UARTGets(ch,2);
. Y- d; c. R2 i) _1 Z ?
UARTPuts("\n", -2);
, Y6 Z. a7 K7 t. ^, l0 H6 e
/ c7 X! Q9 p4 }3 [& n
if(ch[0] == 'y')
/ {% }% }3 w5 ~& N, A
{
$ p+ a* [# P2 s; R1 s" p D* U
/*打印全部读到的数据*/
$ t& u# X8 m; F
for(i=0; i<upp_frame_size; )
7 L1 z5 y) w$ }; i# Z `; }
{
. @# Z" ^. Y4 w, d
for(j=0; j<5; j++)
3 D: L8 h5 d" `5 j8 [* X+ p. D
{
( d0 J, D2 c7 x9 _) _+ ?) J: D
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: h( J' Q1 x+ `1 s
i++;
* }& Y" U3 Y `: z8 A6 d
//if(i >= 4096)
& G8 d p2 u! S# a% e6 v/ S
// break;
) `0 G1 Q2 {- a+ O* k: p2 D
# c7 h1 S' M7 p3 \0 ~ ]5 `
}
0 T+ O* M9 C) a& B, h& Q; V
UARTPuts("\n",-2);
% U C: J! g. M8 g$ S- j( u
}
. S4 G+ A* {1 }$ R9 v4 W, x* I/ Q3 s4 i4 b
}
; R& Z1 A, s% N4 A& R' _& _$ G
7 K! h% X3 x. U4 J! @0 r: R
}
; y3 p. }1 Z5 R
9 V4 Q# D! y4 W. r
( _7 h; ]+ f1 F2 h$ W4 N$ G! w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; q+ @# E; t( Z7 e2 C1 j
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- k5 [+ K- A# I) A+ C( V) z/ B
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4