嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ F8 n" U; ?0 u) n6 t" {( g4 |
Void UPP_TASK(Void)
' p8 d& X* H$ F* M1 }
{
) B" S9 B: w; b0 S, t* u
5 D. N9 M: ]$ d0 u8 Y6 b( V
int i,j,k,target_int_count=2;
K# {6 Y0 T) V
char ch[2];
( s. U# ?& a }
' P) p5 t! V) `
6 b$ S) Q p% ^8 ?" K( g4 g3 a+ x! y. t
9 @9 ]/ A! T) w9 R8 X
upp_interrupt_count = 0;
7 M# a+ \, t) c' V: ~5 A- N* ^: k
upp_error_count = 0;
7 H+ R* }. \: ^; n* f# F
: ?/ C1 b) n n2 }" m% s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ J9 v7 k: G. Z9 B" C* y
// Initialize data buffers
5 t6 P: P* t0 c% k6 C ]! X
for (i = 0; i < upp_frame_size; i++)
' u1 B* r% v, Q+ Q% R: P
{
: W# K. Y7 `- Z" W' j. b3 N Y
upp_buffer_b
=i;
/ N+ Q3 a/ e6 x" \4 ~4 g, u
upp_buffer_a
= 0xDEAD;
% Z/ G4 f, S) B& T0 `
}
2 J; z1 X# ^: T( J6 U
3 b7 a4 i# F5 N* E! P! t% q
//for(i=0;i<1024;i++)
3 n6 x/ Z4 r2 z; U* N' K+ `2 d" A1 Y
// temp
=0;
) D8 U" e; e1 D; _7 ~( C
+ i( F8 z; M& b! t% J8 ?5 {
//UPPReset();
: p& U# A$ {5 I# I$ `6 h
/*启动UPP DMA传输*/
' x2 R4 ^* ~* P3 w
UARTPuts("upp_prog_dma_i\n",-2);
, z& O9 W! l A: V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 K3 {3 _* X* M' q$ r: i. m+ P* r' ]
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 U% j: X b- [+ G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 o/ n" ~' Q! m- w/ v; d
H* D3 P7 T! o/ Q
UARTPuts("upp_prog_dma_i\n",-2);
" _( a$ t: V/ Z6 I; c$ y8 H g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 F8 y3 M6 P( T6 s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* M: A1 o& a$ j) v5 L j# K4 m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: `' a, T% a/ m& Q8 F# e1 z0 R6 C( x+ V
) L3 F, g. e# Y3 t7 Y6 s
/*等待UPP传输完毕*/
" q! q8 T- ^: c" @) W1 ^6 |" T1 r
//i=0;
) T5 i8 d d2 s& n# X' J0 P
//j=0;
4 Z! O3 _! x. c+ }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 u' `9 ]; Y5 D4 L9 s
{
9 p6 g5 y: v: a) u7 G
/* 测试UPP传输的同时操作普通DDR数据
% e, }5 W4 i# }- B! I1 V
temp
=i;
- T. Y5 i# e8 k3 n" s, z
i++;
' ]) t0 H7 T* i: c
if(i==1024)
& Z; [& q6 O" ]2 @. S Q: {! ], G
{
. [7 `* s. \3 ^9 @+ }; M2 k# ?
i=0;
) J7 K" e9 a A1 N9 P: q9 ?" ~
j++;
9 G; Z9 e* W* u+ n& O
}
$ t' q1 U/ P. ~) A
*/
3 c" T! K. S5 o K, _- ]4 f: b' e
$ t+ `5 }; o+ ~% P# Z/ y8 I& G
asm(" nop");
r8 c3 I: A9 K- B' T
' ~. B2 T; p* e1 n* z2 `
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 o: G7 b2 d9 @) L: L
}
$ Y! n9 b1 \% P) C
2 w0 q2 [( z. ^! W4 G( X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% g2 s. g/ t" o- _, J
//UARTprintf( "i=%d\n",i);
{- ^/ M; T' ?* P
//UARTprintf( "j=%d\n",j);
0 A# Y/ t: B5 k8 a r4 U4 w
UARTPuts("Data mismatch in buffers.\n",-2);
9 {& k$ l! C2 j1 Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 d: {9 [2 |6 g; J" A
{
! w7 W* u) q+ O, M' T5 n( a6 z
for (i = 0; i<upp_frame_size; i++)
" o) A E) p8 X
{
! |! g8 E2 \7 f8 Y: y' i8 x% l
if (upp_buffer_a
!= upp_buffer_b
)
( R& p1 d" Z% F% P( v/ @; @
{
0 q" H7 g; U8 @9 c9 a+ j
upp_error_count++;
+ n6 R7 _; a, o e7 D9 _
}
7 {0 A5 B! x" X t. u; k
}
0 |: B( G, K( Y+ }' |; f2 T
}
/ s% t+ Q- [5 B9 ? W, V
% h. M, e/ }* ]: B& H$ j2 b
/* 报告通信结果*/
! q; f/ V6 b! R* E f1 Y
if(upp_error_count != 0)
3 M2 D/ x1 u/ P a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 O" w; l" ^0 | ~4 E' n# }
else
; m; q3 H1 E9 a' e; R+ R7 ^2 |8 a
UARTPuts("uPP transfers complete!\n",-2);
. j8 F. M7 u7 i0 U3 v0 w% u$ K
/ _# r# ~5 c1 t5 o7 M, \3 [
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 S4 b- m( n( i& _
UARTGets(ch,2);
* b# J8 \+ k7 ]9 o7 F
UARTPuts("\n", -2);
; {" U; K* o+ ^" Y( p3 I
, t6 J+ ^' y/ S0 _/ \: j6 i1 }
if(ch[0] == 'y')
3 s$ K1 \: V7 p4 R7 \7 H
{
- m. c. c' ~5 b2 i# o/ Q1 X; J
/*打印全部读到的数据*/
5 n3 L- X0 I( p W5 e
for(i=0; i<upp_frame_size; )
* M1 J4 U% M1 \/ X
{
: n$ Z2 ^) i6 T! G9 l
for(j=0; j<5; j++)
: W; m2 k N8 _ P
{
: k# k8 j- D2 k7 U( g% c
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# j, K. h2 I5 X9 @$ T/ v2 w, a; h
i++;
4 Y( }: I3 f7 h2 M: h- i
//if(i >= 4096)
9 G& B: D0 m* B6 K' T# ~
// break;
1 W! | I4 U4 }5 B6 ]' {, e* A1 z
0 l' |& o+ j$ Y% i) a) _
}
: C9 R4 V* \2 \
UARTPuts("\n",-2);
% y% z& Z0 o; _, Z. y V8 @ F# k
}
$ a# {. Q& j* A( Q8 L
}
# V9 i+ L) v- k2 d: d
, w3 X" B% ^( Q
}
0 w6 o/ M. }0 w# _
4 {) |7 g R. B
3 k+ x8 y( j/ G8 g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 R: ^, Q/ C* K) ]3 T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ j3 ~4 W+ g( g# r r
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4