嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% W- c$ `% Y2 f. p8 q
Void UPP_TASK(Void)
1 x" c: {+ \" F$ U1 J. m; @5 B
{
# k% K" `; v$ I& Q! p' S- d% z: ]: Y( c" |
) W# t4 R" M$ p6 ~% r# c: R$ x* ~
int i,j,k,target_int_count=2;
7 Z* \# C' A. x6 F" z. {
char ch[2];
# Q* J/ A: o9 a o/ N8 p/ f
6 ^6 ~ `" O* i, l0 M9 }
5 }$ [& c" x2 |) g e; i
, R/ H5 o4 T) d- l6 `
upp_interrupt_count = 0;
/ M1 n1 V. A1 R
upp_error_count = 0;
A; {9 I6 {0 T! T& T
. R5 a1 |- |( d! X1 A9 v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& g- l+ \' X# `1 p' S2 A( i7 A; c
// Initialize data buffers
@& ~6 T9 `' s7 M
for (i = 0; i < upp_frame_size; i++)
' J) \& q" l, c
{
% `2 i; y+ W% |% N+ y: l
upp_buffer_b
=i;
& S3 a. N$ o# d% L. r: y
upp_buffer_a
= 0xDEAD;
# e6 d& w$ ~. ?" x$ E# U7 v5 s
}
$ H3 ^4 K8 t, G, d0 N- J
0 k1 ^1 n7 ]( [1 w/ ^
//for(i=0;i<1024;i++)
# o6 o O# F+ {* _: i' t
// temp
=0;
0 z6 m8 [! C+ q, T' x; h. U- Y/ y
" y! F/ o0 ]# c
//UPPReset();
& c6 S; i" p. |% E: ]9 O* n
/*启动UPP DMA传输*/
1 G9 e0 D {5 z+ }6 Y
UARTPuts("upp_prog_dma_i\n",-2);
# I6 \; [( ~% b6 c; n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ j, e7 m" [: e( O- c x8 k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 C) W& E6 I9 { L! q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- c3 k# Y7 Z) ^' n# _% w
9 P- E) e/ I" L* X, f; T. a9 v
UARTPuts("upp_prog_dma_i\n",-2);
R% k7 S% V, m5 O5 ~4 h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- j' H( t9 n" u( R8 I' \! ?( @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, N5 T' T+ w0 ^# `5 `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ c1 R8 L1 z" [1 V; B% ?# E
" C' g6 j4 e4 l2 x/ q. V6 F9 |
/*等待UPP传输完毕*/
) I/ `. H; k7 j6 _4 p) U% T
//i=0;
. d) v2 A1 X0 r( ~7 M
//j=0;
* `" O; x% N8 V
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* e7 f# v$ J2 R% z1 D) c
{
" ~( f+ p: a( ^: o! T) @" F
/* 测试UPP传输的同时操作普通DDR数据
3 a' u# q$ C% x8 l: a8 K4 O0 }
temp
=i;
. x( ~& Q- p5 f4 @
i++;
: z6 |6 ?1 j" d, W, e4 l. q
if(i==1024)
/ s0 T# {- s' B# V6 K! o
{
9 O0 K4 C3 |7 z) D& h) U( H
i=0;
+ t5 e" J( M; m& y4 q
j++;
6 u9 l4 l! Z$ K9 m# o" E: d
}
5 b1 [- @4 |3 k6 x8 I# O. O" {
*/
# W- g, J9 _/ f0 P* r+ q
0 \1 h3 v4 ~0 m4 j, X. } C
asm(" nop");
2 _# D( P5 J. q) p( E, F
1 U( v3 x. \% s& b% f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) m% X- t1 E7 Y6 o: U' j
}
+ a' `7 Z: V) P+ I/ i: w
. h4 L4 [8 d# x" E7 j: D: F4 l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% W8 H9 B/ H1 ]
//UARTprintf( "i=%d\n",i);
5 g. k7 e- z$ S- N, U# s2 `
//UARTprintf( "j=%d\n",j);
3 T! F7 s3 i5 e J: E- M
UARTPuts("Data mismatch in buffers.\n",-2);
# Z: W! } Y; L* S
if (upp_interrupt_count == 2 && upp_error_count == 0)
O! m" O, J% J' H$ A+ V @1 }' ~/ x
{
( t4 A4 M9 K0 y, @ M* x* G* b2 O
for (i = 0; i<upp_frame_size; i++)
& H; s9 O& ~% V1 ^ K3 s) L
{
! b6 J7 z7 h0 i; E9 N
if (upp_buffer_a
!= upp_buffer_b
)
9 m/ P) \- c* a" X# M' _7 m
{
5 z3 g- \# Y; R# F3 v q9 h
upp_error_count++;
+ B/ [. P& U: Y7 X! L8 c( w9 u
}
( ^! k* [, t7 k$ t
}
" Y4 Q8 X9 I* u
}
" Z, H8 C7 f. p: a2 P
! h* d2 [$ f$ ~5 Q1 J* E" _
/* 报告通信结果*/
- t! X( x7 U0 T8 m+ m
if(upp_error_count != 0)
; D4 k* ]& _! I+ Q" n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% N) o0 P3 |1 W
else
( v @3 ^0 d4 @8 ~
UARTPuts("uPP transfers complete!\n",-2);
, M; D% E5 B! Z% K
% j% {3 j2 h6 t
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' q- B. B' N0 u4 u6 i0 N
UARTGets(ch,2);
" B# B% H0 H5 x9 h+ h* y4 w+ `
UARTPuts("\n", -2);
! n5 x2 Z; T3 V! ?
: d% y( r+ O, w% m: ?. a. l7 b
if(ch[0] == 'y')
- l3 V6 \; c7 z- }
{
( F$ Z* q6 e$ J: k' O- ~$ s* d
/*打印全部读到的数据*/
; ~* S: f M7 ^+ j" W
for(i=0; i<upp_frame_size; )
& A. e. S& L; Z6 E8 K8 f6 h, i
{
! X- o! p7 U( O3 q; C- ^% g% ?3 y
for(j=0; j<5; j++)
; A9 E8 ?2 F0 J7 \1 W/ e
{
- b b5 l M' F! A, Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 ]; E) s$ r+ B1 R
i++;
2 G+ ^) G% L9 H8 P7 ~5 {& b. A5 B7 j
//if(i >= 4096)
1 f0 d+ M. l: `% X }, K. b
// break;
% J1 m: i. Y) h. b% \
$ L* w8 Z9 A2 x( I6 P
}
`( t! P( i! x0 ?1 O$ I- U& b+ @/ N
UARTPuts("\n",-2);
7 o" A' v: ~, ~) d& ^
}
' L+ P7 z& h5 M$ i! D
}
3 X( w- C) v4 s' y" \2 f2 c$ U
( F6 k! T& Q ?* M0 s
}
5 G+ j+ ]" q6 {% z2 C
& t& g* d4 q: _, h2 \
9 u5 N& w+ d( K6 c v; i* O( d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 `% E8 m2 X; P% f& ^
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ L0 n# \) h$ T4 H L7 _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4