嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ p$ e& T! r6 G1 i: r
Void UPP_TASK(Void)
5 ^# E+ o7 c8 d) X1 D3 _
{
' @+ F" t4 [# i; i/ q
& Q" U' D4 C: h6 o
int i,j,k,target_int_count=2;
& G: X3 s9 q$ C2 N) }/ G, |" X7 @
char ch[2];
+ U o. z& U5 M S# I) l
! m4 g0 o# b( W! L- [+ x- e
! U% d" \* Q9 t' D8 S- s
, y/ P) M! e; u1 Z% v3 e' f& ]
upp_interrupt_count = 0;
. }( B/ D5 U6 L) i, b& `9 S
upp_error_count = 0;
9 i: O' b n4 M: G" T+ S9 a
7 p: {9 w# @3 u8 ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( N" A( Q4 J2 m4 V6 T {5 _" j% p `" E
// Initialize data buffers
% Y& h; T O* N- T: U' B, J
for (i = 0; i < upp_frame_size; i++)
: t1 t. U0 V) R7 Y& L
{
3 q. l5 @& P0 k) R6 V/ R
upp_buffer_b
=i;
$ A0 W6 X1 j( | w, w
upp_buffer_a
= 0xDEAD;
+ d' t W$ y1 G
}
4 n/ D3 @6 b+ ~9 O% t3 [4 M$ d
- e) u9 p) O' f2 L/ i& s& P# y
//for(i=0;i<1024;i++)
& b0 b2 R$ K3 \5 P
// temp
=0;
* x+ W6 f; N% a) @1 o$ L% y5 w: c( Q; V
- Z) n+ V' a9 H7 P4 j
//UPPReset();
. \8 c' o- Z2 C: e6 E0 Y
/*启动UPP DMA传输*/
- t `1 F( o) _0 `* b
UARTPuts("upp_prog_dma_i\n",-2);
- W, A5 J$ H5 ^' P& i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 ]" m |6 M' Z, q. G d; D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ r. X |6 g; {; `3 T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ `% D1 O% q6 s7 e
$ h; {) B* \1 d$ S0 z3 A; c
UARTPuts("upp_prog_dma_i\n",-2);
' j) \: s) h8 o: h- Q2 I8 s& m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ H% v+ Z9 h3 x. e2 x7 T) e; `: x
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 v- T9 M; u% A7 w. e( E7 F3 \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" D3 j; k2 u7 I( D- r' L6 p( H/ U
6 H# H1 q$ a' Z6 u. t; o8 J9 U
/*等待UPP传输完毕*/
7 i+ y2 u" S& q% v
//i=0;
; R: Q3 y- B6 R. W
//j=0;
$ S6 s( P! b% G X5 |
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 z, b% Y$ z7 h# _
{
1 W, z0 i R3 X( ^
/* 测试UPP传输的同时操作普通DDR数据
1 E5 Y4 {2 ]1 a5 m9 a; f4 A
temp
=i;
) U2 B, x1 `3 X4 t9 l8 e
i++;
, b$ @- ^2 ^9 l4 ^3 ]0 F
if(i==1024)
/ e5 @3 E& t+ R$ a
{
& f2 x) v: i* \; V2 n' T' E7 K
i=0;
" o' f! D3 t7 P! D
j++;
: \4 K4 w% _# L: u1 X9 i
}
# V _* h9 `& K6 @: T
*/
7 o4 @. ?; u" y" f! g
- ?2 \$ N" t2 r1 K3 a3 g, N
asm(" nop");
9 o1 I3 }; g) }; R0 |
1 g2 X) t1 u9 [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ c7 h8 A# E- e. `7 T' }7 J
}
0 ]8 F! X! D: O) c3 u2 R6 M6 n
, t0 Q7 I0 {% R: X. f( Y) t& E' x+ \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( M/ J A# f# V4 \
//UARTprintf( "i=%d\n",i);
9 l0 k" `' O: {4 p
//UARTprintf( "j=%d\n",j);
8 z. _6 o, A) y, \
UARTPuts("Data mismatch in buffers.\n",-2);
1 ^- F8 p. A2 k
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 E Q2 N" ~. L1 g+ `
{
8 h' y, j" U, c" `+ P7 t& n
for (i = 0; i<upp_frame_size; i++)
, M6 H) U) `! q
{
3 O& m: T! s- p/ o( m0 s
if (upp_buffer_a
!= upp_buffer_b
)
: }2 A- H: _# I4 ]8 e
{
1 \* W* `% z6 E) c/ e; b
upp_error_count++;
4 m) l3 [* I5 d- {7 x: M) P6 l
}
$ N+ j _7 k1 M9 l; E5 M0 J
}
) E7 c1 R7 c t r9 |- w. V
}
) c7 V8 U5 n3 b2 p" S& P. l2 ?4 o
1 m8 ]4 j9 [# c( t
/* 报告通信结果*/
) w5 n% K. A+ l7 H8 k
if(upp_error_count != 0)
! K9 J! E0 K* u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" y4 S j k' f+ Q6 p" z
else
3 o0 q! U+ @4 [" c
UARTPuts("uPP transfers complete!\n",-2);
2 n% v, Z& X. l2 g
8 x* {9 R. n+ C, F; T3 V9 t! S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* V2 P# [+ m( _/ i+ j
UARTGets(ch,2);
2 m! P) N6 z% Z1 N' ^( v8 q
UARTPuts("\n", -2);
& x$ [6 i$ l6 u# s
# T9 P* @ q. S' s& |/ X
if(ch[0] == 'y')
- i6 e2 J: \; f; @8 k2 k3 N
{
: G9 R& ~0 x7 @% F d
/*打印全部读到的数据*/
: b, s7 g/ N8 \; Q2 I
for(i=0; i<upp_frame_size; )
9 L. u2 N# @# D$ N+ p2 {& d
{
2 ~8 E' D( @( _5 p3 s* h+ [4 \* w3 K$ u
for(j=0; j<5; j++)
. a' l$ K2 `7 Q3 a! K
{
" N3 j( a* ^" v8 f4 S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 ~! r5 o+ s, R0 [- m
i++;
6 j' m6 O$ l$ \* ]5 s
//if(i >= 4096)
: X4 ~! M: l- n/ Q: n
// break;
0 I: A7 @! N& B: a, u
/ S* v7 S3 ?2 F
}
. J/ M1 ] a+ M& ? w
UARTPuts("\n",-2);
/ w) [$ d* [% A; X4 a3 o
}
! @0 T3 g& ?) p' ]: Y: a
}
: n! f; _# m$ C9 ?
: d% H A. T& l- j0 Z
}
' o1 U: Y3 C; {: Q! P
y7 }* K; c% @9 U- X5 G$ X
0 m5 n9 F* m: q5 w; b, G# S+ C. r, z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; ~8 K, e7 m1 r3 r. E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) H8 g2 H; ]' L" b
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4