嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 ]( u! K: m7 k# }2 F; C" c
Void UPP_TASK(Void)
" O( s5 i) z ?/ P
{
2 i( A1 v& w2 X
1 ?1 @3 |# {; {, l. {: q0 i- d$ ]
int i,j,k,target_int_count=2;
) H, ?$ b+ [/ L" t
char ch[2];
' S0 X/ W7 ]1 S3 v- k8 D
4 Z9 i# V- Z" l! t1 \2 {" N5 q
8 y$ @/ {" i/ H P
3 n' W& Z) |+ n2 K
upp_interrupt_count = 0;
/ v0 ?8 h( B6 z# r( Z2 u
upp_error_count = 0;
6 Z; l% C9 [$ y1 p3 y
( c% i7 a$ P" V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ Y3 I% `: }" v! X) Z! u) x8 l
// Initialize data buffers
4 ?8 u, V$ h% E7 ?8 Q' g
for (i = 0; i < upp_frame_size; i++)
+ E4 E# s3 d4 z; a! u
{
# _) `3 C. d; m: p* w2 l! j
upp_buffer_b
=i;
: k( o8 k5 U7 m% w8 q3 C5 i& K
upp_buffer_a
= 0xDEAD;
0 ]. [# z, z5 Q# W: ~) {
}
" }9 h+ A$ B$ r9 a7 h
( S/ `- ?2 w7 \: D. w" a
//for(i=0;i<1024;i++)
/ U( j# X, l) f5 K
// temp
=0;
) v1 U3 w- Z7 d" E" z/ X' C* R$ L
3 v- Z1 d3 p, `8 x6 z& I' k$ }
//UPPReset();
" {% ~6 d; `0 ]8 i( s& H
/*启动UPP DMA传输*/
' R1 F1 X4 ?& k! a/ R8 X
UARTPuts("upp_prog_dma_i\n",-2);
( U, W" P8 [+ [ Y- I0 w
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 j# I. W) D1 V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: S G0 P) R0 M2 D5 g" I7 X
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ \3 E+ q4 ~; U; W+ i) a
' x! F8 r' u- y
UARTPuts("upp_prog_dma_i\n",-2);
" D1 X6 S- ~) F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 |) {1 v' O9 B1 C& M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* ], ~4 K7 q' T N/ l) ?! G
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# A8 H" G& r' H! a; S" I
0 f: v4 J x3 ~4 ?8 ]
/*等待UPP传输完毕*/
6 ^6 k: X4 w" l. q! o
//i=0;
; a- h+ S, k7 w4 ~
//j=0;
* H9 u. }( Q- S& P6 n5 h: c; y i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* v* U+ m! ]* d8 Q; S8 A' e
{
1 {# R2 V1 \. X4 p2 ~; I9 _* l6 l/ ~
/* 测试UPP传输的同时操作普通DDR数据
* y8 Z/ k. K. n
temp
=i;
5 c' b7 s# t* I0 G! l
i++;
; n8 r3 r- H% e5 r& t
if(i==1024)
- `( N" `, D- q1 P5 T5 P
{
5 |) k) B% p0 t1 s8 b
i=0;
- w" ~8 j/ y) [; x2 N/ s# ]
j++;
5 P3 A6 y3 v( |+ N
}
. O: l! r m4 G7 { A9 V- M
*/
) Y% P) J1 p# j% ^( t6 I
. m. t* \9 p7 F% [* t/ q
asm(" nop");
2 B& X$ K F& v2 K
4 N6 s2 J( B) k, z! T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 S" J1 ?0 Q+ c
}
) q+ Y6 i8 I+ ]: s1 m
. S( V; Q7 F) R
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; l7 C5 G3 A" F' r9 m
//UARTprintf( "i=%d\n",i);
1 c3 ^8 J& R; V
//UARTprintf( "j=%d\n",j);
' s) }3 m5 J) p7 G6 P5 I
UARTPuts("Data mismatch in buffers.\n",-2);
4 D5 W- Y; } D% w& i0 b1 d
if (upp_interrupt_count == 2 && upp_error_count == 0)
: o4 ]5 L8 ~1 R( R2 i! @ u
{
1 n+ S) C2 d( R7 }
for (i = 0; i<upp_frame_size; i++)
5 X( q. S0 O8 Q& A
{
9 [! V. N3 j( N3 t4 `( f
if (upp_buffer_a
!= upp_buffer_b
)
+ g6 R0 F' P8 w: T6 y
{
, S" C/ n- @/ Z! F; k
upp_error_count++;
) d- P3 u4 r: p! D8 Q, @
}
1 A9 _4 _2 q3 [2 t
}
+ t0 r. Z8 D) [7 o* z
}
4 w5 ]3 G9 e/ \
; x; y4 H9 M& r3 a& |
/* 报告通信结果*/
6 M: n8 E m6 s d) \: r; v
if(upp_error_count != 0)
$ V3 P" S: W8 y: N$ }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 A+ G# T# B' m0 h/ l
else
1 `3 h3 i# Z; A& o& X
UARTPuts("uPP transfers complete!\n",-2);
2 I$ Z+ M2 I: c) Q+ _9 _( j
" r5 N1 ~! f4 J) a( t: p. O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* `! J7 T7 J. m9 U
UARTGets(ch,2);
2 i) ?/ z/ {4 g Z! j/ O; |
UARTPuts("\n", -2);
& Q- F" i! u: I/ I4 r& {
& E9 E3 U" u% H' w; s0 @( Z
if(ch[0] == 'y')
: u$ b+ I* T- @: O: w+ a" [
{
& [% ?& \4 k. _, M$ z
/*打印全部读到的数据*/
, H, ~) W t' T8 l
for(i=0; i<upp_frame_size; )
+ N3 U5 H% \+ ]. t1 Y# p# d
{
, X! r9 G/ m( i# _$ ]1 u8 M7 \
for(j=0; j<5; j++)
9 B6 Y* K, P1 T1 ~! L
{
' L- a! [- a! ^6 o; r% q3 M* J
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, P! c9 B3 A) r# ~
i++;
. N0 R. y7 ^0 K, ]: p
//if(i >= 4096)
/ D7 y+ L7 t2 F) d/ |1 x
// break;
4 b% c0 [, `) @/ z
2 T o& O$ ~7 f3 c' s' m9 H
}
% e; x, E9 T6 Y( i8 J5 I
UARTPuts("\n",-2);
. H5 V$ @/ W* O9 k" p/ b8 Q, K
}
5 `9 H- d2 ]+ { m2 y
}
9 M; o! n: m4 E' O! N4 W
! z: ?* k) T8 b. ?
}
5 U& J" M3 v" o' s
. c5 Z& n# J. B6 Y
. d5 Z. f2 ?; D y6 ?1 B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 _; P' j* h; {! Z8 ~ ?$ J
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 K; P/ A0 U' ]! f o @
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4