嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' x( L2 ]4 z% m7 c; ?
Void UPP_TASK(Void)
) G# }# Y' p% N- U2 s
{
* }5 p& \( }) Q9 a5 n
^; c# I8 S& k+ U
int i,j,k,target_int_count=2;
, R$ A5 v+ \2 j/ X
char ch[2];
, r _6 f. i5 c/ M: M
! V9 u7 }) o4 R. w0 m
* u# }/ K2 p: A& ]: ]3 @
8 ~5 V1 Z. r7 ^9 `9 J4 [8 T
upp_interrupt_count = 0;
/ ~ b) S6 S9 C# Y) i
upp_error_count = 0;
' B) @( R/ ~- }) q, z! K
3 c/ h" j$ @( r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# ?- a3 H4 R% R! q3 u5 Z9 q Y
// Initialize data buffers
$ w" X. g( l6 @3 \6 d, X
for (i = 0; i < upp_frame_size; i++)
% a1 O! O5 @. Q
{
2 Y6 A( P8 F8 T
upp_buffer_b
=i;
! B( \) I, x1 A* N# \
upp_buffer_a
= 0xDEAD;
i* I; S6 u1 ~8 [% B
}
0 F5 O$ L% N8 ?0 A) j
0 M! D' w3 w# d- T2 I/ G
//for(i=0;i<1024;i++)
$ W. |" x3 g3 D: e% q: P6 z
// temp
=0;
, E4 _. Z u0 G/ r+ _
8 V% v3 [0 E! D
//UPPReset();
9 i* I' M! q8 g- R
/*启动UPP DMA传输*/
$ ?: ?% q4 F9 z' j, L6 G; k/ E
UARTPuts("upp_prog_dma_i\n",-2);
9 k% @2 ~; e7 ]
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; t' [( q7 U3 s; C3 X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ i' p3 q k5 M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 `1 O' J. }( `: M& _% ]# x
% V& t6 A) B! ?+ m/ E- x* H
UARTPuts("upp_prog_dma_i\n",-2);
* n. b+ E& v6 X/ [0 W) r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 b5 ?/ W( S9 t9 i+ H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 c& F/ e, @" B: c8 s) E9 k9 H: _
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 ^# j# |5 i# ?$ g+ p. o! g
+ X. |7 B" B U5 \. t% h' l, Q+ ?
/*等待UPP传输完毕*/
# e) g9 C1 _% H$ l
//i=0;
9 x4 U8 }' E1 {5 z& N% }
//j=0;
1 t6 }3 n. R" a" ` x+ Y4 M: x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ s1 `2 b% I% {6 s1 B+ l
{
4 ^* q9 B( R4 q9 g# f
/* 测试UPP传输的同时操作普通DDR数据
7 j8 l* w& P8 I; q+ I1 x' R
temp
=i;
( a1 u) F9 }5 ?. G( O9 H3 j) V" g7 G' q
i++;
& Q! n) L7 m `! ?
if(i==1024)
; I- i! @1 \! W- E; q
{
" U0 H. y0 t3 C4 s
i=0;
: R$ Y* x _# O& ], Z: v3 C
j++;
! \0 m: K" v6 L" L- r2 Z i
}
7 Z* G( ~9 G% o( Y7 h. U. T
*/
+ ~7 @2 K5 N! Q: {' R
" s! B4 ~$ g6 F! F6 `0 ~2 ^
asm(" nop");
- u. @) ~- a' O& e4 d, {
# j8 R, J5 g* ]( @7 u0 s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ C! o; C1 X, k2 n' @ P& T
}
8 v/ I4 m& \6 E" E/ O
% d1 D j0 ~. k" @' t" V1 W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ \' N' o6 v( Y1 |. M5 {7 C
//UARTprintf( "i=%d\n",i);
a* W$ u0 k. h' o9 y
//UARTprintf( "j=%d\n",j);
+ {& G: ^. |! s g
UARTPuts("Data mismatch in buffers.\n",-2);
9 z% x- u, z. B. J3 M/ o
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 D7 c; p8 U% Q; ^3 O
{
E7 M/ N! J: e3 [; i& P
for (i = 0; i<upp_frame_size; i++)
5 a8 N, X6 }, E3 R _
{
" E5 y& f5 H! ~
if (upp_buffer_a
!= upp_buffer_b
)
`( P; Y, A8 R( _, |
{
+ Y, }% f9 K1 Y& e0 l
upp_error_count++;
+ b7 ^+ s7 {! A5 S, J3 D& s) A3 T
}
; l6 H, R9 j1 E; ?. d" e
}
5 E& s0 x% ], K- o) V) s
}
( B" m) \7 ?- g" C
+ ~8 S/ e4 d1 [6 h# h
/* 报告通信结果*/
: o+ `% ^/ t; D# @+ k! `6 E4 P% H
if(upp_error_count != 0)
3 z/ J) v) l9 [; F+ u. f9 K* @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! [8 H& n) ?+ F: l
else
( `) f2 m3 B" c
UARTPuts("uPP transfers complete!\n",-2);
+ o+ j# O( c2 u! V" n: m3 f
/ u) Y/ K7 J3 I6 D" U: v! r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ l, K7 Y3 Q% w
UARTGets(ch,2);
: [6 D- K0 ]: l
UARTPuts("\n", -2);
& A3 X/ q n0 t8 X/ I* P" D
' i& D' y R3 e9 h9 H- O8 Z4 A
if(ch[0] == 'y')
; _ a: R1 U* w
{
5 G! k" z+ E! s% M) p4 Z2 P" n
/*打印全部读到的数据*/
& V# G& `; t7 j8 T) U# i" n* w( v
for(i=0; i<upp_frame_size; )
5 P; R- l2 }2 r
{
$ @8 ~" u/ u( u9 W) F$ Y" K3 @. H
for(j=0; j<5; j++)
% E3 s+ N! d0 `
{
$ x$ N) A2 h5 e6 E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
]5 C* M& A& D& f, S% n' B" y0 p+ A
i++;
! R; }7 h: M3 q f! \0 W) o$ v
//if(i >= 4096)
h/ y- Z5 r3 E; r( O
// break;
* f1 r. X3 z. }
" x+ u8 M0 C% I/ k* D
}
. ?3 D3 _" S/ Q! Q( p+ N
UARTPuts("\n",-2);
$ h4 W: ~" j' U& S! y) o
}
$ _ L' _) c2 j9 d9 I, ^3 r
}
" }& g# @, \2 B% A0 O A
1 e1 L1 T+ r- x2 h
}
; ^2 U' r1 A$ h1 \ s+ O ?
! g- _3 z: e# G! E
2 f) {- f( v/ ?7 w H: D Z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 x# N1 w4 q, u/ g8 H% E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- p4 w% W! ]4 I: T. U/ Q2 R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4