嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ U7 z5 R% Y* J6 |0 E2 p
Void UPP_TASK(Void)
W5 D7 o% f" ^4 M$ Z
{
) }2 Y! p( Z) n3 ~; e; {
( E2 x' P( C& L1 R) X) C2 h g( @- K
int i,j,k,target_int_count=2;
; n5 b F1 `* {2 a ~
char ch[2];
- S" b. }; P7 f4 [1 d( H& s2 w
& R- d. E7 v$ l9 c D H* G
7 J) a0 p( ~2 H3 H8 \* P" `. |
9 L% R& I6 q% U8 z6 C9 x" A
upp_interrupt_count = 0;
, P S# g( i+ y4 t
upp_error_count = 0;
) t" m) C u( G/ l2 q6 w# c9 A8 D
* s6 J* d& S% X7 b) {1 e4 N" F7 b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& a7 _5 w% S% I# D/ D
// Initialize data buffers
- E# k( f( D" f
for (i = 0; i < upp_frame_size; i++)
6 P1 @& G8 q: p2 ]0 S. C* W8 x k+ |
{
5 G. G k, n3 k/ @
upp_buffer_b
=i;
# m; U" q; @6 H H* R
upp_buffer_a
= 0xDEAD;
- a# D6 E* k% H) p$ A" a' ^
}
$ y" { N" C1 J
5 y- s2 w C0 `4 J
//for(i=0;i<1024;i++)
9 t g5 |3 F/ @) b" N
// temp
=0;
5 o1 F& `2 F5 ?# C
+ R, v; x- ^' a1 T6 ^9 c
//UPPReset();
h+ Y, r K" w* I
/*启动UPP DMA传输*/
* ?# `/ S9 K: e# y9 T
UARTPuts("upp_prog_dma_i\n",-2);
0 C8 Z5 I. F, P3 l" r, J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# c: z! F l4 V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% `! _# w, t2 `- C: Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( W j! }( x' }" | u0 m
/ `5 j" t. i! T: @# w$ `, H8 H5 u
UARTPuts("upp_prog_dma_i\n",-2);
$ h: `# w5 D2 U- P3 L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 t) E/ B4 w* B2 i( F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 [4 k# A7 g% p. `; p1 w
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ h7 N! x; i: n
; `. n0 o1 Y! G0 e
/*等待UPP传输完毕*/
0 p$ [2 M& P3 }/ A
//i=0;
" O! N3 X3 A: @' L: d, |
//j=0;
1 W- A7 I0 S9 g3 T: h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 p( c" I; K1 u3 ^
{
9 I& A4 q9 X2 V' D( u, V
/* 测试UPP传输的同时操作普通DDR数据
j$ V; E# V( n6 w3 F
temp
=i;
" [, ?# R# C1 f8 @- I
i++;
& y0 C9 A$ @% T# L! O* h; ?* r! M
if(i==1024)
8 G8 ]3 ?1 y0 J3 l# b
{
9 t! I& F0 \# Y1 A8 U
i=0;
1 ^8 n0 c& i7 P
j++;
4 W7 ^* N) C2 D$ n
}
6 k& o+ m2 c+ z, u
*/
1 E6 s! Z( j; L5 O8 o
5 Y2 S$ _$ `: c8 K$ L# ], Z- d
asm(" nop");
0 i; v$ j2 @. O5 R1 v
, Y' r% L7 a* O" i/ K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, x1 M# k3 ^1 S. N& h8 j- _
}
7 l- t$ x3 I. J0 p% A, r3 ^# c
. u9 u. K7 U3 t; J3 E9 q I( f
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 i0 U. v( g* m& f# x6 j3 c7 B2 j) c
//UARTprintf( "i=%d\n",i);
* ~8 J) R6 |% }6 _2 Y" r
//UARTprintf( "j=%d\n",j);
- f! e9 G. Y- {3 X
UARTPuts("Data mismatch in buffers.\n",-2);
$ P) O! S+ R+ F
if (upp_interrupt_count == 2 && upp_error_count == 0)
% J7 l0 V. [* t' x
{
/ F# C2 p1 e0 a% j8 W! j
for (i = 0; i<upp_frame_size; i++)
/ R5 Z s' B. x: b
{
: N4 N9 X) w U! s6 w
if (upp_buffer_a
!= upp_buffer_b
)
5 z2 a. f& x) a9 o1 M8 c; t3 e. q
{
( W/ ^& {6 n* B& M
upp_error_count++;
; s. Z8 @. o4 {: W6 a0 d
}
$ X' D$ J/ j7 M* p6 E- r7 M+ M; a
}
% T) n- ?* O" O: ]
}
" }, ~. W {% n7 n; X+ H' w
P7 R' o0 r, [- I1 s7 k
/* 报告通信结果*/
% ?% I) r2 P, ?) ?$ ~
if(upp_error_count != 0)
; V, O+ r) e5 g, V
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 a/ v$ A' k2 t }
else
+ m. `7 c6 X. {
UARTPuts("uPP transfers complete!\n",-2);
! X; Z) [3 S1 u2 a1 z% D1 N8 S
% Z' P0 H2 U; z G/ r+ a9 P) ~( A. \3 W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! k. Q; w! b% h$ J- a
UARTGets(ch,2);
+ w. i# A/ Y& u0 |3 y
UARTPuts("\n", -2);
- w- A: h* d8 n+ O" Q
3 n+ C" M4 P! E7 O' J' ^3 p
if(ch[0] == 'y')
# K' R- ^2 I |% u Q
{
, K' C+ g1 x" m+ y. ` a; k; K- @
/*打印全部读到的数据*/
$ P) r! ?8 M8 y# r
for(i=0; i<upp_frame_size; )
* z `$ B( x/ l; V9 @6 `$ X
{
' ~" j/ P; C$ @. Z
for(j=0; j<5; j++)
- k; N6 v- l s! d% k `' w: k
{
1 U: L3 i! O" v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 x% i P* ]9 G) ^
i++;
$ E8 n5 s2 R9 W- g3 `8 W" y4 w& d
//if(i >= 4096)
& k* W+ R% O S0 N; A
// break;
% i. _9 Y4 t8 o: |. J
9 ^. o, W6 m9 ], V& O2 K* G( \
}
1 i& K' y4 M) Y! R' I
UARTPuts("\n",-2);
4 K7 g+ g0 b# p; r
}
$ q' ]( P! g Y& f
}
1 `4 g$ |7 Z/ z/ G' h# Q. U9 V/ X) o
3 z f- p+ x7 d) }) a' s
}
" q6 |; h+ A$ S/ a5 K7 @6 w5 E
; E5 _- t" e2 h3 s4 r' ~
1 D x- x0 x% _( N7 x |2 U( h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 k Z2 U6 c6 Z* S8 e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ J/ c9 t+ V s2 ]* d) q" i) ^
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4