嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% w0 ^( x9 h9 ]% x& I
Void UPP_TASK(Void)
, p# N- x! `9 a( m1 z2 x+ A
{
, _. H2 D0 Q% `. D. J. s$ W
; B% I# `% l; b# E" @/ M
int i,j,k,target_int_count=2;
+ `+ q5 k+ I2 X' a7 a
char ch[2];
. X8 Z* U; ~0 Q* v9 q1 a
; F# R1 I- H5 K2 N
6 Y1 S; k: h& }+ Y z" a
" Z9 t6 O9 R7 _! t9 q; v T z
upp_interrupt_count = 0;
1 |' K% N$ O. [7 V
upp_error_count = 0;
& \% v# O, ?! p1 g& Y- c0 G
# L3 ~: a# I; S8 f5 O) A5 a) f& t+ w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* ?" v; y2 N; M1 j
// Initialize data buffers
- j7 H+ U5 B Y1 \! x& M: T
for (i = 0; i < upp_frame_size; i++)
# Z! N; `: k% C7 e3 T& g
{
0 U# {! k3 R! s2 L1 ?
upp_buffer_b
=i;
+ Q* L1 ^5 k6 }- _, j" l+ R
upp_buffer_a
= 0xDEAD;
( e$ v2 a3 x" M5 f
}
9 v' z# @9 ~! c1 }7 B5 ?' J) q
: ^$ \/ _: h1 Z! N$ g. u' j, I
//for(i=0;i<1024;i++)
1 ]4 G8 q s7 i$ R* i7 ]% B. e
// temp
=0;
( X9 \" ~* i9 I' ^6 t' i) S
2 V8 S- W( S& `0 A6 _1 d: c
//UPPReset();
) Y( V) y4 e8 T
/*启动UPP DMA传输*/
3 Y, }- U2 c( t; G( c9 |
UARTPuts("upp_prog_dma_i\n",-2);
& w4 k# H# Z# B" f% p* D
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) D; y5 a; R" \+ B( \# m( O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, ?0 G" p& L% J' p0 i5 q; R6 k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% E& P7 L) o; O- q; D
) L/ b) i9 b! q$ ?0 R O6 h. p
UARTPuts("upp_prog_dma_i\n",-2);
- q* Y2 H8 ^! s( L: f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. ~2 m( w: P( Z1 Z0 c5 F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 P: Z7 a9 i/ z* B5 K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" M- g- i2 i; w% w
6 f, k6 ]# l+ F# x2 x
/*等待UPP传输完毕*/
4 Q* g& ^6 A l( B4 I
//i=0;
5 o, {+ Q+ X% R3 |; ~9 g" J H! H
//j=0;
% [) ], G% {. I7 [% N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; K k# M6 x7 n" A: g; x- a) d
{
& I3 C9 `, F- x6 \- `# k% y; X
/* 测试UPP传输的同时操作普通DDR数据
+ q7 [+ L5 {% y3 b4 U( o
temp
=i;
# F$ P: j5 J. h9 R' m p" i
i++;
' t$ ? J2 v* e2 g9 g( e
if(i==1024)
3 b+ V/ t: h$ O; M- M. A
{
- q# I4 f/ O5 d0 g
i=0;
; @ B5 Q2 {5 {; l, z
j++;
4 N B* K/ R: N& {- o2 E4 z3 Q2 `
}
0 H1 G$ Q4 E0 Z
*/
3 ]. `6 a/ O: Z v5 w z
" o/ {& W' s3 Y! x2 `
asm(" nop");
! V& t* B, Y* A4 Z5 J
( V. q* s( j* b o7 D
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) m0 K& Z( E7 n3 W+ U7 h- t' j9 b
}
: R4 j* _2 H6 }6 c) v5 S. X# r
1 M& Z4 c x, O& C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 X5 ]2 T2 ~8 k9 w& I' _
//UARTprintf( "i=%d\n",i);
' r' G& \- N- s7 g: K
//UARTprintf( "j=%d\n",j);
s' h6 u( }0 {: t7 r7 S* P
UARTPuts("Data mismatch in buffers.\n",-2);
9 k$ a5 Q4 G6 q; e: z( ]1 d; y
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 |9 I W8 x* B5 Y4 a3 `
{
, }2 B- u* Q/ R! w- S1 Z
for (i = 0; i<upp_frame_size; i++)
% h6 k% q" @& M& ~8 X
{
% c$ @1 t- O% o( W5 `$ O
if (upp_buffer_a
!= upp_buffer_b
)
' M9 c- I' b u/ |6 `/ o
{
: D. h6 {" ~1 _+ G% O
upp_error_count++;
1 z, R6 B: L3 _5 T5 D' h M% ]! d
}
, Y2 m: o% A7 i' f) ^; k V
}
* O8 U- z3 U3 g+ }1 ]1 ]4 ^1 ?
}
% A( p Z/ U# j! M1 D
$ B& i; q4 y, o. u v- h7 N, y
/* 报告通信结果*/
# p1 A; O3 g# B8 ]- K, P
if(upp_error_count != 0)
. o' u7 y Q; S4 `9 h; W$ O5 I% s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# o# q* ^9 O1 I# e5 i* q. ~
else
. t: Z' F) H/ W2 _# b1 X- X4 ~
UARTPuts("uPP transfers complete!\n",-2);
5 u, \0 b6 c% w7 Q: o. A
2 o4 U9 m B% r2 n. U, _
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% }7 L9 d. g: H; ` y0 n
UARTGets(ch,2);
" i; c0 l' F/ u S% x& C
UARTPuts("\n", -2);
' m( \: s& j5 q) `' S) J
, n" ? s3 a2 _% U
if(ch[0] == 'y')
8 ~7 ]8 s- G8 p" `
{
6 S: b @ [, O" E9 M
/*打印全部读到的数据*/
7 q3 q8 Z# r+ ~! ]8 g- f
for(i=0; i<upp_frame_size; )
4 x8 ~" V/ Z/ H! M! r6 |3 c
{
" K2 e9 V" d7 ~2 C0 t
for(j=0; j<5; j++)
0 k/ O# g, C1 h2 I
{
/ M2 [! a& V! c/ }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 R k4 z, _7 c0 s+ k+ r% o
i++;
1 s/ n( \# C, q3 O1 R
//if(i >= 4096)
" j+ G, G4 `$ c! x2 D7 x" C
// break;
% i6 f4 [- m3 W% c' p% j
% c ~$ P# v w* Y7 A- B
}
7 h+ _5 F# @& t* U2 R: t- \/ C
UARTPuts("\n",-2);
; }2 a3 w/ Q9 @ i. l
}
" l+ K3 p4 `; B0 s- G ^
}
9 f4 u2 c) q3 T8 J
- ~9 ~8 G3 p" y; w; R/ G
}
9 d# D9 T" z1 B6 h: U* Y/ M% h
0 G6 a) }! A6 n
) q. U+ M! H6 ?9 m' |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- [0 |0 m9 f3 o3 ?! s
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 G L7 g3 ~! J/ w, Q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4