嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 ^0 E# o. a p# L' w+ _
Void UPP_TASK(Void)
: }. ?: ?' `+ M
{
/ R6 _0 ^ k8 A& F) `
/ I) H2 n- N) }$ X4 w9 ?
int i,j,k,target_int_count=2;
; C7 u& f( G' U o
char ch[2];
+ ]# ^: B/ e6 @3 w8 j7 g
" V; s) `+ }1 V1 E
) B n7 u/ w( f- C" x2 `" Y }
4 l5 p9 x0 Z* G7 B) H: c3 x
upp_interrupt_count = 0;
+ A+ [4 _! u8 k" O
upp_error_count = 0;
0 \. D8 [' z- B
. Z7 Z8 Z b8 q$ a, u4 c
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( q' r4 Q6 f5 G4 R2 C# W& V
// Initialize data buffers
* x9 z( t0 B( V4 Q3 @$ u
for (i = 0; i < upp_frame_size; i++)
$ {( \$ ]- S- X" \( U" f
{
B6 B( Z9 c2 ]
upp_buffer_b
=i;
9 u7 B$ l; G) d( J' |
upp_buffer_a
= 0xDEAD;
2 h/ E2 X( t% }
}
$ t7 C. G* ^3 t2 O% } T
7 y. l. O3 z. X4 x+ x
//for(i=0;i<1024;i++)
5 G! P7 ]- \& J- X# |
// temp
=0;
4 H& [* w9 g5 ~& h( s" a h
4 Q% A0 a' `' J3 d7 o3 r# q
//UPPReset();
2 R+ F& [- C3 d% \: {% }
/*启动UPP DMA传输*/
3 L2 b2 O% V* U3 D# {+ h; p+ J
UARTPuts("upp_prog_dma_i\n",-2);
5 o$ Z/ C8 z4 X7 B( @! ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% ?; v% z7 y5 f9 f; T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: s9 [3 Q9 i U& C" a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ L& S) j: I3 A/ z0 ^ U
) I& k" L5 X3 u1 w
UARTPuts("upp_prog_dma_i\n",-2);
% Y6 C8 T! ?( K
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- v' x' x& M( A9 R& R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 G( p, k# y8 i) q3 f) M3 I
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, ~- K6 U/ {# L y; \2 x4 t
b/ f1 T" R, |3 Q( S( s
/*等待UPP传输完毕*/
$ k6 M1 P2 V8 E. |+ M- N+ f
//i=0;
/ T2 y: F5 K \ Z
//j=0;
7 ^& ?3 l, C1 [2 d& u3 K) L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- Y6 H7 H( v7 t) F5 d8 v& p
{
. m5 H! }+ u: {1 {( ~* x2 f" k$ a
/* 测试UPP传输的同时操作普通DDR数据
7 g( Z* s9 V+ s( l
temp
=i;
8 k1 X( u1 a& o! h/ F* V) H- I
i++;
% p! T( {! E: a7 q
if(i==1024)
/ R- x. p# F- T0 F
{
( x. n* q. V9 ^0 r& `2 Y6 L+ ?0 v
i=0;
8 g* l- L) N Y+ T
j++;
: l- X( l- R* F0 ]; H. m, |- d6 K
}
/ ^" u. q% {$ F3 K1 X a0 q
*/
" F0 V- D S6 r; G+ B8 l7 p
) M5 K& C( T/ Q: F: Y
asm(" nop");
, L# s0 ^0 D- p1 `- |+ ^# k
* C2 z' Q8 N7 c* J
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% z2 q/ N2 L* p0 ^) ?/ X1 q
}
) U- f! N/ F5 ?% Y: o" F' J, V
) \! P2 b: x" c9 v/ {+ ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" U, f8 }$ \' M/ a. z: j! K4 [
//UARTprintf( "i=%d\n",i);
0 `8 e9 i+ \: ]" S7 l; Y; v+ ?& P
//UARTprintf( "j=%d\n",j);
* E) U Y; n6 \* W
UARTPuts("Data mismatch in buffers.\n",-2);
: k; X0 |# p( P$ N& t
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 ? U ^) m6 L; @0 J
{
3 S' y# x: r& v% h& D& J
for (i = 0; i<upp_frame_size; i++)
' ]" c9 R* H# U+ ~" \
{
' o5 ^1 F. U, }& }- J S
if (upp_buffer_a
!= upp_buffer_b
)
t6 M- y5 w' V( R: A E' r& K
{
& A7 r! l6 n+ ~: i; D5 X6 O
upp_error_count++;
; X& v! u! h+ X+ w6 w" C8 R+ E% F* O
}
5 t* w6 }/ G0 A+ @2 D6 \# t
}
( Z/ P( F- O1 a* e" ]- E6 Y4 j
}
* N: v6 D1 G+ m; X% B
. t* @+ n F. M4 ~) ^
/* 报告通信结果*/
, }9 p" w! F) F# K( z9 k' G
if(upp_error_count != 0)
. {& @2 }0 U2 j- M! o
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- d' |" A/ U7 [4 u
else
0 p0 u" V$ R4 o1 S
UARTPuts("uPP transfers complete!\n",-2);
- L! b$ h$ j; k) t. Z
: T. l5 U0 `2 n& k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: S' `3 H1 r1 Q m( p
UARTGets(ch,2);
) z, e- o4 h6 a% E
UARTPuts("\n", -2);
' g) f4 u& }5 L+ N
j8 ^3 T" ~8 _4 K& @8 G# G
if(ch[0] == 'y')
9 @( a1 b) A2 r: K# F
{
: c- |' I: ]- v
/*打印全部读到的数据*/
) k9 ]1 \+ j6 g( b# O
for(i=0; i<upp_frame_size; )
% X. b6 Y4 x" D) A4 d+ [
{
_' E7 U4 ^8 A8 D( ]# i
for(j=0; j<5; j++)
6 j% l* R3 X1 r
{
( f; u* l- h/ {8 P& R4 P& g# d7 U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; \: p. m! w8 c% g1 h
i++;
5 n* }; T7 G% d, }! \
//if(i >= 4096)
, e9 f2 Y9 ~8 U" W9 W3 A1 I
// break;
! |' Z3 X |* i5 x4 w6 ?8 W+ [
2 W& F$ K- f. M& I4 i" o! ^
}
( ~& S7 w+ X3 {
UARTPuts("\n",-2);
9 [. i0 y7 x1 \- C" s+ M1 ~
}
3 Y% E) c( C& D1 z
}
- F& U3 o& k! t# J, r2 ]3 ^
% [- h# M1 w9 P( j5 [
}
$ F8 ~3 C0 t+ K) D- m% l0 f0 X( D( s
( H9 l0 u' T- N- l
, r8 E* b. f- N
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' ^& z0 @9 K) C# j! A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! A' _5 c( n7 Z6 L% `
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4