嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% }) f7 I" i: s" e6 i
Void UPP_TASK(Void)
& A7 y# l9 P0 `4 Q+ N% M
{
, W' S7 V! I! r5 d
, p& `+ l; L& o& ^* ?& n2 j
int i,j,k,target_int_count=2;
1 a% L( K& [/ y2 }( m3 Q) q
char ch[2];
+ S. u: {4 P% `; @4 b
* `) x% L# I3 H' |+ \
$ b; L8 Y7 F7 Q" P( P* Y& Q, W
1 q& a+ k* Z- f' B+ Y( Y$ m# W C
upp_interrupt_count = 0;
! Q7 |# J( y) q5 V( Y
upp_error_count = 0;
! c% ?- \) A' O0 B( e. s" I
0 ?( j6 X* a( B/ q5 J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: j, F% T! `/ O. J6 g5 X8 C
// Initialize data buffers
- U( n4 O' m* e' [: ]; x
for (i = 0; i < upp_frame_size; i++)
9 N, h) o! i! }5 M+ t7 c4 v
{
* B1 X; t! D% ]( j
upp_buffer_b
=i;
* G/ ?5 B0 R* Q" J; v8 z
upp_buffer_a
= 0xDEAD;
: P7 R$ V: d; A% X9 {$ o4 }
}
9 q b+ W9 I. G, G. n4 A
$ P: a8 [; d8 M% D+ u5 }7 e
//for(i=0;i<1024;i++)
% |, U6 W- M9 v, _
// temp
=0;
$ M9 l! x+ l% r# j1 s, m
* k( Y1 m3 |5 H. C0 w& n }
//UPPReset();
, D8 q/ w) t# g8 G4 S" A& l3 I
/*启动UPP DMA传输*/
3 \2 b0 H4 I4 o% t
UARTPuts("upp_prog_dma_i\n",-2);
* |- L! c6 ~0 N- |' o) [. z6 p! w
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( v j3 h& \* }0 d9 D& i2 F: a2 K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
q0 x1 o& e0 B1 {1 M0 }4 N) ^6 T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. W8 x8 X/ ]0 R
5 n" [# Y7 V; @7 _, [+ {5 v* N
UARTPuts("upp_prog_dma_i\n",-2);
! y/ L0 o2 l4 c x! y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 M: M8 o1 L, t6 ~- Y1 Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 I6 o% [9 j8 ~3 U' L
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) @9 ^. P: y1 O) Z- r% P
5 z& n1 }8 F, P- V2 _, G6 o
/*等待UPP传输完毕*/
0 m% u! W6 K$ Y
//i=0;
. S w, Z0 F0 H3 y j8 l" U
//j=0;
2 n" D* L% Z$ Y& _* u& L6 B3 d x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# R/ O& a$ Q5 y- |
{
/ F' D( {) ^+ K
/* 测试UPP传输的同时操作普通DDR数据
" Y5 i# g2 X4 A% `* f
temp
=i;
; Q) r8 ^) g: L. X* M% {3 R
i++;
5 a* `- J3 T/ n+ J. g. L4 F
if(i==1024)
j& s& s4 R/ P7 [3 {2 L6 t* O
{
: z5 V$ ` B, l" }- @. G0 @: t
i=0;
, U% t, d, C0 f$ l/ T2 q" [/ l m
j++;
( d2 k: w, [* b j1 S5 a& K% v* ]8 l# t
}
3 [+ u6 j4 J2 E* O
*/
# u( o% H/ \& Y& o/ i- n
* d$ c6 x/ \9 Y2 o
asm(" nop");
9 B7 n$ L7 v- a9 q% s
$ s6 l$ m- o4 e; A: Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& S0 D. s1 E3 l9 f, s
}
% x; w! H4 ]4 Y2 y; A: i* l
& C7 h( b% `' A, N* a9 j
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! m. {' @/ ^8 u8 I, t
//UARTprintf( "i=%d\n",i);
5 c, `2 y' P1 `
//UARTprintf( "j=%d\n",j);
/ x, R( e$ D0 F- J7 h& ?
UARTPuts("Data mismatch in buffers.\n",-2);
9 ~# _1 d* D) X7 r! D
if (upp_interrupt_count == 2 && upp_error_count == 0)
' E" ]6 }9 R1 M" b8 n
{
/ L" V8 \. e' N. t+ M& {
for (i = 0; i<upp_frame_size; i++)
) j( i& H; j' G5 Y
{
$ D( g- o, R3 L$ F3 \7 _/ z. f
if (upp_buffer_a
!= upp_buffer_b
)
; s+ ?+ o& }6 G' k1 s9 a
{
0 u$ S! ?% m" @* B
upp_error_count++;
& O7 j2 x* N, @% Z% r
}
% |4 S' ^ ]8 d, e7 [" E% q) ~
}
- A) M* y" c: @, t
}
' N) X9 g y3 D, F# W
+ X- x i4 ^: }) f) k
/* 报告通信结果*/
* W4 k( l+ ] w1 O; [3 M4 K( q- S
if(upp_error_count != 0)
& r# @3 ^/ G& |" z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) y, l% c' p* y# _# ^" q7 h, s
else
" G6 v, g# C- _( v& N
UARTPuts("uPP transfers complete!\n",-2);
; m# n) K, H( K
5 B) J/ N7 M4 I7 u# E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' D% _$ w6 y, z% Y$ {7 x
UARTGets(ch,2);
4 e, N. S: S- L" {8 O# \' {
UARTPuts("\n", -2);
2 V5 {+ d9 `0 w: c* W4 A; X& K. ?
) S$ S" w/ l1 O# h
if(ch[0] == 'y')
! L! Y* e+ m, v% ?5 g
{
# k1 ` r; U/ C/ I. l" Q u
/*打印全部读到的数据*/
# D& r& i8 j' n, ~2 h9 @
for(i=0; i<upp_frame_size; )
8 g! h% w3 e" r$ }" s
{
& [7 ?% M" z6 k# J0 F" O' N" B7 N
for(j=0; j<5; j++)
# M* Z+ l( I4 r4 Q; u. v
{
" Y. a% |2 [6 }& S0 H p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 s: E# E8 P5 n- Y' M6 @' W7 A- ]
i++;
$ X8 B. k' c& d& {3 D+ x
//if(i >= 4096)
) R! r- g- T \2 H. ^
// break;
4 K- b, P4 j/ w o3 ]9 V0 |: U4 u
U3 ~0 L% ?: W9 D2 Y
}
0 Z1 S9 H* ?0 i4 X
UARTPuts("\n",-2);
, T* A8 X2 {" M& A4 k. N0 t9 N
}
0 b( F3 Y, l- [; w
}
" z; P9 e1 C9 B/ G. v3 u& B* e$ M4 ]0 B+ V
& u& T9 U/ r1 B* p( X: {
}
1 D/ Z7 U# z M- F: J! J' K
5 ~2 L& J6 s: w0 \( a
4 x: T; S( s9 Z1 z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, V/ X) Q8 j- ?$ c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 b0 u! d' X7 c$ H( i
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4