嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, d: D, U: E0 P6 X& k! C
Void UPP_TASK(Void)
; [& z( z. q& B0 r* Y# E
{
% R ?4 [# i0 L1 c% P
& R2 g5 n0 M, M* J5 O' F
int i,j,k,target_int_count=2;
+ x- a1 X3 N) h5 r
char ch[2];
& }& b4 A. i+ d! a9 k
h0 w& L# v* f
4 @( C/ d |+ J j& v
U3 ~0 M( |% Y4 x0 q. D- ?
upp_interrupt_count = 0;
% c' i: j0 D. H8 n! i1 p: @
upp_error_count = 0;
8 W0 B: K- Q. R0 l7 T- _3 J
1 t: [1 b% T# e0 L4 o5 w% u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 U& X1 ~( Q. r
// Initialize data buffers
# C- K% b0 H+ [1 e
for (i = 0; i < upp_frame_size; i++)
! v& R, P0 @5 m( t9 ]- p# n' s' ^
{
5 a' c( e% m: C% k
upp_buffer_b
=i;
9 A7 f* ^+ y3 F% d( W* O; T! `
upp_buffer_a
= 0xDEAD;
/ A, [2 _, }# F6 R; ]& k
}
' R8 Y* X4 A: i( O' d
. u( Z8 ^" c$ W1 i7 O; o
//for(i=0;i<1024;i++)
2 W( o# d" {1 c8 t$ n
// temp
=0;
& T; \- q/ d K
# M1 A! ]5 E: D5 }) ?5 ?% I& T
//UPPReset();
5 H/ V5 J" O; `3 C
/*启动UPP DMA传输*/
4 V+ D' ^" g; n+ I* S, U
UARTPuts("upp_prog_dma_i\n",-2);
5 ?/ T& y$ Z! j: |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& D/ {7 M9 z5 ]0 I1 `! ?! k9 Z& M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 ], x5 c% J9 w6 G( a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 n: Z$ I% L, K; V3 v O
: w. z. |) g9 ~- {2 V
UARTPuts("upp_prog_dma_i\n",-2);
$ B' \! |/ b* `4 h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: v- I" k' I" p: X0 ~/ H2 ` _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: w/ g) r# ^: F7 O3 G1 ~$ ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 b3 I# J7 I8 c9 s7 E5 C
# ]0 f5 c3 G5 u- x0 \; g/ C) P
/*等待UPP传输完毕*/
) }5 r3 w3 C4 A. f; v7 o @
//i=0;
9 o2 Q0 m9 J0 |& g- N
//j=0;
$ }- i! y+ L9 x" A: x+ Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* \1 a b/ Q* j* U- y/ p" y+ P* E5 }
{
" C% M. R4 I2 T! f
/* 测试UPP传输的同时操作普通DDR数据
+ |. N+ Y% q0 U2 J; Y' @- a
temp
=i;
0 X, E& C2 {9 c8 g9 u9 Q4 b6 ~4 v0 U
i++;
G. f4 a4 R3 @
if(i==1024)
5 r8 _. L! X5 @1 g5 ?' A9 f
{
/ L) P' h* W* R$ ]+ L6 M
i=0;
% h; f4 h& j1 ^* D; n/ k
j++;
' V s- h; G2 `9 V
}
: ]' T% ^ z2 Y) n% x3 R# W) ~
*/
6 _6 t: E n+ p1 p3 m
1 C9 }* u. ?1 K+ k7 |7 D
asm(" nop");
( p) s7 N4 u+ U3 u- l+ Y3 F h& z8 U9 P
+ P$ ~% Q2 z4 s/ |9 ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% m3 j! C, c5 C3 B& l3 l8 {1 k
}
$ G) T& G7 Q! E% X* }8 d8 b2 |5 Q
t+ a6 [4 @9 L! ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" r s1 o6 M8 i, z
//UARTprintf( "i=%d\n",i);
- s/ G7 j! e" v' S1 ?5 t0 Z
//UARTprintf( "j=%d\n",j);
- i& |5 j7 _* m. n9 Y& M8 U2 W: V
UARTPuts("Data mismatch in buffers.\n",-2);
: P9 N5 g0 m( R0 W
if (upp_interrupt_count == 2 && upp_error_count == 0)
' u7 u, T5 K$ F9 ?/ r/ n
{
4 @; j1 X2 A5 B
for (i = 0; i<upp_frame_size; i++)
& O1 `! k; ~, h5 i1 X7 d
{
8 a) N$ W7 ^3 |3 A* W$ ?% [
if (upp_buffer_a
!= upp_buffer_b
)
7 B0 U* E6 S% h) ^1 |. X5 G+ s
{
9 c3 r0 E& ], u( v
upp_error_count++;
: L0 B1 \$ e6 s4 |! j
}
5 C9 |! d6 e X6 b% _1 U
}
- `6 z, v, m$ z4 Y7 q. i
}
. ?$ T0 _, f+ A# v: e
, _& V* n+ u& M! B
/* 报告通信结果*/
9 S% a7 b$ A4 q( l. C: n
if(upp_error_count != 0)
- i6 F; M' h3 C' u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( ~/ a K. @* u& g9 K; p4 U( {4 Q: ]
else
) b7 b3 w: L+ O+ D3 m* W- _
UARTPuts("uPP transfers complete!\n",-2);
) m" w# ]& N/ l) J0 w5 D
6 U) M( r& m7 e% }
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 B9 B% p$ |* P6 Q1 u/ `4 D: o* f
UARTGets(ch,2);
. t2 x) }1 ?8 p5 p" R
UARTPuts("\n", -2);
2 _, F/ S/ D7 l s ~) G4 Y6 R5 ]
( m# c8 t% [' c8 T
if(ch[0] == 'y')
& ]3 k% E6 N0 P$ v7 k
{
: G, ^5 F+ ]4 ~, F! J
/*打印全部读到的数据*/
' m4 ~. A. e8 _5 e
for(i=0; i<upp_frame_size; )
, ~0 o8 }4 y% o- N" U0 O7 e
{
8 v# q; A1 z6 b8 u) W. e
for(j=0; j<5; j++)
( d# i. B7 w/ ]0 ^0 d G
{
3 }0 h0 K/ A1 b2 ?9 a; G( O# R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, W3 v" t: h0 [. D6 O
i++;
% _6 ?; p3 ~+ h/ u9 j! j
//if(i >= 4096)
# X o6 _. f) f% q% `
// break;
/ w* v: H" Z9 D1 j7 w2 U
, S6 {# _8 a" i
}
% w l! ~) J) a. s& N
UARTPuts("\n",-2);
2 P0 `5 V+ t6 P4 `
}
b8 z: j" W, B1 k3 O) k
}
' ~& M$ E3 ?' U- Q" h% ~
$ u$ J) ^5 e3 @) A& z
}
5 w! H9 I$ Q5 V
! R' l% ?5 a0 }1 @8 }" G
+ N$ l, F/ f/ x: L8 v
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# c+ [2 j0 R3 H* Q6 [# Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( U1 d) `7 h u; R- A! ?
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4