嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 V4 o4 ]- r: T4 z& A6 g
Void UPP_TASK(Void)
" g& h1 z7 r: J
{
* Z1 L6 @; H7 w5 K% i; h
! j/ I" T% E9 w( `# w- O7 s7 A! K! p
int i,j,k,target_int_count=2;
3 n9 q- ~% {& f) Q6 O2 w3 F
char ch[2];
, c+ ?+ ^$ W0 P t' B: P6 y7 R
# C, X! p9 C$ G; a# b
# O# E8 p1 r6 J1 W
3 c! X! p. G( ~1 u B
upp_interrupt_count = 0;
/ G4 W1 R, ?0 e( T6 l
upp_error_count = 0;
3 Z `, s* K% v# \; j% H4 C# X4 E
4 Z4 G g4 F+ a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& O1 t& O8 T! ?! z) k% ]+ O H
// Initialize data buffers
6 Z+ P+ A; Q( {! g7 k
for (i = 0; i < upp_frame_size; i++)
0 [: z- X& u* H" A
{
% | [' _9 t- K( T- o& V; M
upp_buffer_b
=i;
" O8 U! c$ {- ]7 f; L! m: d8 u
upp_buffer_a
= 0xDEAD;
# B; e8 [- L6 r/ {
}
. x% t5 R( R, x! I0 y0 E8 i1 e: O
( r5 p9 W7 K1 x2 {
//for(i=0;i<1024;i++)
& T2 a! G* l) r3 R8 o( C+ f3 o
// temp
=0;
5 s5 |; z, g, ~* ?
4 a4 D( M" K9 `2 o5 \1 l
//UPPReset();
/ `: L! l7 ]9 V) x( F6 o
/*启动UPP DMA传输*/
/ O% B; B2 i& }/ k/ N5 v) N
UARTPuts("upp_prog_dma_i\n",-2);
' T( i0 _* {3 Y+ c$ l
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' [" e2 I4 j2 @; L; R% v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% Z0 n( N1 r( q, g& v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! B$ Y6 f6 L V1 p
6 g6 r, C- @ Y4 V$ s, o
UARTPuts("upp_prog_dma_i\n",-2);
& |& B ^* }3 v: D- G# G9 U
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
u7 `0 l! @7 e. ]* k$ Z0 k; i5 R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 T1 V- Z! k; C e# l4 Q9 b9 m4 h
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: ]3 @; |1 b' _; m. y: P* p
9 p$ J7 G. K l1 z" t
/*等待UPP传输完毕*/
) f/ F% @- g8 Q* t* Y' C s& f
//i=0;
" f- d9 P2 \1 `9 o
//j=0;
5 T8 a# Y8 c7 a0 |- {# O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% g e# k% V8 w. k6 c$ \, ^
{
$ N+ Y. t, m( \
/* 测试UPP传输的同时操作普通DDR数据
* Z- u s1 k- |: R8 d( P
temp
=i;
8 z5 D* x8 K! N+ H J1 e
i++;
% ^9 D; @1 e, S/ Z
if(i==1024)
8 {! |4 S+ q d$ W2 g3 z& ]; Q
{
: {: m$ [; n" S# V
i=0;
+ [6 }1 ?2 q$ c2 [$ W! p/ U$ K0 n
j++;
9 w0 Z; b* J m: x, Z. {
}
8 l/ P* M; D( O
*/
. Q. e+ N6 k( y: o2 j" ^! L' }" I( `
, m( W3 p6 b5 E9 P$ z5 u/ F6 t4 Z6 q
asm(" nop");
4 ^, a1 r1 a( X! l& j) ?
* W- X( [& z9 u' V
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" H0 X/ Y* e3 `% { v K4 i
}
0 d( R; ?" h4 _
0 e8 _! S2 X* P# W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 i7 |5 I) X1 N i$ |- W
//UARTprintf( "i=%d\n",i);
( V! [# B: p: s8 B( z
//UARTprintf( "j=%d\n",j);
% `3 l; s) d4 q
UARTPuts("Data mismatch in buffers.\n",-2);
' r( g# ?1 w$ O' p
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 C/ f& _& Y; u' z9 \
{
; ~& c7 W- B: o( f
for (i = 0; i<upp_frame_size; i++)
. w% _3 X+ V# K# m a; N; @: m
{
5 j2 _: L0 y% [
if (upp_buffer_a
!= upp_buffer_b
)
' a, I2 ]3 T6 e) E7 v4 ~/ F
{
* \; I% E( V% j* @. i) ]9 M
upp_error_count++;
+ j8 y: ^0 o: L. A0 q
}
$ ^0 s6 D( ^& l9 b- Z
}
) T7 v# `4 s+ t1 Q' n
}
9 H2 |1 j! j' Q, W# g
? Z/ Z( h8 Y
/* 报告通信结果*/
8 z4 f' G" O6 ]( Z: G
if(upp_error_count != 0)
- K5 z3 b3 w N3 o( }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! T8 q- z: C5 O9 e1 |% w
else
' M1 M3 D. @" B6 @
UARTPuts("uPP transfers complete!\n",-2);
3 a8 P s; i5 J1 a9 \
* ?8 X# W0 F% S+ ]
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. x, f) V" m; B
UARTGets(ch,2);
6 E) y* n+ u1 K4 E6 u3 l) n! i2 u
UARTPuts("\n", -2);
4 a4 d0 p( R i, q
6 D, e& ~) u, A2 q+ e- i" i
if(ch[0] == 'y')
3 b5 }" u+ i$ X _0 U
{
3 t2 S k' L% `7 ?
/*打印全部读到的数据*/
% i% B5 t) W* D8 }! S
for(i=0; i<upp_frame_size; )
) K( y3 ]( x6 h4 A/ V. Z
{
3 a: c% D# x7 s0 a1 m
for(j=0; j<5; j++)
5 e' \$ m% a! {; T- L
{
! g8 ~2 D5 M- X9 | q. Z9 x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' |+ S3 M* @ s& k' m, N! }+ q
i++;
5 l5 n$ k! E n' W+ K* M$ i
//if(i >= 4096)
. I/ N. \4 M$ }0 N# K; H. ]+ S& B
// break;
( |6 O3 ?. R6 w/ i. }! W% o! t/ ~
1 p$ |0 S0 g& \4 d [
}
1 b# f0 p7 g) ? _
UARTPuts("\n",-2);
- L' I5 |- Q' ?- v
}
& U3 ^: T/ ]& k7 {* B, G: [9 E
}
& y& B" B' x) v
X, M! |7 }5 c t
}
! p3 t6 b; w$ O% k+ B3 w8 t
& c6 s4 H, g K/ c9 F; q
, U3 r" G6 R1 k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 w, y* ?3 P' i& @, `# Z: C1 g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( h- {$ V( L! R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4