嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 N% p- v: I- u ^! v
Void UPP_TASK(Void)
; x# u" K: e/ ]! ]* z2 a
{
. Q+ L* ^+ ^+ Y% G* a0 w0 h
4 G1 b( W" O* Q7 s$ D
int i,j,k,target_int_count=2;
* f5 ~2 q1 E+ I
char ch[2];
7 ~/ B: E, {3 x8 q
- O! u; W2 M% |2 r. ]! J1 c/ a# j% `
1 ]( @- X# x# v1 S1 v
- g( D% m" F0 ]+ T, Z8 |1 I# x
upp_interrupt_count = 0;
4 b' `& ~7 A* P2 C5 N; {1 y
upp_error_count = 0;
0 X m, \5 a3 S
+ P% k9 K% e- ?; M2 `9 f
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# s4 D0 C$ G) z1 y2 q
// Initialize data buffers
& x2 u8 B5 b% t7 K) w
for (i = 0; i < upp_frame_size; i++)
* h* R1 k7 G, K0 y# }/ \, e, A, K
{
8 a* ?4 [' E# p; l/ P2 O' A1 m
upp_buffer_b
=i;
3 U0 o0 D8 \- S* k! y
upp_buffer_a
= 0xDEAD;
9 j' x2 ]& W7 ?, }+ |7 g
}
* J, O. A( F5 b1 q8 N9 d
$ p. g1 m5 G& l6 z1 U
//for(i=0;i<1024;i++)
: b% ~ p. [9 `+ j X. ?; E" {3 R
// temp
=0;
+ X; ~3 B, ?& l5 O& C% _
( f2 A8 f" W* D1 j; L( Q
//UPPReset();
/ |" _; T" u( N0 i7 T
/*启动UPP DMA传输*/
$ c& d1 `2 Q8 H$ s: y
UARTPuts("upp_prog_dma_i\n",-2);
+ E; y4 p2 ~ k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& q2 R$ x2 ]' {5 A+ _$ z: q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, o. i0 j' {! V
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& Z1 i6 l0 |6 e$ R5 @5 \
9 \0 D) a3 Q9 Y
UARTPuts("upp_prog_dma_i\n",-2);
& ]' {5 A P6 Y7 j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# x3 ]& i% t E [2 z6 F5 k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' r8 A! P* g' ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! B" y& D" J1 N+ `& k) y3 R( u! z' E
9 V) Z4 X! s5 {9 V/ [3 P# a. N' @7 N2 k
/*等待UPP传输完毕*/
- b" I6 T2 f+ I, ]
//i=0;
% J9 F" l. A% @
//j=0;
/ R6 X; G1 `& L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( @; T' e( R9 Q9 n" j5 @/ J" i2 V! G5 l
{
4 U- l5 K' g {. S6 N2 v* ?
/* 测试UPP传输的同时操作普通DDR数据
: t7 @. P$ @3 [5 X1 U7 \" {
temp
=i;
0 Q6 z7 O% L' p: s
i++;
& I$ n' a+ g; S, y3 l) [7 w6 g
if(i==1024)
. w; j: N6 C, S' S
{
6 L, F2 O" s* x7 z7 h2 i5 O$ E
i=0;
/ W9 ?8 O2 q* u/ l1 i. v7 I
j++;
3 [# P( \# ?( n
}
" V: b% R2 T0 b& p8 L! S ?$ k9 |' F2 W
*/
& u) r, I7 I' m2 I
! }/ w. ^2 {( ]: T6 s; w% O
asm(" nop");
5 L+ V' t6 @2 l- n: ?& g
+ ?' a4 q7 R5 G2 l5 I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) d" d4 }" a6 T. W4 e6 R
}
$ B# p1 M6 ?+ J1 Y9 l& y: Y0 P8 G* e
/ H3 ?- X6 ^% K# z3 m _5 v$ x
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ Z! ]+ i( K1 Y9 V# \. X
//UARTprintf( "i=%d\n",i);
f8 X2 [: m# x0 B" {: c$ h$ Y$ d
//UARTprintf( "j=%d\n",j);
! E0 R9 y5 R" E# i/ z% j
UARTPuts("Data mismatch in buffers.\n",-2);
) H2 O! z% q# B
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 A; u' I8 \% b' O
{
4 Y2 M$ d% p2 y8 w' l4 k
for (i = 0; i<upp_frame_size; i++)
* g$ ?. U- a8 y2 N" a0 i/ g1 `
{
' O8 M$ O! T! R) A. B) [: `
if (upp_buffer_a
!= upp_buffer_b
)
* p* N; _8 j& r7 b) [
{
9 J2 f, o, k/ w2 |4 s
upp_error_count++;
% [6 q) S3 b t! N6 _
}
+ O, ?4 i, L! t3 t* u2 m
}
1 j" E8 @3 q; i3 q3 ]" s+ G- x
}
$ b" S9 U! z2 K# @
- D/ w7 h y7 A% f* h! R% U/ s
/* 报告通信结果*/
' i$ c. l6 Z0 ]8 i
if(upp_error_count != 0)
# J9 n6 K! q6 V7 i; w
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; u4 X7 _2 ^6 |5 Y% R- E, y( j$ o9 b
else
. m0 i4 Q% j( f- j/ J
UARTPuts("uPP transfers complete!\n",-2);
& b; O) Q: h# m) B/ T
, v9 B7 m5 J" e" O5 G, K# i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 a0 B. a, r3 }8 E8 Q8 t
UARTGets(ch,2);
- [: _ W; L( ^" O7 C/ h/ y' l% w
UARTPuts("\n", -2);
$ X! H5 h: q9 z& c9 m
. H. f& t/ `* g0 O B# G
if(ch[0] == 'y')
% @/ J% x% m" J9 q* W
{
* F; D) z/ l. o9 n# j* e0 W
/*打印全部读到的数据*/
* o3 S0 X0 T- a5 e+ M
for(i=0; i<upp_frame_size; )
- U0 o& J7 Y9 @( E7 U% Z
{
) M r$ V& w* l/ Y) E
for(j=0; j<5; j++)
. o6 A s9 d4 ] u$ g6 R
{
* B4 j/ k! y9 n3 e( O" @- d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ ~1 \3 F$ J0 x
i++;
5 E) g8 r* P# p) y
//if(i >= 4096)
O! b3 P% g7 q a; n6 y
// break;
: ?; R7 v) s) [: [. ]+ c) |. c
- E- E Z* F! L0 z+ S+ g' E$ e+ m5 @
}
5 `5 j0 K3 N2 e
UARTPuts("\n",-2);
! \3 q" \6 L. v, Y9 ]8 Y% x
}
- s5 K, g' L, X7 _* D$ c
}
, D! M9 O% x: V: ]% @; a: @ y* V
( Y0 L. J! e- M; q! \ W, T
}
/ G2 D; D) Z8 B7 B( R% t
& C6 {8 s- c3 c/ `7 p
/ t9 m2 A+ Z1 | w- i8 p @
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 [; s F/ F( ]$ R3 `& q, C0 d: C* Z. y5 c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% i9 ?( n2 {# y% R# N. K* v
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4