嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- v1 }' }! q+ ~& v* Q6 ^8 k* j( `+ P
Void UPP_TASK(Void)
/ S5 v* I' w S5 o3 _
{
3 E; `0 x! d) b7 y; D$ p9 ?! o
& L% a& \; n0 |1 c7 E
int i,j,k,target_int_count=2;
7 s' q# O8 s& X, s2 y- b8 z
char ch[2];
9 l. |) Q3 P( Q% P' j) @
8 O/ \' o" f0 D* j$ f
* p' c) J8 e* d+ `. G
C5 w8 M% c; w
upp_interrupt_count = 0;
r# I3 J2 O; `, f& k- D4 Q
upp_error_count = 0;
& h' n0 \' @5 ^9 F, {* c* F8 ^3 Q
" m5 E5 m' l4 s% M% ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% d- i7 [/ k( {4 S
// Initialize data buffers
$ F5 h' u" _4 z4 o: d$ d& z2 k
for (i = 0; i < upp_frame_size; i++)
. @9 t7 l5 K: C3 R; m
{
- t, s/ v0 q* q+ U1 s% E
upp_buffer_b
=i;
6 L8 K/ [6 r# I
upp_buffer_a
= 0xDEAD;
' b$ r# Y2 m6 W1 d. Y$ K
}
) @! t( M# ` R9 e! N" X
% ^' B" R4 s! N# }$ q0 y
//for(i=0;i<1024;i++)
# m' I1 h8 W" _2 \) r
// temp
=0;
4 h \8 L! Y* ]6 k1 Z2 f0 H3 @; o
* k* g9 O7 i: P
//UPPReset();
6 K2 |3 j, G/ t& i' m" U$ i
/*启动UPP DMA传输*/
* J& g3 S4 h) S& B
UARTPuts("upp_prog_dma_i\n",-2);
6 T2 H8 c" X+ `) D1 i/ `' o; ^4 p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& ^3 Z0 W# P3 F$ d9 ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 i8 \/ m& h/ e* r, |$ {( S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( k& K& }4 G, n; R6 m4 R# d L
, j& z! R6 P: Z$ i/ q& P$ G
UARTPuts("upp_prog_dma_i\n",-2);
# [- w3 r, Q E/ G
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 [: h: A( T+ n" _0 b/ z' A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; J ?; j7 I& n) m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 o6 ]& S" d& k6 J
3 C2 M2 [- ]. ]' M0 Z8 M
/*等待UPP传输完毕*/
' r) c. T( D7 m$ F9 B- f, S
//i=0;
' a* R6 y# c3 E1 D9 G
//j=0;
o4 @% A' @& e' r# ]: V
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ _ X; {0 L$ N3 c# z+ o8 l2 Q
{
7 I, q. d! A" `
/* 测试UPP传输的同时操作普通DDR数据
6 r5 F0 X) ?3 n6 [ i" B7 J
temp
=i;
( l- l: h, r! B! g4 e( ]
i++;
7 D. q w7 i( J' h8 M3 b( Q
if(i==1024)
5 b, M6 A4 b$ E, j$ b' x6 r
{
( L/ T6 z1 \# M2 h9 y1 q1 f1 o
i=0;
D* D6 C$ u4 ]. Z+ ] Z+ J& R7 |
j++;
5 s: ^8 X) m0 m: d( b
}
& u5 a3 K2 g1 k1 s" E
*/
4 I3 I% I4 ^9 N2 N1 t# ^( w/ `9 C
+ B: y& i8 V1 n
asm(" nop");
5 X% z r b0 v; U7 K& _* D7 t
! X; f9 A3 \$ b/ D0 X: v# B
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& m0 N; l2 Q! \" Q" H# `/ C
}
6 r' t6 l/ Y# F
; {3 P% {4 t: G; e1 G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* y8 L0 S: L* H( J
//UARTprintf( "i=%d\n",i);
# i. o; l( j# m/ q% o
//UARTprintf( "j=%d\n",j);
. K: ?+ e) o/ T2 q
UARTPuts("Data mismatch in buffers.\n",-2);
6 o7 J! y* G# i1 ?% w
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ q: e- j& i3 `7 g2 R! W( j8 h* x
{
+ ]6 E) U% U+ K5 |; \9 q- n
for (i = 0; i<upp_frame_size; i++)
. e, P0 [+ N: l9 V
{
# l; b( D0 q+ s; \0 W _/ e
if (upp_buffer_a
!= upp_buffer_b
)
$ V4 j! T( y7 v% g
{
+ {" w7 g( o: ?% \
upp_error_count++;
9 F! \+ u7 R/ H" @) a/ Q+ l
}
Y% [& M7 [/ b7 W5 ^
}
( |, @) I6 o N' \# ?4 b% U( z% ]7 ?
}
8 z! t" R. C: y1 Y5 N
, _' F+ Q! H- |% h# ^ B
/* 报告通信结果*/
2 ^3 X# N9 D1 R/ u( |
if(upp_error_count != 0)
; \2 h! K T; n' b0 Y* Q. Q" y1 E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- d- v2 z- C3 u0 h# K2 }
else
3 h& R# v3 ?% \+ Z# m1 K. C$ L
UARTPuts("uPP transfers complete!\n",-2);
! S2 q3 n4 g# D( p6 P, V. b2 {6 {% Q
5 i6 C0 f1 y7 E1 I9 { _
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& Q/ T3 p6 N7 @1 T1 Z# w3 h5 Y
UARTGets(ch,2);
8 V4 b7 m! N2 E+ d# b8 x; b3 Z# k
UARTPuts("\n", -2);
3 x) r) j8 I5 K: c z* }
; n" F# b; k* O l, R) H) L1 d" E
if(ch[0] == 'y')
* B2 `2 @) s0 I( }" y
{
) p0 K. U/ Y5 }; I" y" m6 k3 G
/*打印全部读到的数据*/
3 I; @$ M4 ^1 q/ l+ F2 H& G+ H! \
for(i=0; i<upp_frame_size; )
6 M) e4 G6 w5 I4 u* l o( t* y& H
{
- b3 ?8 ?- i4 s% g- x* v
for(j=0; j<5; j++)
% e" R2 B7 m' `" T/ K+ r( D
{
2 n# k0 I- g4 k6 {- z3 l& T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ J0 B7 D1 y6 K% g6 ^
i++;
; K% d9 p, G2 @0 A% t2 _
//if(i >= 4096)
/ D/ c9 s5 L2 ?1 F" V1 t
// break;
$ d1 y. S: }- `1 w% a( k/ d: m" {
0 |' o3 O9 C$ u( O% T+ b, a
}
' \8 Z& Z7 l8 A
UARTPuts("\n",-2);
4 X* G" e1 v6 U' ^- f
}
: o: H; e; j: Z# |# Z
}
: ~9 z2 j7 W$ o- L" _$ e' v3 ^
2 g9 Z i/ `9 _5 K% f% v4 R
}
! r: |% V9 D: E1 y: d
2 |' p% i* r% Y3 Y! o
& F) `9 u9 a' A7 d/ E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, z, o* V8 M, b
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* D" E0 L( h) }4 h; S. R: t
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4