嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" Z, D. f% m" a# r3 [) X6 l3 b; Q
Void UPP_TASK(Void)
! A, \$ W3 p- a# x5 z4 i+ N) R
{
$ K x, h% ~. Y. J% f6 z8 C- Z
: X/ t" P0 y, N4 t! Q9 _/ E
int i,j,k,target_int_count=2;
, I% s& f: {1 G' f+ B* Y
char ch[2];
/ |1 p- X2 S/ K- Y8 m
" U5 p0 b( @8 S9 ~- n' y- N6 R
! v4 h' J! F0 |7 ^! q
, h$ `+ p: T3 }# U" `3 ~# ~
upp_interrupt_count = 0;
; E- W! w; B1 I/ G7 U
upp_error_count = 0;
! e. h8 o3 ]6 ?9 Z# ^: ~
' K3 A) Q) }; B7 q& u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* ~4 B {2 f2 @) K. d) y
// Initialize data buffers
$ a4 \3 m0 Q3 W) n2 q0 A
for (i = 0; i < upp_frame_size; i++)
: Z) Y9 `7 {* [- d2 q5 b
{
" R P) k& z$ q# e( ~# ]
upp_buffer_b
=i;
4 [' L7 v" G: y: X1 o/ ]2 G
upp_buffer_a
= 0xDEAD;
$ ~" }% H/ X, w
}
9 F6 {+ F; U1 T2 j5 a
9 r0 h3 e5 z( J
//for(i=0;i<1024;i++)
0 @1 A, S" y N0 ~: U
// temp
=0;
8 O& L( l1 ]7 U
$ h1 ?4 W$ D/ O8 m
//UPPReset();
9 K2 [+ O: p( k- c/ ]
/*启动UPP DMA传输*/
# ?- f( d+ O) b0 l
UARTPuts("upp_prog_dma_i\n",-2);
. W% |3 K7 a+ s2 [8 A+ m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) ^/ Z/ q" j) s, a' v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( b8 ^& n; L$ S7 l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ e; k+ P) q! |6 ]
+ B, `' [5 T" j9 J
UARTPuts("upp_prog_dma_i\n",-2);
; }2 A; e& |) N' L3 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ Z8 `8 n' M: R4 m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# c! l5 B, `& \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, R7 K% g- Q$ T2 J+ v4 q
/ G6 z5 O8 Q7 m& n6 ?
/*等待UPP传输完毕*/
# m/ T/ } F1 U3 s2 z ~8 T9 \/ w! z
//i=0;
1 K/ N1 X/ J, H: ~9 P/ O
//j=0;
8 X" e% I, S8 H1 F0 q4 P( r$ q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
V7 G! I7 h F0 {0 _
{
( X* y. \4 n) _
/* 测试UPP传输的同时操作普通DDR数据
8 \3 E7 y0 h/ g0 Y4 N4 g" {
temp
=i;
: D: G) _8 Z' _
i++;
2 O& ?( f- g7 W R; L; x
if(i==1024)
* k: Q. x, V L% R' i, U
{
: \1 n3 p6 Z1 w& [7 ?0 N
i=0;
5 g3 k: K: X3 ]+ w7 [
j++;
7 W1 Z) y" ]4 a# u) r- D& q* T8 c2 W
}
8 {' s7 J( z, P7 c6 |
*/
) P) }6 k3 `/ O2 r+ B4 ^
4 @% ]2 e3 k5 w) R2 ^2 _; z x! c
asm(" nop");
' L- x; t0 T5 j, d0 R
0 s: m; j5 F" i2 K8 u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 d- `$ C4 J* Y x
}
& o) C/ {" z# q, g: M
4 Q6 z/ Z4 W0 C( D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 w' l! h3 e7 k! U' t" x6 w
//UARTprintf( "i=%d\n",i);
3 v- W2 l& d5 N' X. O% d
//UARTprintf( "j=%d\n",j);
/ _& y- M8 S4 n$ B) c7 u6 ]- ]
UARTPuts("Data mismatch in buffers.\n",-2);
6 ~& F& @( d! V/ a+ n. M4 P k, n
if (upp_interrupt_count == 2 && upp_error_count == 0)
; Z O) w: h/ `( I6 p, a
{
x" g' k* k! h x8 k @5 P* r6 [
for (i = 0; i<upp_frame_size; i++)
3 E. @& r/ U6 o: p
{
- h! x3 e+ r% j/ ^& v( N, J
if (upp_buffer_a
!= upp_buffer_b
)
( ?" w( _( \" U0 t. }& ^
{
- M( q& K# Z( N5 ?4 `# D2 W, U
upp_error_count++;
+ v. L2 W" ]0 n% Z
}
z, z+ O' p: J- X4 Z6 B2 R
}
* N8 k! p$ j0 l7 M$ P& V9 w
}
0 @8 v5 J' x! V p7 l
- {+ a& t" Y3 u e. d# U+ j
/* 报告通信结果*/
. O! l( v9 D! m, b5 S5 G" Q0 F$ Z8 p! _
if(upp_error_count != 0)
" w! ]# V% l6 w* j" T* V
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. ^# ?: X1 G h5 U& r3 c I6 o% k
else
" Z! z4 K8 h+ w/ l* W& G
UARTPuts("uPP transfers complete!\n",-2);
/ B- Z- O2 x+ D/ G/ p9 F7 x) v
7 U, e7 W4 Z8 ^6 R/ R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; c1 k7 X' z% a; O0 u, M% l( L
UARTGets(ch,2);
/ E9 o8 j- u$ }& q
UARTPuts("\n", -2);
2 T$ i( f2 Q$ v% |9 `
$ E; L: E Q2 [4 H. y7 ^+ h
if(ch[0] == 'y')
# f: @6 b9 h5 r" n8 W. k
{
+ q1 r# j& z1 I( O
/*打印全部读到的数据*/
) L5 L( [9 U2 W% Q4 I
for(i=0; i<upp_frame_size; )
& @7 o L0 j6 L1 Q/ j1 C- k2 t
{
; G4 s3 w. \: P. Q& ~% d# Y& O( Q
for(j=0; j<5; j++)
3 N- f2 `7 m/ P4 Y' J% ^* S
{
) e* P7 p; [! c( Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 g, Y$ O+ b# n
i++;
1 e( D+ E# g) `" h" ~: s- |8 h0 s
//if(i >= 4096)
3 o& S6 ?# X. E- j2 i7 e
// break;
2 O% {( h. Y$ W: k Q: w. k* }/ t
$ D! ] d S7 c! J/ m9 p. i
}
F1 }( X9 c, o+ a, B" c
UARTPuts("\n",-2);
3 H4 ?! N: D8 Z" ]* n; {5 C) p
}
3 |! k7 f! C- W2 P
}
, h8 J6 _7 X) A( f
: Q, c+ D5 ~+ l) }- |7 L& ?
}
% |! f( x# D1 T
. d' L+ f" C. n
- l0 T+ ~# f) b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# Z- F+ J1 v5 x7 M7 P
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' L% T$ v$ k5 x9 H4 {
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4