嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ R* s: s5 L' Y/ }
Void UPP_TASK(Void)
) F% ?3 r: ]5 [/ a% h' v
{
0 I3 P1 x% w- v6 O
/ p( V% e$ W3 Q$ {* D+ T. v
int i,j,k,target_int_count=2;
' `0 L; W: r' I. D' I7 c# S8 p
char ch[2];
$ V: E* O( g6 m& D
# n- O8 D3 r1 C6 t! c
# T4 _; K9 Z/ e) F" n
: b9 o% q# P& k! t) Y+ C4 K
upp_interrupt_count = 0;
0 S; D' e8 L2 s0 m
upp_error_count = 0;
2 i( S" X( J. b3 x
) J% q' \! G7 K
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! n- O4 O6 ?: K, j
// Initialize data buffers
+ j& G) q$ }, V- Z
for (i = 0; i < upp_frame_size; i++)
- e% p, ^+ [! U- o% V
{
6 R6 M7 m# z2 y4 D& g
upp_buffer_b
=i;
% e4 p G, y* N
upp_buffer_a
= 0xDEAD;
) ]8 o% x$ @% r' L
}
. M. Y0 V g! ]8 \5 Y2 C. q
+ F$ ]+ x% t4 i, j) V5 g3 y. G% Y
//for(i=0;i<1024;i++)
. D5 X$ {5 W; q0 K
// temp
=0;
: j0 r, P, N, ~2 Z1 B
8 Q# z2 w) }" |/ w0 \6 y; T# Q# ]4 E
//UPPReset();
5 H* s+ i/ I( q
/*启动UPP DMA传输*/
5 y+ f+ F7 c9 k, u
UARTPuts("upp_prog_dma_i\n",-2);
* P' F- o7 n% o
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* r* u( S0 c' @( R' M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' b9 I9 V1 g/ x+ Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( y# Q$ `* Y8 v$ t' H
9 x+ ~ L# r _+ l+ y; s- f
UARTPuts("upp_prog_dma_i\n",-2);
1 I/ S' U: c; [; }9 U+ x4 H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 ^* D- v3 B0 {+ E K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! u4 D7 R5 K9 I, c, M2 h* s0 }& ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ ]6 W! v9 V1 ?# V1 z
, Q! ~- v$ i. G: H" q" j+ `! a+ i7 p
/*等待UPP传输完毕*/
0 h0 K5 w6 n# Q( C+ { r
//i=0;
a/ k* t$ c- v, h
//j=0;
; {; f7 j" ?9 w2 y! C) ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" z4 b8 J# Y; P ^' d4 Q. N
{
" N4 d% `8 g$ z
/* 测试UPP传输的同时操作普通DDR数据
/ z6 h/ H7 q' o$ p% ~ i% v) J7 d
temp
=i;
& M+ v6 K4 ?4 c, J* v! l) F) _- m
i++;
& |, q8 Y9 t! a4 K
if(i==1024)
4 M, i" [; B! y+ `; Y4 v1 M$ y
{
& C- j% L2 Z' x0 w
i=0;
+ J% N4 [( r% R
j++;
, d$ y( y& J9 e
}
6 J( ~2 L5 b/ K
*/
4 L' T: c$ n7 J# c) `
+ R6 {& l0 V% C' \6 Z
asm(" nop");
, U' @# j, h- b
: a' _5 Y) B" A4 P: x0 t! C" c6 q' Y0 u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 X9 k2 |6 t* r4 c) {
}
; m" e8 B7 h6 O) R! O) N; A# `! C
) x) y d7 Y/ A: [& Z; \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& N( r, a2 `# Y
//UARTprintf( "i=%d\n",i);
/ q2 ]$ q7 d3 C! o0 X# G4 S
//UARTprintf( "j=%d\n",j);
$ {7 Z. }6 q9 B
UARTPuts("Data mismatch in buffers.\n",-2);
) Q. w Q; @# f6 N5 ^& D \$ @
if (upp_interrupt_count == 2 && upp_error_count == 0)
' u1 G! j" N, j7 M# ~
{
7 ~; Z) Q& I5 e# P$ q8 |( K
for (i = 0; i<upp_frame_size; i++)
4 C5 L: f* s8 h/ ?' w
{
+ Z% n! C; \3 c9 X& [) n7 x
if (upp_buffer_a
!= upp_buffer_b
)
7 j0 z9 S# V0 f
{
6 }* n. ^5 {( |8 E
upp_error_count++;
8 C& C' k$ i, [* J( p0 w8 u/ {
}
7 x* J' w% m; z0 ~. H
}
& i- U! F; A* c2 E6 }1 H, Z; i9 l0 L
}
, ]" g' R6 g7 ~/ ?$ O
' Y: \2 p" X: `# s' K
/* 报告通信结果*/
9 U& i/ O( S# {' U4 r* G" q# Z
if(upp_error_count != 0)
- r! p3 K# U7 |' Q& {# m' m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. g) R& j4 @9 M8 d7 n
else
- h8 G0 t; j( l7 j7 D; [9 M: O
UARTPuts("uPP transfers complete!\n",-2);
6 \8 [8 f7 _3 N h
1 u+ Q( ~; C C0 L1 q {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# Y/ g9 k/ e, \6 ]* z2 I$ A$ z
UARTGets(ch,2);
4 L, J4 _6 b) ^, ]& i
UARTPuts("\n", -2);
4 o2 ]" H" p, I0 ^- p
) N h3 N: ^% K5 k+ J" J( M8 z
if(ch[0] == 'y')
0 T6 Y u7 ^9 ?- r, y
{
* V( L N" e \7 Z; J% S8 U
/*打印全部读到的数据*/
- @. @% v# T- S; t) u$ ~6 b
for(i=0; i<upp_frame_size; )
) O5 {0 C/ R6 x* R0 @, B
{
, i& w8 K1 d! K" _
for(j=0; j<5; j++)
, J& K% r" B, I$ ]" l
{
5 e+ b" o$ d- G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- I6 Y/ G. j! z8 d+ X# t8 M2 L
i++;
$ v2 x1 X- F6 H7 E
//if(i >= 4096)
3 G2 Y& a7 c1 c6 a
// break;
- o' k) ^. ]. J& H' V7 s& n$ c/ ]
6 z! W/ J, }' J' n% o
}
- \: e+ q9 Q: a' P
UARTPuts("\n",-2);
4 e1 D5 [% D% o# M
}
, G+ N0 l8 a* T" h
}
; D2 ?/ S% v' t6 D' m
+ i% T# u N) {! i& }
}
* n+ E" C8 Y6 G/ W
. e8 e0 ]. F3 O7 R
7 `; P! s# n: u& c0 B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 {* H6 ]0 O1 ?9 N; R) [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ b8 s# h7 p- C+ O
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4