嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ e7 u& i3 [0 f' Q' v, n
Void UPP_TASK(Void)
h3 n; y" e' q3 \
{
: ~. ]( t1 _( w; b
0 l" o4 {& |( M
int i,j,k,target_int_count=2;
- ]9 F A( o7 m, l* e* f% y( T
char ch[2];
/ o f2 ?# t2 M! `4 h9 `: C) W
; S5 {3 L9 H! ^5 s/ S
+ `: K6 m$ S" C3 }6 h$ _" O
/ q% Z3 A% X# e2 ^
upp_interrupt_count = 0;
1 w) w4 p- `8 @+ Y ^& r" l$ E3 l
upp_error_count = 0;
5 \& }( s- Z h, R
+ k6 b0 o [: v5 S) i; Z3 D, i
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 L# I& l' B/ \4 U) ~& S" W
// Initialize data buffers
* q, k* R& n, o7 `0 j* ?
for (i = 0; i < upp_frame_size; i++)
7 ^, Q1 I# J' m: W
{
* L# O* U( Y# V
upp_buffer_b
=i;
2 T, u1 C7 T# l
upp_buffer_a
= 0xDEAD;
' p+ |" _: X- e, Y8 }. j
}
+ C e, Q1 g1 f, D9 z5 h
8 j8 f; G6 H6 [- S! E
//for(i=0;i<1024;i++)
) }4 i, O0 T) w% l1 i/ s m
// temp
=0;
# T' m0 ^8 c& {/ S
3 r5 M6 n" a9 @+ ^# w0 E
//UPPReset();
) u: }6 O$ [ X9 z4 x u! R+ n
/*启动UPP DMA传输*/
% m' [" f% O8 n4 @! P" Z% B
UARTPuts("upp_prog_dma_i\n",-2);
. ?) q- L9 d, J; I' Z0 l' d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, _+ v: T8 ?& o5 b/ U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) j! L! }2 h6 R5 G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; l) e) q. B3 }: o
# s/ G- r5 K; n: J4 y: q9 M
UARTPuts("upp_prog_dma_i\n",-2);
; [$ [1 b; c- K* c4 i9 B
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ e% {. t4 i+ c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( q5 H: D/ S2 u, i2 h8 n" A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% x/ j n) v2 g# l2 f% ]# m3 n! d
8 i q3 @4 S! o4 `+ R
/*等待UPP传输完毕*/
5 C: n$ z) B& w% F" m9 f
//i=0;
) B& b2 _- `) ~( A+ r/ K
//j=0;
% @8 w1 `5 y9 N% \% ? r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
]7 \! |+ l+ q
{
+ ?' Y" X+ _) H. y. k2 z0 J* D3 o
/* 测试UPP传输的同时操作普通DDR数据
+ z1 l8 P: w+ k( v
temp
=i;
, ~# U. e: y/ |* \. i8 f5 B: s
i++;
! k3 ^. W, i. y# H9 T4 \# ~
if(i==1024)
) `8 C! i: k0 F1 J
{
' n, P; K5 H- q3 v
i=0;
. d9 S) O# b# ?5 ~6 a8 V
j++;
0 s" U6 l) e; \% f5 X
}
- m" x+ }% U* ?
*/
9 o7 ]; G/ r, j4 ~( T4 Q
- E, ?* ?* ~) i0 ]; j
asm(" nop");
( I1 n. ~7 `- M: y# C
! x4 F3 p& Y) G O1 \, t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! n! Y3 j6 _2 }; ^1 I6 v9 n" S
}
$ X% M6 D* K# h
' r$ `+ ]( v) Q' `5 r- w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 o; ]" K* k0 H/ q# @% R
//UARTprintf( "i=%d\n",i);
4 b3 Q& G' U. F" N
//UARTprintf( "j=%d\n",j);
$ |) y; j9 k8 w/ q
UARTPuts("Data mismatch in buffers.\n",-2);
$ z9 a9 f4 z" N+ o m6 g
if (upp_interrupt_count == 2 && upp_error_count == 0)
. l" c2 {/ M, O6 V E# _5 G# }; n
{
; `# ?( [; ?) t& ]# v/ k# L
for (i = 0; i<upp_frame_size; i++)
9 {$ j. u1 X5 `' n& W6 ~* W
{
) O9 R8 r9 a9 t6 ?
if (upp_buffer_a
!= upp_buffer_b
)
: z2 E; P/ S& `# @: y" \
{
7 p6 Z9 d/ u* q
upp_error_count++;
E$ j' s* q4 h8 M! g b( \4 a
}
* m0 Q# _5 L4 w$ U) O
}
8 U& J* f6 J- l' H' e
}
) d) W+ B7 Y, E5 ]1 x
1 K% w2 F$ p) z) c6 n
/* 报告通信结果*/
( l( C+ r& W' e. m/ r, L/ V/ ?) K$ [& Q
if(upp_error_count != 0)
6 ]! e& k, z! {3 ~% s* i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 ^9 M9 R7 p5 y# l. r% E
else
' _) C) J, k9 l; @2 q# d
UARTPuts("uPP transfers complete!\n",-2);
' v# ^2 j* {5 E" v+ M \8 v
, Y/ ]6 ?$ d2 ~/ p) a( N/ E$ A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 h" w" L$ ?' e" k4 Q" h0 D
UARTGets(ch,2);
( y; I, C0 @; [% z. Z1 K
UARTPuts("\n", -2);
6 ~' Y) M1 y: f9 g
! H% T& k$ k! {( S
if(ch[0] == 'y')
# o u; g9 ]+ Y! { e$ I+ ]
{
5 _7 c7 r1 [6 b& B3 L3 f- U
/*打印全部读到的数据*/
7 n$ `3 z* n7 q5 |9 s5 L# j- o
for(i=0; i<upp_frame_size; )
' Q0 B, ~$ T" F) b0 Y6 r
{
! X( I" n' A1 e# `. X
for(j=0; j<5; j++)
. O% p1 ^* X. d3 n7 [+ f; y
{
. W' [7 ^: N+ Y+ U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# n" @" C; S. `2 g
i++;
$ ?- d0 ?6 Y# `3 |5 v
//if(i >= 4096)
4 C' [; v6 O3 f
// break;
7 u" ?9 B8 E8 c. F
4 p! {* I+ v$ L" ]
}
' \1 ~& v" J$ T& K7 M
UARTPuts("\n",-2);
8 L) y7 \- p( k: ?
}
5 O h b, W, a' e: X
}
+ }) G& ?6 t& q
% R' U9 E) u5 D8 ?# q# z( C
}
, w0 D" G5 j! h: P! l6 ^6 r
4 I Y/ I9 e! l8 ^# k3 S# j. }
* z! f& I1 A3 b' t8 X) d& G g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* t1 t% t9 w- H1 f6 M. D! a' v
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; v. D1 @2 l- e1 e0 ^7 ]5 x: [
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4