嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 H C5 ~& O2 X% \
Void UPP_TASK(Void)
?& X6 M2 ^/ D& N ~
{
_+ q* m% H( ]" Y& k! x
. b! V5 X- |* z. d
int i,j,k,target_int_count=2;
A& l. |7 U- ^- `5 v7 _) p8 N
char ch[2];
$ f# w$ X( D. K: O, i. M
4 P& Q/ Y0 N% Y9 A7 s9 \ L2 t
5 s7 v: b: l( L" F0 _
/ G; F0 s. a8 i: ^4 ?
upp_interrupt_count = 0;
2 M4 z( S2 D5 d% m4 V2 ]) Z
upp_error_count = 0;
' t$ u: O) K/ y& C/ |% |- r3 K
( W$ N z& Z3 b4 v7 J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% r( X0 A& V7 s3 ^% ^2 p
// Initialize data buffers
3 x# H- p5 R4 ]" {& V p. `
for (i = 0; i < upp_frame_size; i++)
, c6 O, D7 ]1 n, S5 L. k* k) E( Z
{
# M' H" x" N( j# y+ D9 w& x- U
upp_buffer_b
=i;
/ F6 K8 M0 h! G3 R
upp_buffer_a
= 0xDEAD;
8 x$ n0 f @# X' P/ U
}
% L5 F$ G! \: L. Q* G
+ q2 P9 J8 f6 P& D
//for(i=0;i<1024;i++)
$ D, J# J4 L2 H3 i7 G
// temp
=0;
( d# l+ L6 J, o, i
: q$ E" s' K `( d4 i0 M1 F! W( X
//UPPReset();
8 S5 _2 A6 @$ \: p
/*启动UPP DMA传输*/
1 y# m q I* O# b+ K- b0 x! } v
UARTPuts("upp_prog_dma_i\n",-2);
o2 u' @% U/ d$ @" q& o( `$ Z+ o9 e
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; w# {$ A$ G; \% z2 k! H% W( _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: y: ]# f+ |, R I$ f( B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 \2 F* `% x$ m& G; Y- O
: h) C! y# Z& l( `6 W" C
UARTPuts("upp_prog_dma_i\n",-2);
X% V$ \5 y) q9 |, |; O2 s5 @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# n8 s% Q3 o+ H; i7 H Q$ t, b
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 s% F8 j( Q$ e' j: ~$ C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; p; ]6 j3 w0 q( i( J/ G
8 [; z5 N% ~$ O9 ~+ _- M+ O* L
/*等待UPP传输完毕*/
1 M% i! H. K* w$ x
//i=0;
9 V# d/ c3 F' d6 w, J2 @% D; _
//j=0;
3 ` M$ ~8 W; L: K. c, f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( ?+ s# D. K1 b \% S
{
+ p% |. i9 o! F4 R
/* 测试UPP传输的同时操作普通DDR数据
1 O- T. m2 I4 _! M; @2 Z: e- I
temp
=i;
! P3 [+ u* r0 ]) H5 `3 X3 K! ^
i++;
/ s# M+ \4 m) q" }4 F$ }1 x: n
if(i==1024)
9 Z; O: I1 `! V
{
8 x5 ?5 |) j: r; ^0 B0 ?
i=0;
, ]% ?0 k1 J2 C2 z5 {) g
j++;
1 ]( B; |! R* J* J* A* A7 i E
}
8 X$ R: y' Q1 B, W3 {: f& c% D
*/
( u( A# N4 u) l2 g
) l( A9 i# t/ w6 \
asm(" nop");
! n/ Y! o( ^* `& d7 Q1 p! q
, V# j/ `- J G. l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 H' D5 T* M8 [
}
9 s* K, |9 @3 q/ U5 r F
+ y) V8 A" ^4 k+ c* @5 W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% M8 U1 [2 F2 k: Q
//UARTprintf( "i=%d\n",i);
. E1 \6 l( x; D! W1 o- c( ?
//UARTprintf( "j=%d\n",j);
/ p9 Z% ]2 k4 u. L, l6 w: ~
UARTPuts("Data mismatch in buffers.\n",-2);
/ ?- b4 `% }" E+ D" V" w. s
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 K0 C& K6 z. A5 t
{
+ Q9 f3 C8 e5 g- J
for (i = 0; i<upp_frame_size; i++)
) \$ B% _; A- I3 K: d
{
/ t" Y: F9 Q9 A: i9 t/ u
if (upp_buffer_a
!= upp_buffer_b
)
3 B3 Z5 W$ x8 Q
{
/ }; D8 ]# B. b1 c# F9 ]* q
upp_error_count++;
$ ^ G5 r# W$ S# n- a+ E, G4 n
}
7 t1 |+ z+ O! B( m
}
- m4 z& {! h2 R$ T. X. B
}
- G; K: l3 H, k3 J' S" l& b
0 }. u" b9 o% r$ i, n5 k
/* 报告通信结果*/
# {! S3 w9 |0 D
if(upp_error_count != 0)
. U, G" M$ J5 ?3 J
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 V# C5 m7 H* ^
else
3 \, \# M! g& g, ]0 B
UARTPuts("uPP transfers complete!\n",-2);
1 e+ f6 A6 \; M2 ?( G+ g% |' m
0 r3 W! j! x6 ?6 |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. }" x* K f2 X C1 H' U
UARTGets(ch,2);
0 `& I$ T, V+ f( y. v
UARTPuts("\n", -2);
8 x! y. _% G; e5 m9 A1 g3 d9 f
! V5 _) v+ j+ Y% U+ @
if(ch[0] == 'y')
/ X5 @1 S4 D( t/ f+ {6 _ K
{
$ p' n3 ]+ w; s o, ?
/*打印全部读到的数据*/
/ P8 X ]" |3 M# B7 [9 g. q) ?
for(i=0; i<upp_frame_size; )
/ I# c. H$ i: s6 k6 f
{
2 _* o& @* ~& c" N: ?8 \# f
for(j=0; j<5; j++)
: R r. o7 v \4 C/ Q. }% V: v
{
2 |2 ~# N& K7 K& u# A3 a |: {4 k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 \. ]5 O3 n! ^4 m9 g- }
i++;
: l1 c% e6 ^# i9 B' r- j
//if(i >= 4096)
n- m8 s" v/ ~ ?9 f& K+ F
// break;
! R6 C8 K/ y0 U7 v" I, O; m
9 F( ^! \6 T: s) z$ L/ s
}
2 B1 \) d9 ]2 q; c3 t2 {
UARTPuts("\n",-2);
/ C9 Y4 y- L8 v
}
3 B% D/ c, g9 b# r+ s
}
2 Q% u k% Q0 r3 @& ]/ t
: C* \" R# Q; z, k: [% t
}
- O: Q' w8 Q" l+ U9 M, W
! T0 J; ~4 m$ X9 \. T3 h
( L6 m5 H6 K, S% S% ]5 n4 S' t% h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* @/ x. C% w" S+ }" r
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. _. f, ]# v- J5 n
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4