嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, _4 b/ h3 G' d- k2 U ?
Void UPP_TASK(Void)
, K- ?( E3 f$ z) N3 x+ a3 W% e
{
& I. w$ {3 l% H8 Y: [* U- S& d
8 d) x" Q) o) ?/ R6 d
int i,j,k,target_int_count=2;
; I3 r. I2 R3 k/ Y
char ch[2];
% E& x, h' k2 M8 e
% E; R/ d5 ?% ?9 k$ D0 r& d: Q
% Z. B! X5 v+ x: m: v z6 R8 `3 p
7 b9 B E% i( | {) v D. R
upp_interrupt_count = 0;
# u* J M( z5 N$ |
upp_error_count = 0;
7 l( b% ]! s$ K8 Q; w
% M1 X+ d: r/ }3 G9 |# b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ W1 k* ]. T" a' i2 o1 g# w( H! Z
// Initialize data buffers
( ^" X8 G$ m& T9 m/ D W9 B) K
for (i = 0; i < upp_frame_size; i++)
. k; {# k& _9 `% r# S
{
$ C6 W5 m$ P% X1 q/ t- b
upp_buffer_b
=i;
% n; }( H4 V( o6 s+ H: j
upp_buffer_a
= 0xDEAD;
6 F/ q& {+ E6 ^
}
+ K" X% T, ~+ r9 F6 H9 R6 y/ e: z
9 a. u5 m6 `. O, m
//for(i=0;i<1024;i++)
4 d9 g" ~& J# \& P2 r, y
// temp
=0;
5 H% f% O \, z, N& O; Y
; W7 k7 }' a) `8 t" o
//UPPReset();
8 s# U- L8 b$ L
/*启动UPP DMA传输*/
! l' V3 [! \; |3 S. W# {0 E% n
UARTPuts("upp_prog_dma_i\n",-2);
# D5 X+ q/ w2 d0 t v, N" B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ s9 ^( _2 I$ j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' ^: ^3 \# I% j; Q/ d$ D4 E {2 t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
E; q; |! }( _1 e( k5 {
6 S( f4 D; R7 g C9 g0 R
UARTPuts("upp_prog_dma_i\n",-2);
" S- d. g5 t. t# H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, h2 d, n( |1 c4 v8 R! R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 p) P: ~. a* O6 ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* f) {4 n4 K7 _, g* c" T' c1 x5 ]
, i' I W+ g9 j' f+ {
/*等待UPP传输完毕*/
" V4 M, H0 F" U& N6 K R6 t4 `
//i=0;
1 E* L+ ~( n4 s) M% m
//j=0;
0 L! \ K6 S) t; ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( s3 S$ g4 z e2 X* J5 E% c
{
9 w8 w& N8 Y6 h$ i6 W' r% K
/* 测试UPP传输的同时操作普通DDR数据
) c; K$ b1 |- Q
temp
=i;
0 e% `3 i4 A r8 ~! {( X% t! b6 ~
i++;
4 r# J/ l! @0 n$ }
if(i==1024)
$ T' u+ @. }) F
{
2 I6 \5 o. i& f5 U% x, V q( b
i=0;
1 W/ T2 n s$ w9 E& C0 Z( V1 r$ K
j++;
7 O: a8 V1 J! f8 A4 v/ } T
}
* C# V- [9 y7 v4 S s3 }
*/
. r$ N% X+ _0 j3 Q
+ ]5 ?5 \, u8 q! |, g/ s/ \% C
asm(" nop");
% o) O9 w# F! D+ x, n
7 O) G5 l0 B2 @
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' t5 W2 R" i4 n9 `- h
}
; I K, @1 n4 u8 t- q1 X* \
, z- d. j$ a9 E. G# Y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 D) \) C6 [# ^0 ?2 Z; [
//UARTprintf( "i=%d\n",i);
5 B/ I5 L! ^% S; m m/ S
//UARTprintf( "j=%d\n",j);
1 \- l8 i' S: o; s9 O2 D* ^% j. k4 \
UARTPuts("Data mismatch in buffers.\n",-2);
8 H) V- B/ w: c$ V4 I( H" v
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 ]* i' k/ P. n/ ]* D* F N
{
+ b1 y' l* ]' s' X( Q; q B. t
for (i = 0; i<upp_frame_size; i++)
- y+ E8 j+ @: Z/ N+ r
{
! E) `' u0 q3 }9 t* Z; s5 e
if (upp_buffer_a
!= upp_buffer_b
)
8 y( Y5 V$ c$ ]9 p) v
{
; n2 ?' j8 M+ l% ]
upp_error_count++;
) i z9 D' P- i) S( v
}
& q+ y: K1 s1 T
}
( Z& P6 N. i9 {! O
}
" o& m, n; z6 h# J7 k1 v
( s+ r; u5 y1 {0 D: \4 r5 ? P6 v
/* 报告通信结果*/
1 q9 t( g$ C) w$ r" t- J
if(upp_error_count != 0)
& E# I4 V2 [! W h" ?1 _, m* u4 i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
f" Y3 B/ F' \) B" U
else
9 y2 h) U9 u- r, b+ {6 g2 q) |
UARTPuts("uPP transfers complete!\n",-2);
: r; r4 e9 I) F" E% q- D0 D% e
' Q( m) O: T. F, Q) z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 c( i8 H; Z1 e! R
UARTGets(ch,2);
" e$ k. }& |% ~) o% C
UARTPuts("\n", -2);
: Q0 ^( C# W0 ^5 I1 f2 C
% z% B9 c/ Z6 P& V
if(ch[0] == 'y')
% T. Q8 j6 p. e0 {' k
{
2 c3 r f6 ^ P% M5 ~. ?
/*打印全部读到的数据*/
4 K i6 \; U' G) G% {9 ^; ~9 W. v8 Z
for(i=0; i<upp_frame_size; )
2 \0 r6 | H ^) G
{
+ o* Q. I4 o7 U" R+ o& q5 r
for(j=0; j<5; j++)
' f0 p1 M. z' W$ b
{
. q0 h9 P( F7 w! k, D! C: H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- y, m4 H% z/ T7 M6 p( w A" |
i++;
: d* M2 c8 p+ e3 J7 K& d7 ]
//if(i >= 4096)
) M% A; B4 ?8 h7 ^9 L% z
// break;
: E( a3 ~/ h5 J; x! U! G
/ y# w4 Y2 w- }
}
5 `2 v5 R3 \2 \6 n; y4 n
UARTPuts("\n",-2);
0 j* [. ?/ j$ g, g# v" i
}
% w" U; r' i6 Y
}
( Q$ b6 b4 D2 S( e1 v
8 H8 }% T( w: Z
}
1 G% F7 o! A% N$ d7 G, r8 `; ^
9 h4 `9 n- D$ m" c3 [* _% O% s
( w/ Y: B' x) {% p: Q2 _+ b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# ^- S4 o' c7 _4 c! N6 a: r
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% x, L2 ~* V* V5 M8 W* _* w4 i# p, _
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4