嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! m" \. S i- J: ^2 Z/ Y9 e
Void UPP_TASK(Void)
: F+ L7 C0 I5 f. \& a' `0 d) d% j
{
$ m. y) ]( g8 C& i' D# {: C
c/ f* c2 E2 J$ p
int i,j,k,target_int_count=2;
" m! M9 _+ |5 U& Z( b
char ch[2];
|' e) `; [ m: H+ I g. A
0 l! T( ?$ t6 w& F$ B
4 P6 J' x8 w9 c S1 }& ]* K) ]
7 P) A1 O" a' f
upp_interrupt_count = 0;
8 l* b3 f5 t! J6 Z
upp_error_count = 0;
5 d) i) S! x# m9 L+ J- Y _3 ]& [
4 ^( ~& i0 L$ A* o
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 k3 R/ a. b I4 u( b* k
// Initialize data buffers
$ H/ f. l) _& s( q' A9 Z' f n
for (i = 0; i < upp_frame_size; i++)
9 v: _! i2 F3 a7 k, ?
{
( W3 N7 F2 p0 E( u5 E0 |
upp_buffer_b
=i;
0 A( Z4 d. q" L9 Y# n9 Z3 c
upp_buffer_a
= 0xDEAD;
1 w3 M) K* x6 L u
}
* o6 x( w9 `& b3 I8 s) {% V( f1 z
4 G6 r( m8 }9 d# I8 o
//for(i=0;i<1024;i++)
R" y) U6 n0 l8 l2 H6 l
// temp
=0;
2 M, l- b- z6 M
- u" |# F/ ~6 s3 J( X) s: q% N
//UPPReset();
4 Z3 ]/ e5 t. C' @- {% W) q
/*启动UPP DMA传输*/
: P G, q$ d# \! r6 B" u; n% t
UARTPuts("upp_prog_dma_i\n",-2);
1 t9 O4 d6 |+ u+ ], x! _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ V4 t$ A) h" Z) @$ R( R+ q1 O. o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' o! U6 F- |3 T' I- e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% I: ^ f' t* y1 B+ I
) D( |/ R' y- D3 Q8 y+ u' l
UARTPuts("upp_prog_dma_i\n",-2);
2 F% N( K' u1 z( Q4 u0 a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" m. r+ q$ v7 h! W( X( e M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 i6 S( K0 |$ _' x9 f5 r; x
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* R1 Y* r6 n( m% B% L# t8 h. A7 \
/ Q4 `& g* |( c9 ~4 ~9 e
/*等待UPP传输完毕*/
" l3 c7 J+ v9 d% y
//i=0;
1 |& R, ~: _; W* w( c
//j=0;
! w/ U. R( }0 J4 k' G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 h* o; Z! q: }- r" m
{
% p: g/ ?6 }9 r3 J5 m. n
/* 测试UPP传输的同时操作普通DDR数据
8 v( O, x( h# C/ c
temp
=i;
2 B! W3 J, H4 q/ m
i++;
, m, J7 v. N; F# I* i7 A3 u# O
if(i==1024)
V# h3 O$ V- N2 }
{
# L$ s3 c/ i- y+ \
i=0;
9 @' r/ N+ s( u3 `- ]2 V- D
j++;
& f$ ?/ J) N0 J; N. L
}
7 C3 J+ {. A2 U* y* w. C' z
*/
; i: {. k3 Z" N7 S% F) E8 F$ a
0 D# K) y F5 m% C" O; I
asm(" nop");
0 I1 `5 p5 }$ F4 Q' G% @) J
9 e5 w; H& \# X+ p" [& E5 e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" d' B; V/ y k `6 y, P
}
: w7 L* x" X" U( {! X
' i/ w o: r4 z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 Y W! V, q7 W2 G# f3 L9 _
//UARTprintf( "i=%d\n",i);
" ?6 y% v3 |% K& @* U; |, d8 Z
//UARTprintf( "j=%d\n",j);
) m8 T3 E' Q @, {2 h) J6 |
UARTPuts("Data mismatch in buffers.\n",-2);
, q0 d5 T8 d4 [9 h
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 \ I: E, }' Y3 k |! N$ j
{
+ u3 Q1 m( x( i+ O: W5 w4 r
for (i = 0; i<upp_frame_size; i++)
' |% @& S, o" i) y
{
: ^% E+ t, c& q1 L$ m' S1 u$ h
if (upp_buffer_a
!= upp_buffer_b
)
$ C0 ?: h1 W8 H! @$ M
{
6 b) C0 A& _- p, s* e
upp_error_count++;
- n) E7 d3 F" \* e0 F! W" P" D5 U4 M
}
_; `7 s$ m! _: V$ f
}
1 s# l Y1 i$ Z0 R x
}
$ F. o" Z$ @& h. O
/ ]) z# _5 Q! E V" m _; d) E" F1 D, y
/* 报告通信结果*/
9 T4 u# A- Z4 J9 T
if(upp_error_count != 0)
% d8 @; F# Z' l5 d
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% D& f% r$ h+ P0 l
else
! t* X4 j- k* a2 q7 }4 R: ^/ R
UARTPuts("uPP transfers complete!\n",-2);
- G, O; [- S: r" q% r
% V" @3 B9 ~/ T" g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ k1 [( s- ~+ B5 A+ w
UARTGets(ch,2);
1 l6 i! r- W+ f1 Y% l( E
UARTPuts("\n", -2);
% T% ]# Q, A5 c1 j% S
; j( Q* y: \0 w/ H7 g9 D
if(ch[0] == 'y')
) b- r/ N1 b3 U. O$ r( y3 T4 k
{
5 F/ t# y3 M& k
/*打印全部读到的数据*/
* Q0 I- x. N% j* d2 D% g8 m
for(i=0; i<upp_frame_size; )
9 \$ K& O F5 \
{
2 a0 s+ K" e4 A2 K
for(j=0; j<5; j++)
R u* f8 m' t G- m
{
* y5 x& W2 Y; p! o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) X/ n* j8 B3 X, W$ }
i++;
4 v3 T# f' b0 D* _1 a
//if(i >= 4096)
4 {5 X3 @% ]3 O4 f( [
// break;
6 l: ]' x: d6 {$ E( U8 V
) l- \* {: X8 g' y7 v8 D' X4 Q
}
% Y3 N6 ?$ O, z& g
UARTPuts("\n",-2);
/ z5 X0 L3 U0 P* L% X; Y, B9 Z
}
6 Z. }! F. w2 z- S
}
# R! q( i1 q* e& ~, I
0 a; l' |+ n/ I; }- j3 H7 Y
}
3 O% I' }& {) [( M' a% c) `
6 X, Q* v& l' v4 A8 r; }
9 P9 ^3 M/ ^" y/ y0 N E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 ^4 J9 ?5 W( e- `# i* ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* |- e5 ?' ^9 q- C) ] S; U' D! Y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4