嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: C8 |" J6 {9 `4 h1 l
Void UPP_TASK(Void)
) Z$ V- f* H# h
{
! v' h9 j. G& n0 h# @
5 m, d a7 e$ |3 w
int i,j,k,target_int_count=2;
% L& V: b6 Q8 K3 y# h& |! Z
char ch[2];
2 a" f& D. v2 N7 _
. o2 j' e: U3 L3 Y6 X
9 k0 f1 b9 x" l( P
* d! z7 a0 {# Y9 W2 r6 k7 J
upp_interrupt_count = 0;
3 c8 t' U4 _1 ~* Y5 b% |7 C
upp_error_count = 0;
; y: ^ o2 g# q/ C' L" I
( B9 f) y1 C4 r9 i b& _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! q. c5 [2 z! Z
// Initialize data buffers
' R8 c$ w o" i
for (i = 0; i < upp_frame_size; i++)
0 x2 X- n8 t i T: T2 H7 f$ X0 B
{
% |$ [) Q- {8 f7 o
upp_buffer_b
=i;
$ m% U% {% R! z; J0 q }
upp_buffer_a
= 0xDEAD;
2 G4 k1 h' X$ F0 \- ?
}
# }# d) T/ f) ~. J+ l* V; ?1 a
' c' o2 n% t" [* u- r6 O4 K9 t# {
//for(i=0;i<1024;i++)
8 ?' H$ { f% @; k9 W
// temp
=0;
. F1 I; g" z: A7 _: B
: q; a4 k1 Y0 u: t
//UPPReset();
/ N6 W3 @3 ^' J* W) J2 n- F6 z
/*启动UPP DMA传输*/
- @; e) q9 k- e: @+ I
UARTPuts("upp_prog_dma_i\n",-2);
2 J8 b5 |2 `! H0 s6 a# @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' s; U" P+ r( w! \# U% L2 h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ e5 x+ g: r4 X7 |" r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ r9 r" H+ @! y
# A+ O/ t: _0 E; m$ W
UARTPuts("upp_prog_dma_i\n",-2);
3 X4 d) ^4 g1 A% z$ Z0 s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 v) T! d4 Y! P. p" F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 R' @: M) A; V% {
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 q' M. h6 k u0 f# y# b" a
6 S3 X4 o o% B6 R v
/*等待UPP传输完毕*/
* X6 o9 ?5 Y, C9 _
//i=0;
1 l' C, X1 S8 N- [ ]. e* u$ h1 i
//j=0;
$ I: C% b' p1 C& m. |- x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- s1 _+ D2 i+ W( U! `
{
/ M& g: {5 ?$ }7 a6 d6 f0 B
/* 测试UPP传输的同时操作普通DDR数据
/ U. y! o* X1 @0 x R
temp
=i;
' A7 d5 n3 Q3 B9 h% s: W( Q
i++;
' B6 H4 H* L2 T4 Z
if(i==1024)
/ P9 y3 y" n5 A! q8 k( w5 p o: b
{
. a7 M1 z6 z) u1 @
i=0;
$ i9 u- S: b$ o9 k6 j, x: Q7 w
j++;
% Z# c# q; p% H8 }" x& @
}
1 H' C v$ ?6 |# X" a
*/
- N2 U9 G; I2 R# {% i% N
3 C* t) |+ X; g: f
asm(" nop");
, d0 c( H( S: m: m$ j
% Q2 E# v1 p' s" P$ Q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ {" s) p/ X; e; @
}
' o1 ~/ G- I0 k2 h$ ?
. {3 C. z9 a5 r% V2 a& X5 s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 k- A6 _/ {% C0 c5 ~
//UARTprintf( "i=%d\n",i);
f; y/ z) X2 P2 k
//UARTprintf( "j=%d\n",j);
" Q: ]% ^2 u' o6 x
UARTPuts("Data mismatch in buffers.\n",-2);
+ D! g; Q* m9 O- N) D) q3 Z/ ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
" c1 E3 G6 g( b+ E. ?8 p
{
; j+ D D# T. @" ^
for (i = 0; i<upp_frame_size; i++)
1 o2 A8 l: Y! N* H' i
{
% F9 f/ U. }, C2 N8 r
if (upp_buffer_a
!= upp_buffer_b
)
) _! C, Z. w& h( B8 p8 m i
{
" ?2 s, t/ N3 g) G2 ~
upp_error_count++;
4 b- j0 O- b0 G7 w. z7 p5 C
}
2 r8 e' ?* t1 n- C! V
}
1 u$ m9 d/ K" e8 V3 J
}
* \( S) d+ H/ Y4 u' X7 T( T
+ d% {, Q8 H; R! T4 X' t
/* 报告通信结果*/
5 |4 v+ i6 ?. I& I( g
if(upp_error_count != 0)
. ?9 S2 w7 h+ }% V& |3 K, U0 Y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 L/ q% A$ m/ B; }7 J
else
7 ^/ f4 n4 B) I
UARTPuts("uPP transfers complete!\n",-2);
# @; Y7 u) ~/ E" u! z: Z) z
) V: w# r- w E. r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- C$ u) O% \ v3 ?: @( H7 N) T
UARTGets(ch,2);
' B9 g3 `1 z% U' t+ E- ^# ~
UARTPuts("\n", -2);
1 P: X5 G" a% x, [" P H& [
/ J8 l4 h" V' S( L9 u% m" i2 e9 \+ I
if(ch[0] == 'y')
9 s- k4 V' U# f/ e
{
0 X" b6 k; W9 l
/*打印全部读到的数据*/
& U; D% y& Q! \# A3 H1 @
for(i=0; i<upp_frame_size; )
# y" l8 r3 W1 W
{
, \ J5 M0 m! t8 \' L/ e
for(j=0; j<5; j++)
+ k. d$ I4 L: t- D
{
" C& T: f3 G6 d7 [& N2 } A7 K. D V7 O4 N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 O# c6 b% G9 w" E# z
i++;
, C4 `+ W2 d' P+ D2 y
//if(i >= 4096)
9 w- w7 e4 E5 Z/ y4 G
// break;
& h( Y) x0 j1 h0 h, ]6 r
& S% {2 h8 J" S# w
}
' t6 |+ h: p$ {. z& R
UARTPuts("\n",-2);
# q8 l* Q5 J! K: n F6 Q
}
- o F5 |9 Y$ {
}
3 V: E( C6 p9 t5 u& t
' E4 A& ~; `# ^( x: B
}
, r' o. c: Z1 f
) C( ]3 x. z8 J" @- [, r' y1 T* e
# V$ F8 T: Z, @) v4 p
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# Z% a9 ~" [' |% D8 T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 C% ?( m9 A, J* }* p
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4