嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' P, u2 n3 Q! }& k1 Z
Void UPP_TASK(Void)
$ s& D! m' u1 T1 f2 G0 q4 U$ j
{
- @$ I& C, G) z' ]6 I
/ n/ R# b6 Y" ~8 z3 ]
int i,j,k,target_int_count=2;
! E1 t& J w" K H# @
char ch[2];
6 C, B% G# o. b3 q2 r- k
" |' q3 a6 A. K8 P( M
% q+ r, e( \ V R) C7 Q8 J
) T' m6 j' H# t E8 e! S
upp_interrupt_count = 0;
) B* ?5 G! f6 v) @, o! V8 p
upp_error_count = 0;
- I3 I8 [$ i4 S2 X+ e, c
. k( V) a2 {+ T9 E1 f
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- Y9 Z9 y: P# V
// Initialize data buffers
/ K. V+ m* A: r
for (i = 0; i < upp_frame_size; i++)
- c p% Z4 v8 J; O1 ^8 j% P
{
4 ^2 t6 a) s* V
upp_buffer_b
=i;
, x( {% n6 @6 o) k o2 E
upp_buffer_a
= 0xDEAD;
' F% k! h) s: y+ j) f
}
7 c. G# O" ?) [0 S; |5 l; x+ z
" N" y0 G- f7 r+ l
//for(i=0;i<1024;i++)
: g0 Y% U3 U/ g: a! o# V+ G5 F% V
// temp
=0;
! V r/ ~* x2 C {: P1 D
0 D* D$ a! S1 T. f4 B) ^
//UPPReset();
?+ G' ^1 q9 ~
/*启动UPP DMA传输*/
- w/ \: T/ y5 K4 l+ d
UARTPuts("upp_prog_dma_i\n",-2);
( s! T7 l! I. s) W* K; F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 g. K8 M7 g: \& S) e$ A
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( N- p- _( b$ T0 |' `! F/ X
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: \( K. W3 }0 g: {' C( Y
! E( k3 ^9 G2 n7 x
UARTPuts("upp_prog_dma_i\n",-2);
2 R- Y' N+ ~9 V7 B: d" P
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- [# G5 x; W3 `+ E7 K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ V7 s2 i g+ R. f5 R6 d. K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& l0 ^2 ~9 n5 F. ~ `4 ?& Y
0 t3 w, _# ?6 |7 D( p9 i; B5 U
/*等待UPP传输完毕*/
& F/ [; \" Y1 t8 u
//i=0;
* e) z C. E: g* v; _
//j=0;
) b1 K! B1 g' {, o: d1 O: H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: ?8 z2 \# t7 f* M
{
% o" M+ r$ Q- f! ~& x9 l l
/* 测试UPP传输的同时操作普通DDR数据
% [5 m( H& L" J6 U) L( @: C- m* g
temp
=i;
" ?" `* w9 @$ `# L: x
i++;
2 \; f7 K) F9 n
if(i==1024)
$ A/ R% v! `/ o# P0 K+ {
{
# G2 _# O, i8 A) A& H) D/ `5 |
i=0;
& B. P8 }3 B% b
j++;
, R7 V5 [! A4 c- X, n: W
}
. K" A# Z' e. ]9 S. p7 l
*/
4 i% ]" s, O+ K, Q
! ~+ ?: N0 G: t) b. C
asm(" nop");
( n& Q) k9 t1 i3 k/ K% E* X
( p* O! w, C, d. g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ q4 r6 Q' _" F5 ]2 J! u
}
; H. a( W4 c- F: U: s
5 _7 ], q0 B6 I6 c( P& E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 Z/ w6 Q, v. y" s. C3 f3 W e! x
//UARTprintf( "i=%d\n",i);
) ~ O; a. T3 N, z0 f* C
//UARTprintf( "j=%d\n",j);
4 `0 e8 f5 a) Y7 z& k6 Z" ^" n
UARTPuts("Data mismatch in buffers.\n",-2);
0 q O8 D' H7 w$ n; N! ^, t
if (upp_interrupt_count == 2 && upp_error_count == 0)
A( ^; J$ U6 ^, S) v$ ?0 J! ~# D
{
% V' x6 m! }( A T/ B* W) s
for (i = 0; i<upp_frame_size; i++)
( V& d& x3 u2 T0 \& H
{
; L7 E5 s$ E, [( N2 {& }3 S
if (upp_buffer_a
!= upp_buffer_b
)
9 E1 K/ J3 l+ B1 p& o& Q
{
+ [. M1 Y; F' E7 K: N! u5 R5 g
upp_error_count++;
$ D; D2 Q4 [ Q# `/ o) v& j- a
}
E! ^, o' Z, \: M5 Y5 U
}
( g+ m8 N- G5 _3 |6 b2 M- o
}
8 W* s8 V- E0 G G' N! U1 ?3 G v- C
# c& Q' f3 [2 ]' f/ D/ _8 P
/* 报告通信结果*/
# l4 M% J" M1 M7 \
if(upp_error_count != 0)
! @( ^/ P4 l1 h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
a$ Z, R4 h! Y$ D3 C) A2 a7 j
else
8 d/ r. R7 R( M; a+ n; c
UARTPuts("uPP transfers complete!\n",-2);
6 W7 H) t6 \2 Z4 N
! Q% `: o& Z5 A4 d( X
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 i! k* y2 |# ?: X/ M1 s( \
UARTGets(ch,2);
/ f$ ~9 b* q) E$ n
UARTPuts("\n", -2);
9 i4 {. s) [0 ? f: y" X; R
8 D x$ g9 E! E& b& \
if(ch[0] == 'y')
: |" N; g d+ G( {' W
{
" a# {$ y) _, t6 g. _
/*打印全部读到的数据*/
2 \8 N3 y# W; Z* f3 e7 b! B- W
for(i=0; i<upp_frame_size; )
* c$ ]- @5 g1 J1 C
{
7 V) L& N+ w* ^0 J$ d: d V* g1 _
for(j=0; j<5; j++)
: P8 @3 n. l$ E W1 l2 e$ Q- o
{
2 F9 w! R$ F- ~% w$ i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ R! X) t0 Z) G
i++;
; U3 ~; o: O1 ~% h1 t. C0 T
//if(i >= 4096)
' q: i5 b% v) g/ {- z
// break;
3 T! s, q( E5 x
/ N' C3 [& D, `" p2 r% I
}
; F6 V7 t+ r$ ^. M
UARTPuts("\n",-2);
, B2 A/ V. V& |) _+ A( G
}
5 j8 ~% V8 @. w+ g% }
}
$ O+ Y$ x# b# f; Q
- T4 }( V0 q! b! y' P, ?
}
( q+ g6 b& \7 U x( }
9 r y) ~& h7 X7 A# P- V1 m; a
+ o4 }" t S$ W
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ d4 x5 I. t( y3 |+ a- |
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ M( L. S- a- G
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4