嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: ?* x! J, r5 i( {( ~' m$ D8 Z
Void UPP_TASK(Void)
& l2 g8 V" v2 E1 Z; r& S5 N, m
{
1 l# y8 @7 `; i" N3 B
% a2 ~* t" @8 Z4 h8 \+ x' y
int i,j,k,target_int_count=2;
7 c7 D" y4 B9 g$ K; E
char ch[2];
- d, q+ K; W% d) {& E1 y
$ J2 C6 T( e; \7 w
7 z% p9 ]( S2 k$ t
/ Y. p( x4 } ~( ^# m, P
upp_interrupt_count = 0;
1 D: B! @5 O5 x9 P6 H- r" X: u
upp_error_count = 0;
) y* T" x/ i2 `% {7 g8 ]; D
7 A$ z6 X+ T1 ^$ A
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 P# H3 J6 q7 c- H
// Initialize data buffers
/ w3 e: k# d+ Q2 P$ @
for (i = 0; i < upp_frame_size; i++)
- L0 }3 C% I+ {: b' J) O7 ]) ~ Q. H( [
{
% o. M, f- \( S4 s* H
upp_buffer_b
=i;
7 R# g; U) X2 z6 O
upp_buffer_a
= 0xDEAD;
, q+ p$ s8 f8 }- T9 E% A; ?/ L1 _
}
* } {8 E5 ~1 o" K( I8 ] ~
: T; s% m- @/ T" b J# t) y) u. R
//for(i=0;i<1024;i++)
# Z6 A1 Q/ D9 }$ }5 X% p7 I" w7 R% r
// temp
=0;
; r4 A* b/ i1 t$ ^* w6 c
: W- z f2 A2 U* E" B) P, p
//UPPReset();
& ~* n% Y7 d% H7 f% a$ s
/*启动UPP DMA传输*/
8 b6 G% L& _, i0 R7 A, d& o5 S
UARTPuts("upp_prog_dma_i\n",-2);
7 X% @# R3 }1 Y# W2 N& n+ A+ o
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 h/ d4 y E, o* f4 d }7 L* r) \
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 U% q: z; N; E! ]6 p* h ?$ O. p* ?
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( |7 n1 S$ j3 U( F7 V
: k$ _5 B! Z- a A# T
UARTPuts("upp_prog_dma_i\n",-2);
, s! ]5 }$ m' ], G9 C/ c
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( q3 l3 `& p! e; D! N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 W( w4 C9 |5 @; t+ L- b! l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 q0 t; K$ K4 R; ?% D; A" o
1 t l7 q5 v9 ^* D' w/ W0 `
/*等待UPP传输完毕*/
7 Q# A" u+ q' p8 n' ]% a
//i=0;
3 @/ x& W1 o1 R1 h% ?9 I$ {
//j=0;
; a" j% {8 C4 G6 F% I7 t- y, c
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 y2 Q$ h5 x9 b( U) G& |6 g
{
$ b* P: h3 R3 g7 a* g
/* 测试UPP传输的同时操作普通DDR数据
, y, H6 }6 ` w# D" l6 W
temp
=i;
6 Z" j- t9 F- K/ z9 d# u
i++;
m+ j6 {' v- b8 f
if(i==1024)
3 v8 k* W2 \' ?; e% y
{
1 ^: h$ ?/ |- s4 ?) E
i=0;
# F, E, Q. J( C$ K
j++;
# U; J; B+ X$ f1 I% g* p" ?( e
}
: R) Y! z' a% _) S k
*/
! X* o) f" H; `$ r
7 F% K' H, I* Q+ t
asm(" nop");
# x( ~% c' n! a1 c
# R y# L8 w" @! h$ _( {+ C
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
o' i3 J' V( h8 V$ j3 c# r
}
$ ?' R# l" F+ i
# a, l3 R3 J3 \- F0 u9 m$ i, s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
T0 f: N) w, u! M& d- m" S
//UARTprintf( "i=%d\n",i);
9 L \8 u9 ?8 A/ |- h! G
//UARTprintf( "j=%d\n",j);
& a# L0 _' Q' k) p
UARTPuts("Data mismatch in buffers.\n",-2);
; A4 A& ^% o! D1 w. w
if (upp_interrupt_count == 2 && upp_error_count == 0)
' H6 T7 P/ D2 ^& l7 Y
{
0 Z. j1 v. R, [3 |
for (i = 0; i<upp_frame_size; i++)
0 _$ `: C8 \9 [2 i8 H5 S2 r
{
* N3 ~5 @& o" e" X- ^/ ?. p
if (upp_buffer_a
!= upp_buffer_b
)
6 _8 K, N6 S" |9 O# b
{
- ~& O; H# b$ l7 E: H' a
upp_error_count++;
, Q$ J5 r7 V$ x6 l5 z
}
) `2 U8 u! V9 F( s$ v
}
- M, r8 S; r8 I J
}
' E4 ^$ Z" E4 M+ t
6 n1 x0 w+ G2 A- r4 J0 t" J
/* 报告通信结果*/
7 G; }' p0 m* Y5 s$ C8 K
if(upp_error_count != 0)
; m. J1 O4 F7 l' n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: o# g* f- r; v; ^5 Y, N9 i1 c
else
O: f. ^ p, K. Q- A
UARTPuts("uPP transfers complete!\n",-2);
- W6 z4 B' C: @
! d- ^: Y, B% x+ q% |. Q5 O8 V
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' d( h2 D7 G f8 K: _! j' H# i
UARTGets(ch,2);
8 S! T5 Z+ w7 l
UARTPuts("\n", -2);
) z$ M4 Q [! O+ A4 p
- T5 L3 h; o+ X( f5 `
if(ch[0] == 'y')
7 O( V! F; w3 T p7 A# F
{
- j$ Y1 |6 p# ~* i3 y, M
/*打印全部读到的数据*/
- d% |, O: D& G" s7 c# F
for(i=0; i<upp_frame_size; )
$ |1 ~ s4 F0 J9 y3 v- t' q9 p) e
{
: t$ M$ G( ]& f0 E* @1 Z# t
for(j=0; j<5; j++)
5 _) f. Z7 T# V
{
' G- M; k% ` X2 L4 \5 T6 v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* U+ b$ c9 l# Z# v
i++;
0 W; _/ z2 U1 i/ i( ]3 o
//if(i >= 4096)
# \7 a, [0 ~ B( O
// break;
+ R0 t" y0 u: h
3 s4 f5 X; [! G" V
}
) L5 G: B8 |$ S: _* f$ A! Z
UARTPuts("\n",-2);
: M/ O7 O# z* K2 ^
}
8 j' A. S- |4 M J$ D' D$ z9 Q
}
. c1 | L# |( u, u4 X7 r* O) C
3 T, r- v. f7 b& ^
}
% R \1 a% {, z. \2 E9 v
4 P5 o; f* E3 N7 [) K6 _8 x
/ J4 _* m7 c" m6 n2 s3 w# b8 b# k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" a6 [" l( ~$ e& g8 y+ r+ T& t
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( e$ d1 ]+ Q$ @, ?4 S- L
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4