嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 r* _) c1 O* a9 o
Void UPP_TASK(Void)
& V- n* c P6 G# H7 u! r3 [
{
' ?5 f; B; U$ { H ~
) v2 L# o* ]# y0 q+ [# `" i
int i,j,k,target_int_count=2;
6 M0 w! p0 |% V0 y
char ch[2];
; o& b% c- p" b+ }% g [
2 M) b5 D0 T0 E7 c
! j7 b' L+ X4 `" f7 z! T
0 S6 g) a8 l9 B% ]
upp_interrupt_count = 0;
' e4 Q$ w* d# r& ^: w) M: T. h
upp_error_count = 0;
3 ^3 f; \" y' ^6 ^; l
, j( ]3 e0 Q8 y/ x, T* R
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 F9 [' w4 m0 F, n0 y& V
// Initialize data buffers
; S4 r9 X0 q+ I) v
for (i = 0; i < upp_frame_size; i++)
; r; S. Q1 {4 @5 w- k! n
{
, R, O3 t" T+ f: e
upp_buffer_b
=i;
) ^4 U# i% K+ J3 U- R/ k c9 {; k
upp_buffer_a
= 0xDEAD;
) w l0 m2 B( S6 b
}
, z; @5 W6 z$ d% o" l, W7 u
$ N% E+ O5 U8 ^' }( W
//for(i=0;i<1024;i++)
5 i! ~1 }) T1 O; _
// temp
=0;
9 N5 A1 p8 c; S
# t* m; |) [. K# N, G; n+ l
//UPPReset();
7 b& w/ Y9 Q# V. |4 c/ D4 ]" M
/*启动UPP DMA传输*/
( o+ [$ f8 f" B. ~5 W$ @
UARTPuts("upp_prog_dma_i\n",-2);
2 C- ]8 x" h _. z0 y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
}* g% b7 D# l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# B# R, [8 i9 v! I( L% `
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! \! ]( n4 l) Q; \1 J
1 K& Z2 \* r' e, U: l( a
UARTPuts("upp_prog_dma_i\n",-2);
, |, N9 t% P/ M' d
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 Q7 l; H: T8 U0 P% o
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" `2 f/ J, w* r ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 }) k9 N8 y6 S* [
+ n7 T7 v1 h* Y
/*等待UPP传输完毕*/
% U' ]5 S( q; ?4 s) X$ a! x
//i=0;
, F$ ?5 d. j" r+ c3 ?7 b3 w
//j=0;
. o% ^+ w" @- [: y, Y* L. e: D" J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ i/ [+ P5 p/ i) L
{
+ X" |0 f9 X( h; D, E! I( t( _
/* 测试UPP传输的同时操作普通DDR数据
4 C. a! @# m* ~+ Q
temp
=i;
/ Q" l/ ]& o( D" D% h R
i++;
& K: g1 L4 G* |* j+ n) [
if(i==1024)
8 C, `. H* k1 o0 q' I: u( T
{
3 v; R0 i# `& {! a& @
i=0;
' }( p) q& {+ P( ~( q) X. q- t) h3 h( r2 w
j++;
+ g, X; T" k/ n6 t- q% p
}
& ~* @ k. t9 |
*/
& [; _* [/ W, x. U2 C* M, {7 T
+ C* m$ l/ J: O7 [4 X$ f* a
asm(" nop");
. [3 b9 C* h2 x% {: s
# B; s1 c! c7 r0 t0 [' B+ v0 ~3 n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
T- h& _# o0 J5 p
}
0 X9 R d7 ~4 X- W
$ ?' t: F3 z! |: h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 y' u3 B. }! t C
//UARTprintf( "i=%d\n",i);
0 g! n6 s! ]) Q
//UARTprintf( "j=%d\n",j);
5 P/ H& E% h$ E: `* y U( d
UARTPuts("Data mismatch in buffers.\n",-2);
8 g3 j' X) L8 |
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 [( l E0 R$ X5 K: c; d& d
{
; Z' ^+ J8 i5 t0 k1 Q
for (i = 0; i<upp_frame_size; i++)
/ Z$ b8 [* ~6 j1 ` [& E ]
{
) b) c$ I3 a# j% N
if (upp_buffer_a
!= upp_buffer_b
)
$ Q' l8 S& `, N: g @+ ~3 F, N
{
" K& c( v* E# g
upp_error_count++;
) [5 W! ~; \8 T
}
) Y! ~% {; L, p" ^ T% f$ {' r
}
9 p( Y. C# I0 j. Y1 |
}
# s% j5 B e5 _) u
( `! a' m0 m& `
/* 报告通信结果*/
. m+ j% |9 h3 X
if(upp_error_count != 0)
; C; Y9 }6 H( v+ r
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' s6 o5 ` L! C
else
" U+ C( T# Z+ T6 [8 y( X4 k
UARTPuts("uPP transfers complete!\n",-2);
# s. J/ J O, H
1 M7 a: s+ F. D- [. l$ ~. R& _
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: J( d2 \' L1 z- z M; l) I
UARTGets(ch,2);
# d3 N4 l1 M+ j9 b* \& L
UARTPuts("\n", -2);
) D% Y1 K- a; k1 ^6 p$ S
7 p8 s: I' Z" s; o5 t1 I
if(ch[0] == 'y')
; Z& f9 C/ y4 N: X
{
' j3 ~; K; |* f% k- j8 q
/*打印全部读到的数据*/
: w# V5 [9 e5 Y7 o4 z
for(i=0; i<upp_frame_size; )
1 w! z$ \* O7 d) }6 q6 i
{
6 L3 J7 d7 Q& K- O& G9 _+ U
for(j=0; j<5; j++)
' h+ H, C2 g* x/ M) f1 ]# N
{
7 b8 ?8 w ?% P( `+ \
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( d) Q2 A @3 N" s. m$ J: [. R
i++;
5 n6 `+ ~' ~, }2 l* |" E
//if(i >= 4096)
4 `* `1 D0 h: w" h( B
// break;
6 n7 n R$ Z8 h9 b- d2 W4 [
6 }# ?7 ^5 a0 ]! M) |9 T
}
3 M8 Q; b/ w, h5 }6 x4 J
UARTPuts("\n",-2);
5 W2 y9 v; z& \! N/ x
}
! k( t9 w, u/ J; g3 h
}
8 }6 I( h4 [9 \8 ] \1 J- @
- p& j/ H! @8 K; C) c% H
}
- N. ~- B5 e& C* k/ x
! ~4 l4 O# F; g+ z% \6 E
0 f0 j4 k5 ], g4 g, p) {
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 H1 A; z! F$ d
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) Y, ~& h, z( x% C
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4