嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# Y# {6 N8 z) w& j" q
Void UPP_TASK(Void)
0 t# X2 L5 y0 a7 I; B- I3 ]
{
8 f2 R! o# M7 D
$ u7 c$ b* T w' b6 r+ @6 w' A
int i,j,k,target_int_count=2;
K/ O" e4 g; x, }6 t
char ch[2];
8 b3 I" D: e, H1 P+ X. Y% Z I: ^& m
1 M6 G( A& t* j7 r6 R! F2 N4 F
2 L) B9 K. w0 K. C6 X
4 M b+ X9 j0 Q
upp_interrupt_count = 0;
4 ?- h, @# K3 `& U! w
upp_error_count = 0;
- C7 A- r- ^; y" w! S0 y, l
! }. k4 f- V" q9 _' y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& m' h5 L) C8 E& a
// Initialize data buffers
' x5 z/ I. w" p% j+ ~
for (i = 0; i < upp_frame_size; i++)
+ I" q6 d/ ^9 d2 Z8 Q. p! A
{
5 j: R3 O) h9 @& e3 J
upp_buffer_b
=i;
u% b& e* p- Y" ^% W% c+ H9 R
upp_buffer_a
= 0xDEAD;
% {% U2 p) i- i+ p, M
}
( V3 w& |/ I7 Q" a* f+ Z4 G
9 o4 H1 q: j3 d0 }9 m0 G& K# M
//for(i=0;i<1024;i++)
. ?, h/ d5 E/ r9 p
// temp
=0;
. T! J0 e( u+ _! Z. u$ s
- o# u6 t8 O+ c5 T1 r
//UPPReset();
! z% s& e3 V' s! X: |
/*启动UPP DMA传输*/
4 o% Y S) y# p4 Q4 ]7 I: @9 h2 ~8 S
UARTPuts("upp_prog_dma_i\n",-2);
; @: J+ w3 E5 D6 z) h) F; y/ h1 ]5 U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& q* |4 t7 y( U' Y; K1 M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# f1 S' I! I$ A8 U; J3 l9 T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: @- ~0 P# _) ^ t$ Q3 N
& t6 w) g/ ^! P0 Y; C6 e' C! z0 G$ e
UARTPuts("upp_prog_dma_i\n",-2);
- \3 q) u( X0 n" ?$ f4 k& M# I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 j _! u$ |1 ]+ d; G3 l
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 S1 E# p2 c/ e6 }2 K$ }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; ~/ F- ^9 F7 I$ x! q) t
# d/ O+ l0 b: X9 {7 h! U) B, _6 T
/*等待UPP传输完毕*/
$ @0 L6 k* ?% o5 X5 k4 E* Q
//i=0;
8 q: {) Z( U, V) i$ f7 ]5 O# J
//j=0;
9 |+ }: c0 Y) z7 w4 B4 Y6 Y2 n; B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( j6 D* _5 e3 s0 ^
{
; I' \: t4 D9 @) ? ?/ M4 S
/* 测试UPP传输的同时操作普通DDR数据
' s$ J* {3 V. l
temp
=i;
# X3 S8 _5 n8 L! h" Y
i++;
- y' r- C4 t' {/ `' Q
if(i==1024)
1 [8 I5 `) I4 @9 i
{
7 Y& J9 w% O8 O1 M) J
i=0;
" B: z" f' ]) h% B0 r
j++;
1 @. x+ \9 i1 s7 B
}
/ ^2 n0 ^" p# F5 e
*/
& l2 t! ?$ h3 z/ e$ [
! }/ [' \% V4 s7 a
asm(" nop");
; p4 N& ]: n2 V
- ?9 I0 l9 w6 O6 P6 Z3 J
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 h4 A" c4 O4 h; N* ^# t$ _
}
9 Q1 `1 L. |3 a' o
7 J2 x% ?% c% D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, _" G, h/ t$ R' F* ~
//UARTprintf( "i=%d\n",i);
4 P, J4 s7 E$ Y! H" Q2 t
//UARTprintf( "j=%d\n",j);
5 Q# g' P% T' U0 V: _* s9 I
UARTPuts("Data mismatch in buffers.\n",-2);
+ a4 L9 G) e: ^% Y6 G
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 ]# S- l, M) T$ i: G
{
5 k* r6 D8 s& Z/ U; v6 T
for (i = 0; i<upp_frame_size; i++)
$ E6 N* |/ Q" n7 S3 ?
{
& a# {0 v+ w5 q; s' t: U6 m' \
if (upp_buffer_a
!= upp_buffer_b
)
% I+ | t& A/ B$ l3 v
{
! I5 g* H j, ]4 r3 z" k4 Q2 `
upp_error_count++;
; l& p# c2 ~' A3 Q1 b( q' }
}
+ N6 M1 V# u. R1 k+ ~6 ]
}
) H9 x! Q) s; M* F0 d6 ?
}
9 b$ q3 _" N. _- X0 Q9 i; ?
* e5 `& m- {- J3 [( q, V
/* 报告通信结果*/
3 t9 k- }7 f% R5 t
if(upp_error_count != 0)
8 P3 Q/ w3 {$ Y( y8 S# }- J) I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* M" U# T% g# X2 M% c% |/ E F
else
8 v' S4 V- F3 b- v/ H7 E$ J
UARTPuts("uPP transfers complete!\n",-2);
: c- ~1 h( H3 ^1 y8 f7 k! C
5 u, P9 n+ C) q# p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 C& O! D- g( t4 Z5 P( k
UARTGets(ch,2);
2 b; n9 _$ u2 z) @) u% W) i
UARTPuts("\n", -2);
- i: F S9 r% A( u# f6 ^
3 ]- p" w. F8 I( S
if(ch[0] == 'y')
8 P" A4 C6 W# a8 F3 R
{
% v4 s( r4 c6 H' i) j
/*打印全部读到的数据*/
8 J8 @2 r/ Y: F4 \% ~% r
for(i=0; i<upp_frame_size; )
/ ]5 Q9 @9 z7 k6 X
{
7 U% W* I c1 [: D) C# D
for(j=0; j<5; j++)
! ?' J) {% K! R1 X& y: U
{
; X2 o0 u. ]) M) @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 O* \& G9 h1 w2 r2 K
i++;
% L8 y/ A+ N4 \& s: a) P# b; W
//if(i >= 4096)
( h7 B; {* q0 k$ |( _/ x
// break;
/ \4 z8 \4 q! L; v1 M
0 N" L5 r; L3 _" G1 n" T6 Q
}
- ~% {+ n2 G0 S- P# e3 G7 l2 G# i7 o
UARTPuts("\n",-2);
7 R0 W1 y; {# }8 a# k
}
" z, V' [ M( ]( Z- G5 \6 k
}
]+ o! w% D0 h- N8 d
- t) I3 t2 w3 A& ^% s
}
8 D$ ` y8 I3 }/ z" Q" M+ G5 p) B
4 p0 Q, Z M* |2 G
: v( ?" D/ d+ q5 Q! C: w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# s1 V3 ]( a9 L( Q$ ^
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& x% G( G& {& E5 U1 {
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4