嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 }6 Q3 P3 F1 h2 h; |
Void UPP_TASK(Void)
3 ?% `' @1 D b% C
{
. T( i( t3 R6 v: L+ y' S4 N
- f( b% j) c( {3 W6 \
int i,j,k,target_int_count=2;
: L8 R1 b: ] m
char ch[2];
2 h. F# b2 g4 Y l6 m; Q( @
0 S8 W& g1 R8 j/ t3 |' g
. W& y; m# N; C
0 m! v) @+ x, L$ @: e; @% y
upp_interrupt_count = 0;
2 W; i T1 p; |9 ]
upp_error_count = 0;
; e* V9 J% o4 c& O Z M7 v
% ?3 ]9 X7 b: D p v, _/ U5 \! b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 {1 M$ ?) }" g7 u! j! \6 i
// Initialize data buffers
+ k, V5 ?6 V! o* l3 p: h/ N3 E
for (i = 0; i < upp_frame_size; i++)
, S4 U: D3 ]4 X
{
+ C8 w, C) y% d8 m; ?: N. v8 H/ u
upp_buffer_b
=i;
/ f' X6 N1 }8 f. r
upp_buffer_a
= 0xDEAD;
) K- \" I! z+ ~& c7 z& Q
}
+ N- O5 t) _( |2 c7 ~7 r' l' P$ Z# T
; Z% K/ b+ @' V$ F* n* ]
//for(i=0;i<1024;i++)
/ C% s( b* h! a3 b( l9 L F
// temp
=0;
& c/ z7 Z2 }+ M1 t6 f# C) B
1 w! E, Q* q, D' D& X
//UPPReset();
9 z4 l) j5 [* j+ }( v$ ~! x, O0 ~
/*启动UPP DMA传输*/
# m {! a5 _1 N3 }
UARTPuts("upp_prog_dma_i\n",-2);
+ }2 W- ~& U0 ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 ^1 Z# a% ]3 X* v7 o+ u6 w0 j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 X, y- ~! [) I1 B% g- H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 s. L# }, |% p6 B) s5 p5 n. V- ~2 [
3 i8 z( v# b5 r" i+ |0 l. E$ h. m4 U
UARTPuts("upp_prog_dma_i\n",-2);
* X3 \& e& X0 E& K" |+ X0 b6 A& P7 r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! j# k' ]" |! t8 v7 ]3 Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: u9 |% I' s4 L/ x) x- u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ x& j" |- O) l+ M$ _( D
+ n3 t; |# ?2 q7 v; B+ U- s
/*等待UPP传输完毕*/
; g# s0 S& J* ?' b5 ~. a
//i=0;
0 _- Y; r/ d0 e9 Y. q, n/ _* w
//j=0;
' t- T$ I5 Q1 J/ _) U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) M% M) E, i' g0 a0 w
{
7 ~5 j& T' G' O
/* 测试UPP传输的同时操作普通DDR数据
; s/ s; X: p9 r3 x4 q R- _
temp
=i;
# C# m7 G# j; p* p6 ~, a; h
i++;
& z/ o) ^: }; N; C; z
if(i==1024)
/ R' {% q# J8 @: f0 _/ Y _
{
; ~3 m) g0 w5 z ^
i=0;
4 J% `1 \5 x9 t
j++;
% E" I6 y: h1 b/ a8 [: p$ [
}
; d( ]3 n# S7 @. r
*/
* S; v Z( P# ?, T" a
8 n7 }7 W; t4 T5 r3 x
asm(" nop");
& M# S$ }2 q3 ~ X
/ u, @9 q/ x5 O0 v; I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 B! R. \5 v5 O6 r1 n! ]" _
}
; \5 Y' x1 I( z% J5 N9 H
* g8 e0 R$ t8 I' T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& H4 ~9 M: ^/ e: O, N4 [
//UARTprintf( "i=%d\n",i);
3 g- S! m, `3 @6 H9 f, t
//UARTprintf( "j=%d\n",j);
* k e0 n' u, M( m4 _3 c3 [7 T" k
UARTPuts("Data mismatch in buffers.\n",-2);
5 c& B7 `, p, B# t3 E0 K9 ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
; N2 @5 x# }0 n7 [9 t
{
/ w" x" ^" \' b3 c
for (i = 0; i<upp_frame_size; i++)
1 u/ y- g- h. a7 ^
{
+ v- @1 k* ~" W- o. u4 V5 I
if (upp_buffer_a
!= upp_buffer_b
)
3 P& ]+ s# e. e
{
0 J) k. M: K8 Z/ }$ }3 t0 r
upp_error_count++;
8 ~* S/ e/ h& e" {, Z
}
* F% [ x4 }# X( l( S/ D
}
: T; d" J, h6 H* y/ W2 P& S
}
7 u! x! N1 ]! ^' G
# U/ t% _. H0 e+ E
/* 报告通信结果*/
$ I6 A P0 Z5 \: Z6 j+ B- l
if(upp_error_count != 0)
7 v- R8 N4 t8 [* I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 t7 r7 L9 s! b, `
else
3 }" X0 b7 e1 ^* G7 k
UARTPuts("uPP transfers complete!\n",-2);
1 E. A% w2 k/ w& f7 q- o
. B1 q$ N8 P/ {: `+ S7 J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 P6 h, _% j+ ]5 B3 R; G7 }2 W
UARTGets(ch,2);
* i9 O6 ^# \) a/ b* N/ x9 P- p
UARTPuts("\n", -2);
1 N! x& {0 `% l4 g
+ b$ C. m& H( j4 t& @, A) j
if(ch[0] == 'y')
/ s# E* k, p! i2 j7 Q& _/ |: \! E
{
: O% S) `, h' @7 q2 m+ Z
/*打印全部读到的数据*/
5 l+ E6 f7 R; g& @
for(i=0; i<upp_frame_size; )
8 l$ T/ P3 p+ P( c8 ^
{
0 g! C0 @8 O, B& L
for(j=0; j<5; j++)
0 E5 I9 l: }- l! q0 O$ j& ^
{
. Y0 V; a( F1 L
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 u8 o- Q0 ?7 ~/ T9 w9 ~( ?- N
i++;
7 o+ I( V% K0 m5 T
//if(i >= 4096)
& ]- J. k- K3 @. x: _5 r
// break;
: B* P6 ^( E) _' p
$ R2 l, I2 @' f/ w$ B* I3 \
}
! Y9 Z# s; C: y6 E
UARTPuts("\n",-2);
; k0 g {/ q! E* w! L2 {0 `0 T
}
! P8 A" R# u. J: d! l
}
p" s3 N4 T3 K; m7 r! [$ s' p
8 T* A: \% p- |, Z
}
) x2 \5 P0 x X3 X9 y2 H* F
, e0 r1 t: o O B9 }- ?% o
0 `# P0 G x7 p" g v% t8 n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 A/ @! t; h0 a; m' Y4 z" ]: H2 @
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 I. y- b' r2 w
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4