嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) s5 O( K5 |7 j6 [" t- ~ E
Void UPP_TASK(Void)
& S G/ a. o7 d$ n
{
$ A8 c- R+ j8 D
7 z3 `4 E+ S# ?1 U' r8 S+ Q
int i,j,k,target_int_count=2;
* I! U) }$ N& r3 v3 d# P: |
char ch[2];
0 O2 A3 y* h. }1 @" B( H! i
) D `$ _ w: g6 N [, G1 _
" ?* _$ i6 R! V! J5 V" u' H
' I8 _! m( N/ q9 }0 u3 H
upp_interrupt_count = 0;
% x: S8 ?; I" o
upp_error_count = 0;
; D9 O; n( q. `+ L3 ^
$ k8 [, y0 U/ { L$ y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. F$ E! R% {" N1 {
// Initialize data buffers
, f1 U' B* p( C+ e; K6 c# H4 ~
for (i = 0; i < upp_frame_size; i++)
) A- B2 S: U# i$ w1 D( G" J
{
- i5 ?- L/ d5 T, j5 S
upp_buffer_b
=i;
) I n2 i' y- v8 Z$ j, B
upp_buffer_a
= 0xDEAD;
3 j `: g# o4 g) M: S( a
}
2 d0 \, b9 w+ b/ A' \& a! ]# W. i
6 h4 o' y6 |( C# q
//for(i=0;i<1024;i++)
* X( \& m/ H3 H. R- P! v
// temp
=0;
2 [" i) K7 @+ N4 m
% Z5 V* a M" ~' N' t
//UPPReset();
( z4 J& p5 t& J" L, }' b2 z
/*启动UPP DMA传输*/
3 c3 Y6 f0 S/ `9 s5 s, ~( k
UARTPuts("upp_prog_dma_i\n",-2);
; p& X* T( |0 a" M7 y) Z( x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 v! r. n8 A5 C8 X& K2 `, d5 b& p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 f( U& V1 V6 e+ S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. x7 B* \% i& q2 G1 q9 V
, G6 ~ |& Z3 ^( p" t( b9 x- _, `
UARTPuts("upp_prog_dma_i\n",-2);
; ]2 S7 z8 u0 [5 F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 p( w* E6 V+ h- o' u9 B2 V- U( x
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 y3 Y2 R6 S% }7 S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ S/ p* a% C( J( ~' w" J) ^
" {2 b, e5 G, y+ p
/*等待UPP传输完毕*/
3 E' i7 I2 w9 M) w$ C4 v8 `! d7 ^
//i=0;
3 h, R; z, {$ g) x% s- \
//j=0;
$ w1 C* N" ]# k1 g! o4 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% b0 n! p y" B6 q2 q' k: X" W6 c8 g
{
7 y7 y6 }( Z7 Q* Y
/* 测试UPP传输的同时操作普通DDR数据
8 I& u! f* a' ~/ S( O
temp
=i;
) a) C" z+ f" T0 Z1 w v! \8 V
i++;
' c3 b2 ^* D. h }- a, a8 b
if(i==1024)
# j4 @( m1 Z, x* _5 [' t" H7 r
{
3 `0 G8 s3 y- g) ?3 \
i=0;
. l- {% Q' N/ l' `- }
j++;
4 n. @/ B2 o( [/ A, K
}
6 L* o. u' _3 {
*/
; f* X3 J. s7 Y3 |2 ~' j w) L; p# e
- T0 k% R( o; a8 J8 k
asm(" nop");
. e- z6 U2 t' z: s% v) L. E# G7 U
+ n3 ~& ^# |0 E% Y. p% i- B; K: F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 n- E) y& ?( R E* F- R
}
. a+ t( T! H% K% _/ Y/ z, F
) u, X, r8 h' t' i7 y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# b" l' r. L( e" f: t& m- f
//UARTprintf( "i=%d\n",i);
$ W& P! c- N) B: }' U( ~5 _& q
//UARTprintf( "j=%d\n",j);
+ `( O# Y, m/ |1 c
UARTPuts("Data mismatch in buffers.\n",-2);
3 t; l4 h9 M5 n& D. V: H
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 n7 u; ?8 l$ J5 i
{
/ p& _3 e9 J- Y% C" a2 E- `
for (i = 0; i<upp_frame_size; i++)
; t/ }, v/ }7 F
{
5 [4 ]( m/ _+ {+ {+ N5 A6 p1 h
if (upp_buffer_a
!= upp_buffer_b
)
/ O5 d, {5 }3 t f- @
{
/ ?6 y: {: R* g3 ?* C
upp_error_count++;
1 b7 S: `5 w0 r5 l
}
- T( Z. o2 ]" M* C
}
2 q, N& I$ I3 _4 D: s/ j; K
}
" F$ U; f5 f5 c
9 Y: f( \$ P" w4 Z8 y% c
/* 报告通信结果*/
Q9 f+ N& ?, X
if(upp_error_count != 0)
# C Y$ P+ ~/ R; {& ^/ C
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* ^- z. ^2 B( E* T2 V' ?
else
+ p& u# M" A n* W1 u0 p
UARTPuts("uPP transfers complete!\n",-2);
! Z+ ]$ P v# f7 o
5 G3 ?1 ^& E# [( Q& m1 J" D6 B# b8 i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! ^' ?. q# V) F2 s' ^
UARTGets(ch,2);
! N' l8 a& G z/ n+ D1 O1 z
UARTPuts("\n", -2);
/ g( ]( X! _8 L1 Y0 @9 U- s
# A- e5 ]: }6 h. z. k
if(ch[0] == 'y')
2 g$ e$ w6 [# D1 ]/ P! ~: }5 h+ @
{
5 ~$ {9 e I4 ^2 d9 d! R
/*打印全部读到的数据*/
$ ?5 f! j" k4 K9 @1 V: z+ X- y
for(i=0; i<upp_frame_size; )
# l: G2 A: L* C1 ` Y
{
- b$ _" e. A7 Y5 Q t
for(j=0; j<5; j++)
. @! \8 K/ \- w! _ ~
{
) a1 x% U2 Q+ g! F+ @! f4 L& c
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 Y6 Y+ C! [7 M4 [. [5 _
i++;
7 z+ G. B5 ]) s+ [( q( E/ B
//if(i >= 4096)
5 Z4 z" z* ]- n2 w8 }& q
// break;
2 F7 H' C, H9 I+ S# F! j
" x& X3 C" w+ h+ P0 G
}
9 H' b0 ~4 u3 \4 ~+ @
UARTPuts("\n",-2);
& s+ [* t# \& Z$ [. I) e. \+ S& W
}
: v# F. G( s! O4 ?. x% E! d( ~
}
+ L3 E, v" f8 W
! M3 R/ w( U: a$ c0 y' ^* P- r2 K5 O
}
0 Y2 @- v5 `0 O3 o# s2 e
0 d+ f( W1 c, z: R; x, G
' R. O4 M8 w* Y$ N+ W( l! x* |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- G8 H$ K! b, k1 e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 B& T5 M C5 b* S3 Q
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4