嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 y* G. D# h3 \
Void UPP_TASK(Void)
/ E, }: {2 e4 r6 M- z
{
3 g$ q7 a' s4 i" U9 T% M
4 k8 X# M% F7 r- u+ d d3 P
int i,j,k,target_int_count=2;
1 g! T( g- z; [* W
char ch[2];
( e, K; @2 Q6 ~3 N0 t
9 d) J. ~6 A' D8 q. n+ Z- X0 w
& c; A* e# m" I( P' y
$ X* L; H, _6 m: L7 O, M
upp_interrupt_count = 0;
9 h( x7 e# f0 W
upp_error_count = 0;
1 x h5 |( j) o
. ~' m1 {- Y u3 r3 [
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* A3 a! k' }) h" X5 F# g8 G N: h
// Initialize data buffers
N+ H( C7 Z+ P6 M) P9 @2 ^
for (i = 0; i < upp_frame_size; i++)
$ o6 w2 g" B4 `; k9 o \: c
{
. s# f5 D& j8 E u2 }& p; [" ]/ l
upp_buffer_b
=i;
* s% C# _ d c/ E$ t% k
upp_buffer_a
= 0xDEAD;
4 i8 T: _3 s. B0 |- t
}
* Z# c- b! X$ v: L! O
6 z. l) `+ ~0 r- p' x
//for(i=0;i<1024;i++)
, D5 D6 r# F& e. M# C
// temp
=0;
$ b7 y/ [' g2 G4 O
' o y; W6 K7 ?1 g
//UPPReset();
' R( S* u* P; w" ~1 D. ~
/*启动UPP DMA传输*/
6 u0 _* b# O: X+ S+ C: ?. \
UARTPuts("upp_prog_dma_i\n",-2);
5 {' C, p5 y; {: K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 O e4 J5 `6 }9 v, v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& c# o: z. H8 i; I: Z0 ]4 S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' S) Q) l; U6 L6 R7 p! l
* |+ B# m3 P3 G0 s5 Y4 B* F) _
UARTPuts("upp_prog_dma_i\n",-2);
. Y: u% E# @4 [; \
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, I% L- J4 T- s3 }: z3 s' q+ P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. W8 x- }6 ^: V g% f6 J2 ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 c& n, c8 F6 b; q* j J
: Y! h4 g. X3 L o
/*等待UPP传输完毕*/
! Y; _8 j9 O" L
//i=0;
' O& ~$ Q* ^7 y, Q6 S6 w
//j=0;
( ^$ T* u/ Q1 q: l1 e3 r, d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! D h" g4 h( Z4 E5 [/ H* V" T6 T9 O
{
) U) X1 J( T/ e
/* 测试UPP传输的同时操作普通DDR数据
2 W2 r- l) j3 o% k0 S
temp
=i;
9 k1 e( {8 o5 y& I
i++;
2 d5 u! C6 b0 N; ^: Z
if(i==1024)
0 \2 O9 p( ]2 H: D4 c
{
2 }7 ^) T2 m7 U
i=0;
/ N8 r6 O1 l8 e/ w R8 G
j++;
: p: z @+ `/ W, J. B* V: b3 Q
}
! b2 k2 d6 t) V
*/
: c, n' r% w$ k
8 V* D1 Y5 U" R3 o1 |& {
asm(" nop");
0 l6 I. Q0 X5 ]4 J! N
% o4 L( J' l7 z% V0 p
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( U) T$ a9 x* @0 w( e1 y# {
}
7 Q7 v) w b; _
0 D5 Q. `8 O5 C+ U! v. N3 }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 S- e; Q/ T% ?0 K5 A
//UARTprintf( "i=%d\n",i);
2 R5 ]6 x- Z# E, Z4 c3 D3 \
//UARTprintf( "j=%d\n",j);
& A. R) ~# y0 H K% c8 Y1 ]/ U8 i
UARTPuts("Data mismatch in buffers.\n",-2);
5 _/ @! N& p) w6 e( U3 z2 K
if (upp_interrupt_count == 2 && upp_error_count == 0)
: K" v3 E) I- c
{
0 R; [! x6 W% }, }; S. _/ ?
for (i = 0; i<upp_frame_size; i++)
7 j" h* t2 |0 B
{
! z$ f( O, j5 o! V0 P! \
if (upp_buffer_a
!= upp_buffer_b
)
% ?7 q6 Q1 T! @' f1 w7 q4 k
{
' g3 a( k8 T; U2 L+ ~( P( P4 G3 m
upp_error_count++;
. H0 t0 i1 [' Z- x! _& z( E( x
}
+ A4 w# e8 a1 |$ r" o
}
; k/ N. G ~/ M$ D) S: }- @2 Y
}
( l6 z% o% T1 u
- u- I- p( I) C: ?& Q/ Z
/* 报告通信结果*/
! p6 u: |: L& M6 a0 c! g
if(upp_error_count != 0)
4 U( O- Q' S! U9 O) d5 Y; Z8 p4 p% k
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 v8 f3 O' M" t/ }7 m! d8 @% [, |
else
) {# y' J/ }& J' `+ g7 K
UARTPuts("uPP transfers complete!\n",-2);
. ~) v! U: ?: Z2 @8 ~5 E. O
+ P! n$ ^# N( p0 a" F
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' n0 c9 D7 g. s( V g: {3 S( u
UARTGets(ch,2);
1 t4 m5 G8 Q9 n9 r
UARTPuts("\n", -2);
' B! a' J# @3 C% }( E
) d! M' R8 T5 E' v/ c/ T
if(ch[0] == 'y')
3 j& q$ A2 |" ^4 C/ O
{
" ]* b S1 a/ _3 ?2 A# B& \3 m
/*打印全部读到的数据*/
w, o6 @3 i, A2 G# |$ {. n
for(i=0; i<upp_frame_size; )
% T6 ^3 f3 @7 \# ]% w) U
{
8 N* c6 J5 |0 [) C
for(j=0; j<5; j++)
3 x/ ^! p% r' O) j& _7 L; B" M8 d4 H
{
8 i/ M3 ?( ^2 w' d+ c
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' h; Y: V- {2 e* G$ k% f
i++;
5 D) E% q' j7 i! ?4 o0 c+ ^- k
//if(i >= 4096)
2 Z$ \4 Y' g0 x' u& Y3 p
// break;
& f# T8 u( Q- c# m: Y) |5 e
. H- ^; d" X2 n! `8 P9 X
}
* F0 d) e% P5 ]# V
UARTPuts("\n",-2);
; I" s+ i0 P0 }3 W/ y1 f/ N
}
% b( t. ~, g9 h9 N* y
}
$ e: E0 A5 r. Z% q
/ q0 |0 x6 m3 R8 V
}
# ]8 I: p' e! ~0 G( s
2 i2 E' F+ m5 x) Y0 l! e5 t$ D
8 P5 b. l8 p: a$ T3 O3 @% d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) o: V c1 G0 ~1 m9 a, h& O. A; K
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ ?0 C1 t1 } a$ T9 b7 C
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4