嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 x/ ~6 q7 y4 P1 R
Void UPP_TASK(Void)
: d3 E# Z! x; v( [) G, y
{
$ B% z5 ^- ~" p2 {7 a
7 c9 L y( w; O' i, {( {3 s! w
int i,j,k,target_int_count=2;
4 \! k/ E. d3 ]( h
char ch[2];
4 N# V; o% B1 f4 O4 B; {
, z$ ]& J u' ~+ v5 E
7 J2 `( G' j6 S) D' E N8 @
# }3 }1 I$ m5 k. j
upp_interrupt_count = 0;
9 @2 N# C. e3 T+ @( h
upp_error_count = 0;
$ W2 F+ f; h2 ?4 {
! u% O$ H) x8 D* C$ v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 K$ |; g2 r+ k5 o
// Initialize data buffers
7 x6 k6 Q& L h2 L: a
for (i = 0; i < upp_frame_size; i++)
" B% R3 S/ i$ c" ?0 L- m2 A+ P9 R$ ~
{
8 l: j4 w& {- i" m2 r0 g4 e
upp_buffer_b
=i;
9 c; K! d. j% T8 ?" Y( B
upp_buffer_a
= 0xDEAD;
% l% S+ C5 s+ \) Q' i' ~
}
y$ L. E" K6 p4 D( D
. ~! |' J7 v& u2 ?: j1 P# w. ?
//for(i=0;i<1024;i++)
( e5 b# r9 ]( y2 ^: a1 D3 v
// temp
=0;
0 r. e: G' j) z6 x
3 S+ v# o) t' g
//UPPReset();
$ w$ _" @1 Z( P. u0 s, M
/*启动UPP DMA传输*/
! y2 [2 N& l5 U& V: S% }( w* r
UARTPuts("upp_prog_dma_i\n",-2);
7 F5 \! C# v; _1 P2 ?) M& l4 \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 K& ?" {% _( f/ f5 P: t f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
x% q% o5 T& S& ], E8 E2 z; Q H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 C+ v3 D. O5 N4 P! B0 B* S
- u4 {( y, ~2 ]7 j# L
UARTPuts("upp_prog_dma_i\n",-2);
+ a4 z9 S& j" t( v( R" ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 f" X; ]) t7 E/ Y6 |! t F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) y* J- H" p) A7 ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: M( h0 w# i' Q; w3 t) o/ O
: U9 g# V' C1 d& B
/*等待UPP传输完毕*/
) @2 v8 x9 u4 n/ }
//i=0;
/ \) g& U5 W8 i; m/ R2 S
//j=0;
3 b5 `- [, i# |; n' q) m: q! l6 i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' I9 f! e- L2 G( n+ r, I
{
G- _2 k" u4 h* Y* B
/* 测试UPP传输的同时操作普通DDR数据
( Q% L9 J, ?8 ?. O$ R
temp
=i;
' V4 M7 u6 i) y* j' q
i++;
8 p( {* P! X: C& g7 h5 a' U
if(i==1024)
) s9 G' R2 _4 s( m/ ^" p
{
& f3 m3 f" ~1 J9 B9 _3 N6 j
i=0;
p# E5 v; ~6 c2 T2 @+ P
j++;
+ J C: p7 M: c8 H4 x
}
: x& A3 m% _" Q- R/ D( |- `
*/
9 z i3 h m( b' [' K F. G Y" R
4 w& S+ `/ Q4 P( J, q
asm(" nop");
( f. z- n3 _! G; l1 ]5 O" V
3 }6 m2 G! C. m9 T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) [" [# c) r3 G5 v% U
}
4 A, D1 v: _) ]
. m' W* R/ B+ ?- g3 O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
u$ V+ X P# i2 Q( @& j% s# F
//UARTprintf( "i=%d\n",i);
0 ^" o) V6 p. p1 v3 Y, x
//UARTprintf( "j=%d\n",j);
6 p! J; w$ U# ~( u; }/ N, v
UARTPuts("Data mismatch in buffers.\n",-2);
) `' Z2 O8 @. Q& R( I* k- Q5 T2 N3 n
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 n6 K! V: X# g7 A1 I8 J, g6 _
{
2 Q5 [" g1 ?$ `0 a2 ^1 A0 }. K5 W
for (i = 0; i<upp_frame_size; i++)
) G: f* w8 M1 k6 g$ I8 w6 V
{
7 c9 L3 V* o# z. [7 T
if (upp_buffer_a
!= upp_buffer_b
)
) x3 | l/ h( {+ n
{
+ {* M$ w% D9 q3 u' e* w
upp_error_count++;
U9 [' N( Y2 `- R7 m
}
3 p0 @$ C( T9 P) |, u: M
}
4 W( l1 O6 ^5 h4 m
}
7 i& P8 b- K+ L, u# N7 z9 t
1 Q2 w4 N/ j. K4 F* K
/* 报告通信结果*/
" S5 {$ ^/ `8 |/ I; E
if(upp_error_count != 0)
$ E! X3 \2 G8 l- f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 a4 E0 M# @) n& H4 K9 `% a% ]; ?
else
6 `# j) `2 z& B- N- q! y. f
UARTPuts("uPP transfers complete!\n",-2);
1 a- N, o* i) H
' M2 R( E0 \* K _% C7 g5 s
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. c6 v: q" l% M1 L
UARTGets(ch,2);
2 V5 i4 I0 L; N
UARTPuts("\n", -2);
. Z0 _# O; V- n& x
) C7 B8 Z. X/ {' k
if(ch[0] == 'y')
: G9 @1 J& _ K( U; P
{
* Z0 x1 Y+ r2 k' h$ x3 j5 k
/*打印全部读到的数据*/
2 G9 s* w. t5 ~ x) t; Q% Q
for(i=0; i<upp_frame_size; )
7 u/ W1 A. ]( O
{
1 N: E* b) N# ~2 {
for(j=0; j<5; j++)
; P/ |% t2 n/ A, J( \0 i8 `
{
/ a9 V$ Q& a/ ~& ~0 L
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! E0 [3 N# z! y8 R
i++;
; P9 P7 @5 C: J% A% g1 W
//if(i >= 4096)
" F: L' T4 j" G
// break;
( c3 a% u5 ?+ V1 w
( M. }4 L7 W+ Z" k: t, H
}
7 g0 o0 K' X, Y- \8 I; ]
UARTPuts("\n",-2);
7 m* z' J- c6 Z5 K4 r
}
5 P! S- `1 b1 H" l( L# v2 X
}
% O+ x( c. z2 u8 O' |$ a
! R& O" E7 P( m8 o# v+ K, b: A
}
6 n: M% L( I) _. [* n
+ y7 E" u3 a) E
4 [) b8 W* O3 u
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& e3 Q6 Z K" l0 b- U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# @. w* i* s' J8 j; K& k
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4