嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
`5 r4 U- J0 e0 o
Void UPP_TASK(Void)
4 o" J; {, I# a3 I3 O! O7 u, u+ M
{
e+ ~: n B" f9 v6 |$ {
" e' I9 |# w& X2 D
int i,j,k,target_int_count=2;
! y% z" K% k# X% g0 f; ]( c
char ch[2];
4 A$ R, Q2 J8 ^4 U6 B
q2 B R5 x5 g; \* b% r
8 c+ Y+ F/ R: q, Y i; h0 U
' k2 K0 v; \; S" I6 [' z
upp_interrupt_count = 0;
3 a1 h2 S0 d, S- \7 a9 k
upp_error_count = 0;
5 g! B/ E# ^+ y
7 d( O. y# A8 r8 P
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 ^6 R& `; P+ O& r7 w
// Initialize data buffers
1 U u, P$ S N9 w7 m7 m' j
for (i = 0; i < upp_frame_size; i++)
- ?$ c" Z+ o6 j4 E$ r7 v
{
! y; \" l+ X! B% k( e
upp_buffer_b
=i;
6 p1 D6 _1 r! ^# B2 b5 D. v5 U* q% i
upp_buffer_a
= 0xDEAD;
+ h# f# S3 N4 }+ p. B
}
: l" D* u( V. [: E8 E9 G0 C m
x9 Y' y, @. B: U% p0 s
//for(i=0;i<1024;i++)
$ x5 v" D* ~7 K6 @! B/ U
// temp
=0;
3 o; b2 A5 V+ A: m5 f" m
9 h& m1 b, d" F* ~$ N
//UPPReset();
4 ? _! G, H \2 D& J
/*启动UPP DMA传输*/
) ]& Q& l6 @; v% ^
UARTPuts("upp_prog_dma_i\n",-2);
& K+ x4 J( [! p$ b! n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ t8 ^' ?! ?( ?- M, M2 Q- ~9 j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 i- f& @" @0 J- w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- @& a" l. o5 V+ I& T
" W3 |) q% w3 v" g. B; I
UARTPuts("upp_prog_dma_i\n",-2);
7 K; @6 P- o; a* O$ ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! |0 P: u$ W4 z0 w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* y9 @; Y( e6 u( q- d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" k% S4 S+ q4 Y
) ^+ \; m0 g" M# d
/*等待UPP传输完毕*/
: H( T5 h- L; Z& o1 x% Z
//i=0;
- f$ M( @4 r- U, Y; J
//j=0;
/ t. T% _+ n2 ~8 g) j: t
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 T9 x$ H$ s! J* f
{
! m6 l. a) @: c9 W
/* 测试UPP传输的同时操作普通DDR数据
" I# x- A8 N: D3 ~" U; x
temp
=i;
/ b; {4 S# w: U" O
i++;
) F: Q q8 o* d$ V2 T
if(i==1024)
+ y; O0 s6 o9 n4 p( I ]7 G
{
+ t( a, n/ J9 {% G
i=0;
: n! k) Y: w7 e+ U% p: W
j++;
# L& w( l. P) z, Y/ {9 S% X$ @& x) T
}
1 O2 d) ?) Z5 F+ F
*/
8 d" Q; T/ S u( v0 C1 k. F
; N0 J5 u4 c/ c# |
asm(" nop");
+ z6 A5 W" Z3 N$ p5 L
# e+ v7 t0 E+ @! f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 u6 V, A1 C5 B+ O8 v" N
}
1 Z' n$ }5 B& i1 M7 W2 d
6 L; c( _+ x( Z" N4 O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 ?! o8 f, @; V o& M' x7 U
//UARTprintf( "i=%d\n",i);
$ U' k; `6 I, h3 i( O2 S
//UARTprintf( "j=%d\n",j);
, u* |9 ~# ^: N6 K
UARTPuts("Data mismatch in buffers.\n",-2);
0 z, a/ Y7 |6 _2 a4 e) E s
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 U, v6 U) Q! y3 V' w
{
! H9 u$ f- s3 o) e) q7 {
for (i = 0; i<upp_frame_size; i++)
, a4 `/ I) n J- |1 t' i: V
{
5 }5 K- Y5 n- d. d5 E# w, @
if (upp_buffer_a
!= upp_buffer_b
)
3 I( E0 |# {! _ L: w
{
6 V$ S6 N6 H5 ?
upp_error_count++;
1 |! r. E+ h" q* D+ n! a' {
}
2 b) x( v5 d+ P' ~. l
}
7 A* O$ |, ^% o) u
}
0 J; ~; o k. E3 c& k w6 ~
' K) c4 D; H0 m; {% L. ~* P
/* 报告通信结果*/
+ p$ i0 y. w* Q7 d/ L+ p4 f
if(upp_error_count != 0)
! @: ~$ C* o0 v! ~ H1 X& f. d
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& T6 f" ` {7 y0 w/ K
else
, d* B# P% r- m# }8 d1 Q$ m
UARTPuts("uPP transfers complete!\n",-2);
- I# C0 G* R! c; ^6 x& C0 a
0 c B8 Z5 O) X, q0 A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 Z7 [. y8 w6 b
UARTGets(ch,2);
3 P9 ]5 m1 u3 ~* C& {
UARTPuts("\n", -2);
# z0 Z, Z8 h3 d& j% X
& Y3 U4 M4 |, X8 N0 X
if(ch[0] == 'y')
# }. i" Z9 ?# N+ \! }) Q- y1 k
{
2 C1 j# A( v9 B9 S$ y
/*打印全部读到的数据*/
) ]- n6 E) }% c6 ]: v3 R4 f
for(i=0; i<upp_frame_size; )
6 |8 ^+ F- e' ~! s3 ~
{
$ ^1 L7 ]9 S0 l3 `( r) f+ Z
for(j=0; j<5; j++)
1 N/ p; o1 x1 G' P" d5 L( E. E
{
* r' T' f! g) b/ Z+ u
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ s; v1 G2 Y& T6 p3 K" a
i++;
* h5 I, n" u7 R5 x
//if(i >= 4096)
: L1 K5 I# ~$ [' c& U7 u1 b$ O
// break;
7 c0 M8 T' G" a, t$ R) L6 p
7 y3 j) G6 B, E5 O! ~' Q8 [
}
4 }' P* P- a6 J% ?! u
UARTPuts("\n",-2);
) j) [' q. h+ H
}
7 \8 f$ I6 U( g! J5 H/ Y
}
( J& v7 k( P n% A1 v1 @% O! t
x q; ?: p8 r
}
% Y& c" {: x) j/ g; j
8 L, t Z0 _% f
. U% C* c4 W: S A% G( _5 q) g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" q. I+ W6 s+ w# L. C
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! B2 B) x( v1 U6 O7 F, t
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4