嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ l# p0 l P! J. x. l4 C# q
Void UPP_TASK(Void)
: l- y, `! M& U6 C7 P% {
{
$ G# A$ `4 G" M4 Z y
! P& U# j# N* K/ L% @& V
int i,j,k,target_int_count=2;
/ n, D5 s9 k1 r# t" N/ b6 @2 n
char ch[2];
/ V* m/ Y: J. \6 Y! [2 g, T9 `3 j
& n& Y- i8 J6 n, V7 \# l
) b0 [, O# w1 k' O. b
( z2 ~6 r' C5 I6 ~( A1 E# r
upp_interrupt_count = 0;
$ }# B+ \0 ^! z4 [; W5 ]2 @% c
upp_error_count = 0;
# i6 F* U0 {9 a
" e9 D$ P$ x0 ]+ s5 x( R
UARTPuts("\tResetting uPP buffers...\r\n",-2);
^5 V3 x; c! {7 `" h$ s
// Initialize data buffers
5 f- f! Y+ _( \2 j
for (i = 0; i < upp_frame_size; i++)
# I/ a/ M; [3 b
{
$ A1 N- a1 y* H$ s8 ~0 V
upp_buffer_b
=i;
1 W2 J1 ^; | I6 |( n! E- a
upp_buffer_a
= 0xDEAD;
+ I% Q3 U. J# w+ X- ], E* b
}
4 r F6 T6 s) Y4 Z" D/ t/ ~, q& G
# o1 e3 A. D3 q
//for(i=0;i<1024;i++)
! [( {# n1 X% \/ H; D: Y
// temp
=0;
0 u: {" F- @. ]
# @/ i( [' x7 l9 O4 g2 _" r
//UPPReset();
/ |6 d: |& W. V
/*启动UPP DMA传输*/
1 h+ O. w" i' I, [ }7 P6 J
UARTPuts("upp_prog_dma_i\n",-2);
4 h) x8 a" Y4 j3 @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ m2 G8 p* ~" T: ]3 l: i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 Z* Y- u6 z( H: g
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; h& l) N& e0 S' y9 M
) M# P6 R" I: ~ W5 h0 A
UARTPuts("upp_prog_dma_i\n",-2);
* O3 ^8 _' F1 }& F: `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% e2 }4 B: x! p+ K/ k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( t6 Q. j9 }1 b& v5 H; f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 E. X- P5 w9 m: w" j% @, Q
+ ^' o0 h. x& A# U& w; S
/*等待UPP传输完毕*/
& o( S7 {+ n% r( Q
//i=0;
/ k! @$ M N8 t+ f, s3 |& r
//j=0;
% _- |+ t8 C! o' L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 ^/ _' U$ P* h* ^; g( `
{
- n# }# i0 W) E* O" k
/* 测试UPP传输的同时操作普通DDR数据
0 O" r! x/ L v3 {1 `/ R
temp
=i;
+ G' ]5 G3 P# b1 r( q
i++;
8 S# w) q- S1 j
if(i==1024)
X a' U% @/ M1 x
{
/ y$ G4 R! o) I1 x
i=0;
% j4 V3 L6 |9 C9 Z, c$ @/ H
j++;
' t2 ^: H; m) }0 h' ]
}
/ T; k5 A& m" Q# Q$ ~2 t" S
*/
4 D$ c' N" x. i1 U
: ]/ R6 N8 `% x, |9 N5 y! v
asm(" nop");
3 G8 f2 U9 a% j( [ s
, W7 _7 ]7 z: `
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 [5 C5 m) C9 s
}
9 z! Y" r& n6 a8 O& j( i3 Z
8 i* ~! X! k8 q% ~2 \6 Z& z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 A+ i# {$ j( a! }
//UARTprintf( "i=%d\n",i);
, H8 y7 K+ T! c. z
//UARTprintf( "j=%d\n",j);
! V4 ^' ?6 ]- D" B; l# Q$ P9 Q" r
UARTPuts("Data mismatch in buffers.\n",-2);
1 d* F5 k$ E, G* e9 Y, F4 K
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 s/ k4 K l7 p6 F/ o# }
{
! O1 S7 ]0 F/ w- s
for (i = 0; i<upp_frame_size; i++)
& f2 T1 Y+ F& D0 Z0 x( E4 ]
{
0 G2 z+ N" e# @2 `4 r
if (upp_buffer_a
!= upp_buffer_b
)
% Q7 l9 y0 g3 k% v0 r4 s1 Z
{
2 x- g6 ~, B# s% i" ^- n8 h/ q" w7 b
upp_error_count++;
/ Q" ]) u& V; L+ D# g5 K8 y Q4 e( ?
}
+ g6 F7 @: W9 Y4 v2 ?
}
0 r" I# I, r9 u
}
* e9 s7 {3 [5 z& g% z( K- T. T
9 V7 t/ r- d1 S9 o2 v
/* 报告通信结果*/
6 w3 d( D9 s& d: G' n. H
if(upp_error_count != 0)
5 N: Y" f5 L1 N+ |
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( ] V2 F( v! e% Z! E
else
2 ], i0 S, A0 `& `9 x! j1 o
UARTPuts("uPP transfers complete!\n",-2);
5 t- N. h, U% P7 `+ K( f) f
: W2 b$ ]* G/ v! |! @4 k' }3 \6 d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 @) I. q% R# a2 {' G* b+ N- Z
UARTGets(ch,2);
( B. H6 W) b( X( t
UARTPuts("\n", -2);
3 S7 p4 N5 w$ q7 K6 L$ ^
1 I4 ^9 b; C5 n/ O5 N0 Q* P
if(ch[0] == 'y')
7 R( v" D; ?* h' B* R" x3 I
{
# V; {$ F+ C) D8 ?1 C9 x
/*打印全部读到的数据*/
" ^1 |& s* J8 s: [
for(i=0; i<upp_frame_size; )
* D( R) O" x' ?/ _# j0 `
{
`, U, x) a( b: N& w/ V& Q
for(j=0; j<5; j++)
: C2 a, R( M3 L! `! }. y
{
9 C$ R9 D2 y. o, Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 w- f' R2 ~/ s$ [! S) L# I
i++;
, \* L/ T+ a8 Y
//if(i >= 4096)
( T8 A# [ p: G, i) w! `
// break;
# d+ L+ ^. m( _9 k2 N
1 N1 T0 ~1 y- S( s2 r" x
}
E5 H |( ^7 Y1 l$ P( T
UARTPuts("\n",-2);
. m9 |/ I0 V5 {" \
}
& p ^( L. o! o, o
}
6 P9 N: j) k+ l$ d
# w% Q/ r2 @+ m, |) D$ x
}
; k* \' O; g* E& Y& E& ~* [( K
0 Y ~; V% H$ ?5 \+ \' {( b
; H4 S$ D. W6 `, e, p4 I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 u; ?5 e0 q; U/ h7 ~' o) F
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. t; D" y# J2 t9 A4 c; \
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4