嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# D8 P* b8 z) n1 f; {0 t# g' B2 Z; [
Void UPP_TASK(Void)
1 Z9 E+ \% v# P& ]8 F2 S6 m8 k' G8 w
{
4 E1 r/ ] l1 s& q. Z1 O7 m
9 G6 Z/ ~) z8 E- n& o. x
int i,j,k,target_int_count=2;
) d6 S+ {& a. n Z
char ch[2];
9 o4 A& l& M+ ?) C" V! Q
. I2 D5 @! y, W1 ^" Q& @
3 j1 Y, e% C+ |. [; m
, f: j; {4 x& W: B6 j9 Z
upp_interrupt_count = 0;
- t5 o$ {, @+ U) B
upp_error_count = 0;
7 E& D- E9 `! h( V/ b# n
, q5 A7 I I1 K0 k; H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% L/ {- u% L; {) z, Q
// Initialize data buffers
' I5 h- g1 b" @0 H1 T
for (i = 0; i < upp_frame_size; i++)
4 `7 U. _5 u5 L; g$ T: s* w
{
2 F: C; X- @* h, Q: `. ?$ M
upp_buffer_b
=i;
# D) w! C( z7 r/ y' v0 {- {; R
upp_buffer_a
= 0xDEAD;
3 Q: P8 ^5 E8 y$ P0 Y5 c. Z4 _7 ]
}
: n9 X! K! C' E u; m
% B/ S6 Y8 t4 j7 Z2 \
//for(i=0;i<1024;i++)
k( U" y2 c+ q1 o {
// temp
=0;
4 X8 F' _2 a6 ^5 h0 a5 _/ [0 k, V
5 _& D# E# z- R' j
//UPPReset();
" |& i9 ^0 N- H# a% e
/*启动UPP DMA传输*/
- F) E, I' C3 ?% p8 Z* F
UARTPuts("upp_prog_dma_i\n",-2);
+ L/ r. D- f. o4 ^5 k( o" U: F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 J& [6 a# }1 h- z. U$ Z ~ b$ O) i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% Q! d7 m6 M% ?* Q/ [9 R
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 J1 |/ l8 W+ W. q1 Q$ D
[1 x: ?9 v- F& C: N" ~1 S! r/ K
UARTPuts("upp_prog_dma_i\n",-2);
4 w7 P1 |9 N u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: f6 F( Z5 u2 a- W7 v: X5 t
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
T$ s4 V* q1 O( g9 g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: f( ^7 o* ~9 x" g+ I
7 K' l( A& f9 p
/*等待UPP传输完毕*/
0 n" o9 J; c8 x, ?4 C
//i=0;
l8 Y7 ~7 R4 r$ C3 M% T
//j=0;
5 E2 X. q! F8 A7 M. \
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 t5 p$ ]) t A. V( c
{
- t( ?2 l. e( T; t4 I
/* 测试UPP传输的同时操作普通DDR数据
2 {1 W. N- y8 {
temp
=i;
6 y& j5 n1 m4 \" c X- t6 m1 y: ~) p
i++;
: l- T, K ]" y& E9 u9 t0 m
if(i==1024)
/ n; ^: p ^+ h
{
8 Z G9 b: A$ d1 L
i=0;
: {, c, i! n, [7 x: |2 h8 x
j++;
1 X% j4 }! F% {
}
4 r$ Y$ n5 S/ T' O
*/
5 {: }1 Q; _- H$ R3 L0 x
+ y( @9 J; p5 A w
asm(" nop");
9 A' a& ^+ p3 f" t% h
. L6 B! a" M" i3 y( r! W3 {
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 n0 P3 C& Z0 }3 w
}
, p' X" Z% ^8 d- c. y1 B
9 @& g/ `; w# H+ F& I y; }: A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 R9 {3 j6 g- D
//UARTprintf( "i=%d\n",i);
4 T4 O, B" R. }( p
//UARTprintf( "j=%d\n",j);
3 m$ Q- F- x( {! \% ?
UARTPuts("Data mismatch in buffers.\n",-2);
5 Q, B& E6 s/ W7 P; }
if (upp_interrupt_count == 2 && upp_error_count == 0)
. r3 v6 v% a8 h1 Z; o/ P" V" ^1 g
{
: T, ^1 Y6 ^$ I$ z: v2 M
for (i = 0; i<upp_frame_size; i++)
8 F5 p- k! e$ Y4 P
{
, `* L# V0 Z$ b* D2 o% a1 P
if (upp_buffer_a
!= upp_buffer_b
)
+ M0 d0 R d: {
{
Z8 R$ E, E- Q2 C+ {
upp_error_count++;
5 N. f; _. ]5 W
}
$ P! v& r* X- X+ ~. e" v0 V. y
}
7 y) z* E2 u. U- c3 _5 b6 r; `
}
# j) g) t6 ?; j) q$ B J( A
, ~' z; Y/ L9 \) [( V1 V
/* 报告通信结果*/
) P J# ]% k4 s: j
if(upp_error_count != 0)
1 Q: e5 ~) a2 ^7 Q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
C! ^' [5 Q. R$ h
else
8 c: e J7 u+ T$ e5 o
UARTPuts("uPP transfers complete!\n",-2);
) ^9 d6 O1 `- N( l
. S. D0 u! O1 ^+ U8 K4 [; h* J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& j0 y# q. u8 W& Q3 Z
UARTGets(ch,2);
. L3 u, x$ D! [5 u* ?
UARTPuts("\n", -2);
" q' M% {+ r! s+ p B- z
6 [4 m; Z# e* H# }5 b+ z' g
if(ch[0] == 'y')
# [$ j0 G: F) H6 m# R
{
: D* Q/ s8 d( e/ A7 N/ o
/*打印全部读到的数据*/
3 H# S( J+ r; G! S
for(i=0; i<upp_frame_size; )
1 k' W K5 P$ p0 U. x+ G
{
- m9 O5 I0 w; {' b* Y, |
for(j=0; j<5; j++)
- c. p% D% \ N" x" ?0 h `& o
{
; I# o5 }' P4 s+ a
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ z" Z' \3 D* M. \6 I
i++;
6 d0 p3 w) `: g5 E- M+ g
//if(i >= 4096)
& u H$ v4 b0 ]- w) r' A8 D
// break;
I: q# O$ u. [5 `
5 F" N( ^& z9 K9 H4 x: C8 O& p
}
/ @0 A2 N( o- ?1 T3 @
UARTPuts("\n",-2);
) v% B3 K% y* Y) r1 L$ H Y
}
) [4 p- i, k, ?! m
}
7 [7 G9 `" ` d' a
/ h; ^8 T/ u: C8 V# P6 Z- c( b
}
9 X4 ]% ?2 x# u5 [2 q/ X' a
2 F- D. O5 M6 U
( a' v2 g5 H/ S5 { t: z6 G& O+ \' M3 I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& N! ?7 q: [* c. }' b" n/ I
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 d/ ?7 v3 w6 L, K9 {4 _1 ?
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4