嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 ^3 K# K" I+ S9 S* V4 g8 M9 U
Void UPP_TASK(Void)
7 @4 T* {1 q8 _$ |2 D ]
{
" @, u8 M7 L& h |3 _# t0 j
4 F7 p& j# w; u9 J" x7 n
int i,j,k,target_int_count=2;
6 B% C. h( O2 v9 E8 O) h. }
char ch[2];
9 X+ I( K' }. F- N- y
, j; ^, I+ L- m* E
3 C9 W0 S4 `$ Q# x K! e
% k, h3 a* e5 n" O$ o# v2 \
upp_interrupt_count = 0;
: u3 ?- Y' m5 O
upp_error_count = 0;
% p3 A z$ {) |
- c5 {7 S' k( U/ o' M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& V* {4 _% ]0 ^3 y: \
// Initialize data buffers
2 z' F! n; R; Z! \6 }( A
for (i = 0; i < upp_frame_size; i++)
- q0 G; G6 l' b$ t
{
: g6 R- H' g7 F( _0 J/ Y$ f% C4 a
upp_buffer_b
=i;
) N2 W4 L4 T* h( h
upp_buffer_a
= 0xDEAD;
' U4 {9 A$ ~# \" A- U: X
}
4 Z2 N5 T [- ?' n6 @& R
- J$ H+ E& I6 w5 c+ {) L
//for(i=0;i<1024;i++)
3 A3 Z1 w, P( _# s
// temp
=0;
0 E" i6 ~, g& t! ?- k6 d# ]
, P8 n7 U% ?6 B7 u& h. f
//UPPReset();
: W+ }; Y- B( S1 P0 T8 A E4 l* B8 }
/*启动UPP DMA传输*/
# M4 W" B% R7 K6 [8 H
UARTPuts("upp_prog_dma_i\n",-2);
" y9 w! F" ^1 v' f% z; y, m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% N+ y3 ?) Y* y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ Z7 a6 b& q; d
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. L( w( L4 ?. u4 O
( h# Y# q7 M& P4 i
UARTPuts("upp_prog_dma_i\n",-2);
- y; U0 w- u' w$ {4 B* W7 B- c
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' m s+ s9 ^4 J/ R. B
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 y2 W, a' U- Q* {
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. P) S& U. ]2 @! W4 [
7 ]. _8 ^! o5 g! z9 B
/*等待UPP传输完毕*/
9 V, e4 G4 I: t( }) H1 z) z
//i=0;
* h2 x% `" Y# z3 _% [9 P- z
//j=0;
0 j- e" J- g; P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- Q( h+ `, p& S2 g/ K1 J" W
{
$ r% _& k% G) G& s; |
/* 测试UPP传输的同时操作普通DDR数据
: {3 N, f2 o1 [5 u8 r5 d& P* q2 j# ]
temp
=i;
: I/ N5 ~7 n- Q
i++;
6 j( m9 d W# N0 K. R# E, B ]
if(i==1024)
, n2 n6 Q# e1 a B( l: f
{
) h. E; O# {/ u5 K6 e- q, j
i=0;
' D" G& P# _2 L% I3 f) }, ]: n
j++;
6 w1 W8 J* I- x) j2 w
}
# }! _; f3 ^8 F* t
*/
2 K: ], }: D; M/ j% i
" t5 _* I: n8 m8 h1 Y
asm(" nop");
- @$ w$ }* `, Y/ X0 e/ A) y& c
: ^: O0 x" s B8 i
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 f: }5 L! a4 E4 e, ]4 f" L* D# s
}
8 P# ^' a; T# V7 D, p0 ?
) S7 y: @, {! G( C; N% {8 H% z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; H% \1 J% u2 b: i1 n
//UARTprintf( "i=%d\n",i);
6 K3 i. P9 p" ?( a8 i; o
//UARTprintf( "j=%d\n",j);
: g2 I8 m/ k, U# N/ b7 H
UARTPuts("Data mismatch in buffers.\n",-2);
- [( [& u( C! W+ s4 R8 L4 i
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ d* ]: u6 V8 v) J6 K
{
9 I. ~2 l* F9 o, Q8 W1 d/ x+ h. V
for (i = 0; i<upp_frame_size; i++)
$ M4 G# V {+ @% s! Y; }
{
3 D5 t, Y$ Q9 w( y: n6 P
if (upp_buffer_a
!= upp_buffer_b
)
! W% s& I2 n9 A/ X$ Z; t: z
{
# r- R9 `2 \. X" Z5 x; P
upp_error_count++;
5 T( A6 l; r h9 e* Z. j7 W
}
& v$ T! d& k- `' U, A
}
% |1 F0 W0 D0 t& f: G! m5 Z
}
, A7 A' j$ F8 x8 f4 T$ l- M# ]7 ?
" W3 M. U1 v, e- D7 R& z$ \, ?
/* 报告通信结果*/
: h5 d) g* s4 x( }3 `1 Z5 R9 ]
if(upp_error_count != 0)
4 i5 H/ ]6 F7 b/ C; w
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) [+ H+ G0 C& Q8 n8 o4 L
else
2 o* Y2 J. V- w" x9 L8 z6 E
UARTPuts("uPP transfers complete!\n",-2);
* W' y, u& w* j; ]! j4 {" q
8 @$ y' i6 {3 q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) b' \7 a2 w$ e- X
UARTGets(ch,2);
' ^+ R% x1 t2 U
UARTPuts("\n", -2);
+ N. G# k/ t% U% n$ O: h- q
% O3 N, Q# Y4 B* _: y8 L1 s- O
if(ch[0] == 'y')
$ w' ~5 L4 [& P) V3 S
{
9 Q/ q5 Y- O8 q3 ]2 Y; c
/*打印全部读到的数据*/
! x8 U9 X, d7 e" z9 b$ B/ s$ P0 A
for(i=0; i<upp_frame_size; )
! F( G5 C0 z/ a
{
7 H! U8 _1 Q6 J+ w8 C; }
for(j=0; j<5; j++)
# w6 a$ y% r0 l' F$ @6 U
{
1 D4 N* ^* h& c2 \
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ |4 t4 s/ o" o( q- z
i++;
$ A1 k. w/ u6 H6 r
//if(i >= 4096)
% E* l: s, D, u% f, |6 a
// break;
- B! y. L [; y( v. K0 q* M
* E- v9 a# A8 m# Y/ o1 j9 w* F
}
* Z f5 V" p+ h! m& F, o, {
UARTPuts("\n",-2);
: I# b( N! P7 T4 Z2 f* X- o
}
+ u$ g) U9 G& F+ F& |! t
}
2 m4 ?0 p8 Q- t' p
% {, V1 s2 p! e) {0 q
}
6 H4 Q5 u+ G' X e2 y1 ?% n( f
& w Y; f3 }: e) |% E- x& x
. R4 F+ P- C% {( D
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! b1 U5 {. B; o7 \0 U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ P8 a) \2 m4 o+ v4 L
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4