嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( t( h" \% m0 h
Void UPP_TASK(Void)
/ o1 B) q$ `: @" A0 ~1 v+ i6 }% ^
{
- ~( a1 U' P% Q+ X8 g0 y' b) ~
; _- q8 \) _* K' ]2 Q; [
int i,j,k,target_int_count=2;
0 s' y( U, H* l/ u; A; }6 s
char ch[2];
?- M5 a0 R+ V" Z( }
' g! `) \2 k% c Y# T
, P8 r: E- a0 k' I1 d. l
* {9 T+ p$ w9 j& q: H; V' u
upp_interrupt_count = 0;
5 `9 z' [0 y& X4 r* N$ m- p
upp_error_count = 0;
7 b4 _( y* @- O! M% x
3 F) d9 Y$ S/ Q. W8 I$ S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' R# C& O' P9 z& o( A K4 t
// Initialize data buffers
6 h' j- }2 V: d
for (i = 0; i < upp_frame_size; i++)
9 c- \2 _1 h- `9 c/ O0 ]- C
{
- o9 s1 y, d! @! ^+ |9 X
upp_buffer_b
=i;
: V9 P% [1 r, Y
upp_buffer_a
= 0xDEAD;
0 e( r3 s: S6 \/ M$ y) a
}
& b0 E8 o# e) T: |4 b% L
$ n0 @8 H" Z9 v5 e8 H
//for(i=0;i<1024;i++)
, ?4 c( f& P* @* p7 w
// temp
=0;
6 F' @) N/ W% s0 ], M+ Z. Q
6 Y4 R' ~& d2 d8 @% G$ t
//UPPReset();
! f0 d3 W. v) ~" O/ |( q9 O
/*启动UPP DMA传输*/
8 v) K5 @! ~' D2 p. G
UARTPuts("upp_prog_dma_i\n",-2);
. Y7 V e' N) D' b
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! H! g! S) @& L" b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. [4 i/ D3 ^0 V6 \& I/ v$ v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' d: X0 X- N/ L
! r& { V9 I$ s I3 s6 |/ c: L+ d
UARTPuts("upp_prog_dma_i\n",-2);
- v2 o, P' a" M/ T* A
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 r% e" E& I9 Y. v7 n" T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 N% p( c5 C7 ]- z' Y: [& e: o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" r; X6 G) e, \, G. ~
9 Q y* P2 E+ y6 L2 w/ Z3 Z
/*等待UPP传输完毕*/
5 U1 X+ R1 l5 b- C
//i=0;
2 [* I4 c4 N% b9 \+ L0 i# R0 _
//j=0;
: g. Q) u* k+ V/ d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* q( r+ L5 ~( e$ Q
{
5 q `% h- E/ F5 p% X. D+ P) [: d. F
/* 测试UPP传输的同时操作普通DDR数据
4 ~ y, ~) {4 j( P% n+ u7 P; F
temp
=i;
7 }( h: H% h: a1 A# a4 @8 y
i++;
; l2 f; l+ {% b' o2 g1 U/ @) {
if(i==1024)
! z5 c2 V1 T% C; [7 E" v6 {+ X
{
9 f+ I) \# r3 y: R) n" i q3 n0 Q5 d$ N
i=0;
+ Q, k( Y# W8 G+ g
j++;
* @$ I6 f- e- K* a' T: V- b4 r# P
}
' o- w8 A( U% W2 ?4 T
*/
& O1 A4 l) a9 W
4 h+ C) Z2 r. B. W1 Y" |. V9 I2 c
asm(" nop");
* N% s6 N( s8 [$ C
8 S. l- o4 }2 U: R- m5 U
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& b6 M; B% m% u% L) h$ u
}
$ l! Q- ?+ x. |1 X @2 p" @
0 m N( G5 G) C( o1 R7 }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) q3 j- d+ B: v* I( A: Y8 p4 y
//UARTprintf( "i=%d\n",i);
5 c$ B& @; \$ A- U, l
//UARTprintf( "j=%d\n",j);
% Q& L$ P3 `9 I* B: n6 n
UARTPuts("Data mismatch in buffers.\n",-2);
+ x+ n2 {; c) }% ~* q, F
if (upp_interrupt_count == 2 && upp_error_count == 0)
. `9 s- e( w+ A2 f+ ]* w- s6 G
{
/ E4 q: }( l: D: u4 n% u# F
for (i = 0; i<upp_frame_size; i++)
! K6 W% p5 `, G3 L" r5 Y
{
4 O& w4 D" m! F% I! D
if (upp_buffer_a
!= upp_buffer_b
)
1 C+ j- R0 I) B
{
. G1 u' P3 x% b
upp_error_count++;
2 j# y1 F% y0 O
}
1 F0 i! [" ^( ~6 E
}
9 D; u% ?! {7 v$ f- P
}
* b) c% J, T6 I$ A9 h
0 V( Z4 Y1 ]" T
/* 报告通信结果*/
( Y1 z6 F( x) ^! f9 e
if(upp_error_count != 0)
4 G: e& x) L! y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ f+ w- j, J4 f7 [ P5 M$ p
else
0 B2 o p0 L9 V5 O& N9 g. \
UARTPuts("uPP transfers complete!\n",-2);
4 e$ ^- a9 B# u& q' k" ^
7 e3 O$ E; @( k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 G8 M' l# R+ H( j5 |
UARTGets(ch,2);
4 }6 |5 E Y5 E& j0 e$ T
UARTPuts("\n", -2);
. g4 j" y, H2 w" [4 G! S0 E
) q2 a0 r$ c* L& @; e7 J& [
if(ch[0] == 'y')
4 }5 O) F3 L- E) M r: V. V! O8 a
{
! Q% x7 ^" M- g" I
/*打印全部读到的数据*/
6 C3 j0 g4 ?: M# i
for(i=0; i<upp_frame_size; )
$ W9 h) s8 q4 y4 ^' g& e
{
3 V) x4 D) @# g. e
for(j=0; j<5; j++)
+ H* A( W4 ?) p y2 K1 `1 h
{
2 ~8 z' ]& `5 f3 ]* o: ^1 j+ K
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 P% I4 E! r% C& ]' W
i++;
1 \* z( H- Q( R! d5 k' m8 S* g% ~
//if(i >= 4096)
* l; w- l- E4 v1 m5 Z, t
// break;
- S& ?# ?* [ k4 j |1 q
" A9 O* J% U: u9 ~$ L- S3 g
}
& c: L6 ?8 |+ ]* c) x$ T
UARTPuts("\n",-2);
* z- S/ z3 \, `; _1 N+ h
}
$ L/ d1 J* I3 J' n1 o
}
0 I/ W& Z( `' @5 n3 h" T) h
% I7 n# l" L' N; O* |7 U, F+ w1 I
}
1 H- [; X; N4 c7 b8 z
6 h& |! r: t0 B# ]' p. q% R
( H4 j$ @& R* \' U- y& ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- s8 E& x2 q9 a! T4 j! k- M5 F; s
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) ] B/ e `$ ?& d$ D8 o' R
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4