嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# h; j$ f4 i5 y" g( O- I& G
Void UPP_TASK(Void)
" x7 ]" @. N, J8 w
{
$ X) }- V" {, r* o( p0 [1 m
8 T! p8 K( W7 X- _' I/ l2 h6 a
int i,j,k,target_int_count=2;
x9 k' ^7 T, n8 {. A9 v+ F* {
char ch[2];
) g9 Z9 Q) ?1 R- U+ R- U
0 R) C! |, E% ^3 q0 k% k
7 ^* z$ X9 i( K, k7 ^2 V
0 g& \6 c5 A( ?
upp_interrupt_count = 0;
. w' R, f! w6 C6 F
upp_error_count = 0;
3 ^8 v7 @" d' j$ I. x* g' y
3 F; N* s) Z0 {8 W; k& i2 V/ Q, F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, X1 D+ a; h1 r) k& R
// Initialize data buffers
+ {- ]! a: j) K* O, S' _
for (i = 0; i < upp_frame_size; i++)
" [7 w+ `* c# p' `& r
{
$ q* q: i, W- o; E+ q) G; H
upp_buffer_b
=i;
% u. x8 L% }, d& x% I
upp_buffer_a
= 0xDEAD;
0 O2 R/ n8 @* v! _9 a! @6 L
}
- a3 U# I2 @( U0 H" }
; [9 A9 Y8 V' P
//for(i=0;i<1024;i++)
/ p. N7 l% i6 P. l* h4 i
// temp
=0;
) D2 U+ X$ O; P+ P( R, {% a3 Z2 [
0 K+ ^. I: j/ \2 g4 F3 z
//UPPReset();
M- o3 Y! D6 i, z- f
/*启动UPP DMA传输*/
$ R% b' V# L( k4 F- i1 @% m/ S
UARTPuts("upp_prog_dma_i\n",-2);
( P% }( J3 ?% N; r
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# r* H' Z# P0 g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 @4 f6 z$ P# h: T( m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 ^# r7 V8 ~- u0 C0 Z/ G$ a# D' I' _
) V( G* U% v8 j* A/ `
UARTPuts("upp_prog_dma_i\n",-2);
. o* @4 b/ u& s+ X- d
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! J0 n+ d# g' T1 d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. @& t3 l: K* `0 c! A* e. f( c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: a& i) x+ c* M
9 _6 y2 [4 {' C& h( p
/*等待UPP传输完毕*/
( w: j6 J6 }( G" ~; W
//i=0;
) E; f) J9 O. ~3 w; o0 m0 R5 k9 B3 l
//j=0;
" D, K0 H- T. ]* u1 Q5 P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. L1 T' s5 l/ T- j8 B+ P# A
{
/ }6 y# X% j/ m
/* 测试UPP传输的同时操作普通DDR数据
; s$ ?8 [; w4 H8 v* r4 B1 t& |
temp
=i;
! q1 c( [ y3 q( }) W
i++;
2 X, z+ T$ m! l/ E
if(i==1024)
5 O. v7 j& E$ ^' v. \
{
6 L& r( h* B- @7 x1 s# e9 L
i=0;
/ k/ a( D4 _$ K: g9 `7 n0 W, J/ w
j++;
5 k0 C v5 W/ T" X
}
! m* U, x6 Z; C
*/
( w2 e; R5 w3 B/ U5 b. ?: k
& R; s5 Z$ T. V: D' X$ L1 Q1 l
asm(" nop");
$ S5 p5 N7 Y8 x3 }: ~6 h
0 J* V' e8 Z v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; w* g9 `# n& x- f& ^, A
}
" X9 w+ e. j6 t3 t6 e
; r w1 h2 h+ }% Q" n0 ^3 e
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 f! C- Y; t( I
//UARTprintf( "i=%d\n",i);
$ `% z" ]7 @9 x
//UARTprintf( "j=%d\n",j);
% s L: P1 r, ~- S$ a5 t
UARTPuts("Data mismatch in buffers.\n",-2);
Q) Y, t' A' ?/ V1 o7 x/ I7 `- C
if (upp_interrupt_count == 2 && upp_error_count == 0)
" H# k4 g6 k) z( [/ M+ p/ R
{
7 c7 C; Y- `- }+ d6 K N8 c
for (i = 0; i<upp_frame_size; i++)
; l: {7 Z, B% f" z# Z7 N! t1 F) P
{
. s" @) ~& A; P
if (upp_buffer_a
!= upp_buffer_b
)
8 |% C5 f' s* E5 e, w
{
" f5 o% @. S' \4 G9 ^3 [* K! ^ s+ k# u
upp_error_count++;
$ {/ {2 |# E) x! |
}
% V( v) J; s/ P0 o: E( G1 N- O8 K
}
9 S J" c- A6 ]
}
. t3 g8 Z& W' Y, A
+ Z. y5 s' K- R& Y) n! G
/* 报告通信结果*/
9 s+ n7 ~! x9 v* N
if(upp_error_count != 0)
$ p3 _. U% H+ m$ F# X7 c6 k
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 j8 f1 i9 @8 z. @( o: R. l1 W% y' R
else
# X+ c# @% p$ y
UARTPuts("uPP transfers complete!\n",-2);
* d) [' N+ Q* S: i" Q5 A$ ~
' V5 m* v ?4 m; R% d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: U* N. j q# H" g" c" k2 x
UARTGets(ch,2);
3 x9 v3 K& V4 @$ p1 \8 Y% I) W S
UARTPuts("\n", -2);
5 U4 x3 I# ~2 d) M' H4 F. j/ O7 y5 G
& C' k" {- p2 `5 |0 x- Q( q
if(ch[0] == 'y')
- T0 ?% @5 j4 M m
{
) h7 K' a0 h: T
/*打印全部读到的数据*/
- h: s |( l: Q/ Y
for(i=0; i<upp_frame_size; )
: T7 l: B; ?6 u+ |' o
{
0 x. K: h9 G% z: \2 y2 T v1 _
for(j=0; j<5; j++)
2 V/ V# M3 l6 M' Y$ c8 `+ [5 j
{
5 M7 _, j4 Y' n) q5 v* W t& d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 C3 |) l5 N, V! y; [4 l" C
i++;
$ D$ a' T- `6 W& G: R! ? V
//if(i >= 4096)
1 t3 V2 y( O! Q; Q) q. g4 P
// break;
Q, r# i- B6 u5 i, u5 I
) [& [" V0 O0 Z2 }! u' v. c! k% C2 F
}
7 h' i, L0 _2 |5 e
UARTPuts("\n",-2);
- A2 C4 n$ S: k' e
}
5 J& L9 w6 t5 k1 d, X0 v
}
3 M5 y. @# D* B; Z
9 I; q! M- K7 f, o. U5 ]
}
$ K$ @* a# a# ]0 P
; ?. r. W1 d9 ~ z
1 _! N8 G; c( ~- j8 d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: q1 w) a5 C( n2 ], o/ F
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) N6 J) w( S. T) f
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4