嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- ^+ d7 b' t2 v) P. @4 N$ E# s
Void UPP_TASK(Void)
( M% V& R. H W8 [ {. [
{
" n: `. u* I: F3 l
. O5 H6 D: {. T* x) w2 H, e
int i,j,k,target_int_count=2;
1 `; E6 ?( s: v3 h! M
char ch[2];
- G3 B7 G! }' j
# [: [& ]& y# [7 r9 M
5 B8 ^- J: c% d/ b4 C
( I7 f5 ?. o# L, ~+ r1 u
upp_interrupt_count = 0;
* W6 e4 ~% z9 j T+ D
upp_error_count = 0;
. p* P5 K1 c) q( s* ~5 u
4 x, T1 E1 W% s, W: k
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) |3 }6 \) ?2 I0 o. o; C* z
// Initialize data buffers
; U5 Y3 K" c) y! V' _5 k
for (i = 0; i < upp_frame_size; i++)
8 c+ D- ?0 H! f1 P/ V+ R+ T
{
9 |) p+ ?! U n8 Z
upp_buffer_b
=i;
/ |0 W. G$ V; r; [& N" k
upp_buffer_a
= 0xDEAD;
2 M% u4 d. T/ _( N7 c' |
}
% D" k) c- i- g
$ r/ g/ u0 B( z3 e! `
//for(i=0;i<1024;i++)
) o% @5 Z" i' [5 c: g& |+ c
// temp
=0;
' @8 b. K2 A- Y5 F
# R2 f$ O+ q' E1 ?
//UPPReset();
2 y7 @: L( P2 [( b& X
/*启动UPP DMA传输*/
: {: n7 ?9 b" A" y
UARTPuts("upp_prog_dma_i\n",-2);
9 k8 p9 Y3 s( T# s. _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: w; o+ X$ ^" ]' C2 P5 I9 R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 Y/ K% V5 r# I5 ~ r% F, Q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# O$ S0 o0 B+ ^7 g4 f) m
; g- [- V# J+ n1 B7 Q E
UARTPuts("upp_prog_dma_i\n",-2);
/ C7 q4 V) A* \% n0 l
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, B0 j+ A% h# R- R0 }, i
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: H" [+ C; L: ]6 ?! W* y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 x l! j2 Q! ~7 M5 l7 y4 a
. y- `; {' G3 m
/*等待UPP传输完毕*/
. E; k5 D- K4 F: g0 I+ ^1 q) D
//i=0;
- f: R% {, i; e" j/ Y5 N
//j=0;
- w: ^8 A% x. X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: C: w( d. N2 S; i! K7 y; f. v
{
* t6 x& ~& l ?; L5 D- }
/* 测试UPP传输的同时操作普通DDR数据
6 b/ M+ P- B" x/ ~
temp
=i;
( J( \+ p$ i) N# P5 {( \
i++;
) u' N2 m5 E; P+ }+ J% i
if(i==1024)
! o0 c3 Y) B( F6 j
{
5 O, \0 B" Q8 L" h3 G/ p% v! I
i=0;
1 t* o( s2 b2 ^ C# Q9 O) [
j++;
2 ^$ A& ?9 z$ Q9 \* K# N1 R( }
}
& c2 B+ X3 y5 U2 a6 T9 f7 R
*/
8 ^4 }1 f! n/ t1 c+ R9 `2 m
, D' Q+ o" F( F( Q" X" g/ |# i7 D) w
asm(" nop");
_* E) [( x$ d4 T4 w2 B8 }6 k) @
$ l3 E6 k' ~. ^& ?8 J+ Y4 |6 y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; i9 K6 y' o# O/ s
}
+ ~0 b; f, A9 H+ n5 b8 Q4 G
9 N$ j8 j0 ?0 P3 I6 I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 q5 y# E- _" _% G; J
//UARTprintf( "i=%d\n",i);
2 f) O" \2 Z' s' W/ E5 d& D
//UARTprintf( "j=%d\n",j);
0 I, h; H* n; e' A% I# k
UARTPuts("Data mismatch in buffers.\n",-2);
7 T/ s# T2 z: z/ h# P) ?. @# z( v
if (upp_interrupt_count == 2 && upp_error_count == 0)
) l% p8 k/ O3 g' o
{
) U4 J$ q: Z! `% x5 y
for (i = 0; i<upp_frame_size; i++)
/ ~1 n) d# e- t( ~) p
{
# u% p9 K6 ^' z# r
if (upp_buffer_a
!= upp_buffer_b
)
% w3 P$ O9 s6 N9 a* Q- l Y) O
{
3 V3 ^, j$ H+ Z9 H3 m
upp_error_count++;
; j* G" {: v+ a+ ]+ i
}
7 B+ \3 l4 l* ?( h% j3 Z
}
; w! Z* O8 t' I* v/ T, z( K* y
}
& X0 l( K/ I7 ]" S: j( ?! `
$ I# l4 n0 t: [6 \; U, N
/* 报告通信结果*/
: g5 c: J3 m4 M3 X, ?
if(upp_error_count != 0)
9 ?% j9 a U$ l; F C- j7 Q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# w1 O% U+ p# N. v
else
% N2 Q/ R& K$ t
UARTPuts("uPP transfers complete!\n",-2);
7 ^ @$ T+ m- v# h) X! R( |! L
$ \5 q' t* f1 c
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. R+ U! ]7 k# B8 F
UARTGets(ch,2);
3 ~2 ~+ z+ h) w- d* [+ q
UARTPuts("\n", -2);
" `4 W6 r4 d% o9 t, I; G5 ^$ j" K
0 K' A4 c6 e. _ ~; u7 |
if(ch[0] == 'y')
: o! ^. ], c+ C" w/ {% t
{
0 I. R* P# c% a
/*打印全部读到的数据*/
. |) m( U6 ^3 B% Z" c7 e- C1 j
for(i=0; i<upp_frame_size; )
) y1 F2 Z0 k5 I, n' e# `9 B
{
( S2 \; D$ E" v' }) Q
for(j=0; j<5; j++)
' T: O" l' W- q1 h% ] r( [9 K1 {
{
* ?. b h4 i2 O8 H# e4 [: K/ d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( _ a& i% C4 A6 o6 L
i++;
$ `7 I# v" o8 y$ Q' P t: u. b0 W5 f
//if(i >= 4096)
2 t9 U! y# r) B( H2 N7 V N7 L) ]
// break;
1 i9 G* O ?: [3 f2 U
: F. Q- c, ]+ D! h( S; V
}
1 H/ P5 q! c% }2 `- b- e( v
UARTPuts("\n",-2);
+ A% H. o$ D1 @9 K0 F; A
}
* O3 Y% n# M% k: ]4 c2 u1 F$ C
}
8 @! _/ V6 u. T, P @1 E$ c
6 }& T3 y6 N- q7 n( G( m. t
}
! s0 `6 l# N) [1 i- a7 n/ u
& j& W2 T) a5 T3 Z5 N
0 D! o k3 I+ y5 w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; e; J/ k8 J+ z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 t( N7 d2 C1 U# i& n
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4