嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 | V7 I. B+ u6 t$ ?# T
Void UPP_TASK(Void)
% n! n. Q# A" D2 M
{
/ C; G( W- k; c6 R
7 i2 n0 s$ Q. s! b: ^! J9 y8 n
int i,j,k,target_int_count=2;
% r) l0 G( U3 _) ~3 f0 h5 B6 c
char ch[2];
: `- H7 D6 h0 e* i2 C
: e! z" M7 S/ s) i7 O
: X1 l$ ]5 P V+ Z! U' Z
4 y( { H! Y1 D+ w! _( s
upp_interrupt_count = 0;
1 [% N( r$ h: s' [2 | d0 R5 a
upp_error_count = 0;
7 w4 K5 x1 k# u" |+ R8 y
9 P. v4 P; a- F4 C, o
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 X; _9 p/ W7 _% s3 i! y1 O/ g
// Initialize data buffers
, {( |& V6 R2 m, R' P5 K
for (i = 0; i < upp_frame_size; i++)
8 b1 ^% t+ c3 M" j
{
* }! \6 j# N0 D [; E. f2 B
upp_buffer_b
=i;
- f4 j# X/ J' ~6 k2 K! q; F* {
upp_buffer_a
= 0xDEAD;
7 V- s1 q. t1 \1 G* |! Z
}
& f) w& x6 z% X7 O' @6 \+ f+ H* ]' A
' \2 S, ~. X7 {6 q6 m
//for(i=0;i<1024;i++)
9 R) ]( l" y/ Y% F2 G Q# E4 P7 S
// temp
=0;
' c: i; i, L, f" d2 S
0 @7 G8 l U( Z
//UPPReset();
, n9 D i3 [# o+ z4 r2 }
/*启动UPP DMA传输*/
& p& I& R& r3 B
UARTPuts("upp_prog_dma_i\n",-2);
8 k2 X, O: X; x) M+ Y X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) W$ `& ]' t$ R# ?8 d- h. a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 h7 t( ]. q- T9 Q+ X, a0 k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) H& U7 L, q- {& e7 T( H0 b; D
; E; D# H" m1 a
UARTPuts("upp_prog_dma_i\n",-2);
- w4 x( M) D9 e) R0 f4 d5 a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 ~- v2 t! ?& J' s' K' \8 i, E! V# _# W3 V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
w1 b! i, P: o# A/ j( S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 z' Q `2 N9 J# ]
+ m+ q8 I' W+ h8 l [ y
/*等待UPP传输完毕*/
" |2 r. k$ l7 }. q
//i=0;
5 y8 N+ Q5 @- a* k1 Z5 U
//j=0;
$ K5 C, A0 ^ U2 g `4 H$ t
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 e4 W2 P: R$ b$ I
{
* R) D$ z0 {& Q7 ^
/* 测试UPP传输的同时操作普通DDR数据
& T6 P0 Q+ H4 Z! M% o- V m
temp
=i;
' t- f3 u+ O; e: i7 `
i++;
! m+ V: ^7 C# `: ~% F5 x
if(i==1024)
1 C+ R5 o$ F! E
{
1 m" H o8 }% _, [$ L
i=0;
2 h2 _2 H; x' Q; n6 L, H
j++;
. D3 Y9 g7 n! H" I7 j# H3 t+ l1 N
}
: q7 t7 Z$ J2 q& w" R, z; p @
*/
+ k- O8 n9 M* x8 T& z% U9 m2 U
\6 [* K$ R4 v( H; {
asm(" nop");
& E" P& W) q. {+ l0 G
- Q. C$ u3 X2 ~9 H0 ~+ C/ T3 q( ~8 c
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, F2 R& W/ k% \! m, x# O
}
4 t; z) }! O- j0 T0 h0 w/ M* p
# [( E: [3 a4 H9 X5 g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. b/ c7 f4 E# B% l2 G8 w# A& @. b
//UARTprintf( "i=%d\n",i);
, }2 ^; P# d% A7 \6 a G
//UARTprintf( "j=%d\n",j);
' F1 Y$ X. b7 l1 K1 |! q& w7 B% S2 E
UARTPuts("Data mismatch in buffers.\n",-2);
; U$ A/ Z1 G ^8 `1 @! a. w7 {, S
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 _) F) A: c! o' [2 U
{
9 Q& w1 E/ Q1 G h: I+ E4 y% A/ a
for (i = 0; i<upp_frame_size; i++)
: j- J3 K* q# u( @' \
{
# b% E4 G* ?1 x( u3 g# `
if (upp_buffer_a
!= upp_buffer_b
)
% k" [% }- b ~. x( U( |
{
0 D1 x& P0 U! {. S3 E9 U
upp_error_count++;
1 P$ G7 ?2 ^. @+ M
}
3 z0 ^1 b# Z5 u- `& R3 D- ]
}
9 [! m8 G. S! X
}
5 g C( z8 e3 T
' P$ k% r+ g! K3 L# u: N$ D3 V, I
/* 报告通信结果*/
+ T4 N4 c4 n1 [! l" U- `5 Z4 U$ z9 k/ C3 B
if(upp_error_count != 0)
% N% N5 m7 Y( j# G. s( H% t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% ~. E% m/ ^; B x& G: S5 `& x
else
: ]( u+ |9 o! O: b) x
UARTPuts("uPP transfers complete!\n",-2);
5 F) D% l$ w& P6 U" Z7 |
! v. I# m% @# m% b5 s. N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ b- d+ B; p9 K f8 g3 Z
UARTGets(ch,2);
1 D1 R+ A+ x! y2 O7 B
UARTPuts("\n", -2);
8 O- ?3 N T$ r m2 A
. \: ^) L) u& h/ a7 m8 _; v8 C5 R) l
if(ch[0] == 'y')
' t7 C5 ?0 ~9 p* I( v- J
{
6 b1 |# I1 ?5 j3 E, D. q" O
/*打印全部读到的数据*/
" O% V5 `) _9 _% e
for(i=0; i<upp_frame_size; )
, V( ]3 U: X1 g7 l
{
4 J: n% N0 W1 }
for(j=0; j<5; j++)
7 n( a4 m; g: m( `5 M/ R9 B# O
{
3 Z" y# ?, K, `/ W# Z; }5 K W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! o. W' p, v! K
i++;
- i. a8 D. i9 ?5 d2 Q
//if(i >= 4096)
. n( P0 s' R2 l8 T/ d
// break;
7 N/ o+ I- J; ^9 F/ O( R
& j# G h" D8 Y8 D
}
5 k9 Z* c! T! ]
UARTPuts("\n",-2);
. l F" k) a. J& d
}
0 L- x! ?: j7 x0 ^
}
g- n& O k, Y& V B
& u- V% N) B. |% ?1 C2 T
}
" j# ?$ p3 t/ t: A" Y6 T
" [6 V& g7 [- w* N1 S5 {0 d
3 k$ O' H9 `, w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 o" C& L8 c; T; \1 ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, l, j" M i+ M& z' j
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4