嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 ~1 W6 P1 a3 O1 T
Void UPP_TASK(Void)
J* |5 W! ?% e' ]& w
{
1 [. M5 ?; z7 u; @
+ N! g* g" {( E& P
int i,j,k,target_int_count=2;
' P# Y0 _' K8 x% ~$ a
char ch[2];
, s% k4 X4 A2 b: Y( @$ a2 w& ^
4 j1 q, ?" \( Z7 \
$ o! K7 z% ?+ t2 \9 ~% s3 V
6 u! L. I9 D/ b1 I5 k/ }( R
upp_interrupt_count = 0;
. M( K% i- C, Q) Z4 _. g) @
upp_error_count = 0;
# ]# Q; g3 Z2 u5 Y8 _
% o+ B9 w; Q2 A9 x- C
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& M0 z( Q3 l& Z0 H" {
// Initialize data buffers
* e. P2 q6 g0 X' D! o
for (i = 0; i < upp_frame_size; i++)
; P/ `/ b' B# g/ l! J8 J' w
{
/ o e! P+ z; N" J
upp_buffer_b
=i;
1 Z- }' s/ L% q+ P" G0 {3 [
upp_buffer_a
= 0xDEAD;
( g6 Y1 l7 a+ p
}
8 @9 H9 S s0 z; o3 j {) m! B
4 G) h" q+ Z, X2 N: I' }
//for(i=0;i<1024;i++)
, f3 ]9 L) i4 d) \9 u7 i# Z8 \
// temp
=0;
- H0 C+ b# ~, u5 m3 p+ o; J
+ o1 [, K. l$ U) ]) U
//UPPReset();
. l- {# [7 e7 N3 ]
/*启动UPP DMA传输*/
, I& g: u- b. ^6 o! u1 _
UARTPuts("upp_prog_dma_i\n",-2);
) X7 r; g; d: F% |2 K9 m/ ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( J+ ]* b: T* y: I B! V& n7 ]
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- y+ O' w0 c% `! I! Z+ W
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* u* ]( r" U) n# Y
% [3 A, x, b) R! |
UARTPuts("upp_prog_dma_i\n",-2);
2 p; g+ e$ S7 d/ x' S1 s+ @9 b
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 P3 j( u4 |% i6 [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. U9 h9 S1 X+ ]& c- [) Q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Q2 b3 b) j! I. y
W: }9 f2 m5 d6 ^2 p7 d" g
/*等待UPP传输完毕*/
1 ]9 \8 }; ]7 \) ~5 n' p! p
//i=0;
4 a# U' }8 w0 W4 d4 A d- Y
//j=0;
5 e1 P) n8 Y& g( l
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 ~& P* D `2 e8 i2 u# X) {
{
- _* `0 P( n* D' |3 X; `; t
/* 测试UPP传输的同时操作普通DDR数据
+ {" \ h2 q. c: F
temp
=i;
2 m; c% o5 {% j7 [# [
i++;
4 C( l/ T9 J" {6 }3 W
if(i==1024)
& y' Z9 W& Z' r2 A( n
{
- _' d* F) w: z
i=0;
, n& ?$ l+ w E4 q" j9 }
j++;
! H4 O* [- ]* l4 n) R4 P
}
8 ^& x! B4 m- |; H
*/
9 q. o1 L$ s! T) b7 o% a8 X
' S; }8 B0 _+ o7 U# H& e9 o
asm(" nop");
2 G4 n p# E3 O( C! G9 G! A4 R S; ?
# g+ f& T4 t4 d, A6 D
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 \9 I# s, x& J
}
( m! [) ?6 L( S( U
) J* M d9 k* I+ _2 Q6 R
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' u& v( A# t* S, ~% X) a
//UARTprintf( "i=%d\n",i);
) B7 J2 k, n8 I' W% ^% t% O) G
//UARTprintf( "j=%d\n",j);
: j6 @9 I& s8 C+ W8 \3 @! `/ C$ t
UARTPuts("Data mismatch in buffers.\n",-2);
2 X4 ?8 h3 o) k
if (upp_interrupt_count == 2 && upp_error_count == 0)
* Q- l2 Y8 g6 u. ^% B @
{
, R8 t& y5 _! d
for (i = 0; i<upp_frame_size; i++)
8 T! B* S8 X3 C; y) x/ t0 r
{
$ b: K5 |/ ~6 x8 d0 u
if (upp_buffer_a
!= upp_buffer_b
)
* X. M3 U2 Q% z( r* O
{
# ~$ s/ D7 b' N
upp_error_count++;
! b' c" g4 g2 \8 S$ I7 B
}
, F( y. K+ z8 h
}
$ i$ v5 V0 n D0 J& O
}
. p& a/ z( F4 h( y4 c* `( h
" [6 ^9 e" E. Y+ |3 F
/* 报告通信结果*/
$ e, f$ `* @) ~) \+ b, o
if(upp_error_count != 0)
4 |. l3 J/ V# m8 ^8 M% e/ t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 D# \6 }! B/ H( f7 _# S, n& Q
else
' {# I' @+ H1 H+ J/ g. t
UARTPuts("uPP transfers complete!\n",-2);
; ]% ^1 G( K& Z% U, t) M
! s& c+ z5 l K. Z% C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 E" T; h4 Q. }+ Q& }: C2 C
UARTGets(ch,2);
; s2 P) ^8 Y+ x
UARTPuts("\n", -2);
" S' A# w' v% ?- j+ F
) x- B! Y/ a4 Z/ j n& y9 L; D
if(ch[0] == 'y')
% K: I) g7 ?! I5 l* c- u& p# _" ^
{
4 z. b; n( @- e$ R. ?. N
/*打印全部读到的数据*/
9 `0 s& d! D5 M) j
for(i=0; i<upp_frame_size; )
! k2 W( C, _# o
{
9 q% k7 |+ W% Q
for(j=0; j<5; j++)
U5 A [: T: ]* i: P/ S) s
{
) N7 t" x4 i( T% ^, n2 g- X* q: S) E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 a2 |* f" ?; h4 s- L4 {
i++;
# S6 _6 \! E5 c: P! S1 H
//if(i >= 4096)
5 t; `* H" h/ h: B) Y- M
// break;
# U" ]- F; k3 X9 Y5 \! U) l2 K
/ \* G% \3 w/ A. Z
}
: w, o! b2 s) k) g& q; D5 G
UARTPuts("\n",-2);
5 W+ J1 T& s' a5 R& p0 I: U
}
; T5 \) ~6 `2 c: \, B0 n
}
3 |1 x/ X+ A3 `6 D2 G6 o
/ _! Z! `& |3 u) e) R0 W
}
6 N, |! e( Z% X; {+ y1 }3 F2 j% D
0 v+ r, Z- G0 t; q
* L) b8 O) }- z* I& D7 G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, x5 r4 ]; D3 }3 ~/ Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 L4 E$ R+ r2 M5 {$ K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4