嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; ]( Y* b! }5 Y: G
Void UPP_TASK(Void)
2 H9 \( f6 f8 L+ I
{
2 O3 v: h6 J- b
, P* ?) [! f/ T4 } f
int i,j,k,target_int_count=2;
+ L; f. X: J0 y0 Y$ w, G* w; B/ o
char ch[2];
: u, _3 D1 H! K8 f8 ]
( \- x% f- A5 {1 c$ U% U* ^
. l( x+ z; g! I8 p
. p& V! d0 G/ T7 g* I8 S" }1 c8 e
upp_interrupt_count = 0;
' v1 B+ ]4 R' C2 M
upp_error_count = 0;
0 P) m3 Q2 g5 o
J+ \" E; J; X8 u$ B5 v7 \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
x v) K5 a4 w' g3 y# d
// Initialize data buffers
+ n. C8 ?9 ]0 O9 @+ G# B: T
for (i = 0; i < upp_frame_size; i++)
8 i- e7 `1 M$ o! b
{
' C9 p) p& `) g9 J. ~; c. @
upp_buffer_b
=i;
) {% z3 Q' }- E- q$ L* i
upp_buffer_a
= 0xDEAD;
' h9 H Z/ c# U5 v
}
! f l1 V9 l1 s+ O2 h
) x- W* N( n8 x- I9 I
//for(i=0;i<1024;i++)
$ C. A9 m4 Q, W1 v; K
// temp
=0;
+ t% |* i9 G( \/ `! I$ \$ r6 t
3 e; H+ T+ ~2 E
//UPPReset();
5 v3 C" A0 n2 S+ y+ G: f
/*启动UPP DMA传输*/
" H- }6 a- h; q' K3 e* L/ u
UARTPuts("upp_prog_dma_i\n",-2);
. t; ^6 I/ {: t* X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% }5 @9 g3 y4 t, v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: }" a- z6 j8 P
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: }) Q) b! X3 S3 t% T5 `
' ?0 S: n V+ L9 z
UARTPuts("upp_prog_dma_i\n",-2);
! ^' i& h' B$ a+ l$ Q- ~
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ d: O. [1 Q0 H5 u4 W3 X* x
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 X( P y. f$ l8 p5 X4 P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 G4 f4 F& y, {$ e5 c
' l9 D' k- d) v# R" {" \, |
/*等待UPP传输完毕*/
; w! {4 t/ Q/ V: t
//i=0;
5 Z1 I" g" f9 W
//j=0;
/ W% F$ f& N) Z' D/ `
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& f z2 Z# N$ \$ U
{
x1 J( Z6 \, {" k
/* 测试UPP传输的同时操作普通DDR数据
8 i$ A1 c) z6 x4 {
temp
=i;
5 ]9 Z \5 v# \6 n: H, ~7 ~
i++;
- _- a0 |" `: g
if(i==1024)
5 L; d! x! a3 j! _
{
' G( x- Z! e& `8 q$ n# O
i=0;
: o( m4 Q0 g @4 f; E o2 H8 h
j++;
( u& m( y5 ^1 [% `- b
}
( U x2 i9 m: }
*/
g. E9 r* s; {& J! X5 @
: F" k+ b @- U! D" S4 ?9 F7 E5 Y
asm(" nop");
) w6 N' j" N3 t
: ~& m- X* a" j5 d
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" _6 S. f5 B5 q4 k& R* p& r
}
[) g) g4 g& U7 ]/ u4 j/ D \
% q! y+ C( u) E3 O5 P5 h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 M# v: W8 G9 p2 R8 Q2 X7 k
//UARTprintf( "i=%d\n",i);
1 q9 R! Y+ r9 \# T
//UARTprintf( "j=%d\n",j);
4 I ]8 u9 X# k) o# V* ?& F
UARTPuts("Data mismatch in buffers.\n",-2);
9 @+ P H7 J* `; W: O
if (upp_interrupt_count == 2 && upp_error_count == 0)
; y0 L! C& P$ @) x
{
4 u! U: Z% u0 L+ R, ~* P
for (i = 0; i<upp_frame_size; i++)
6 O( G- D* h( N) \
{
$ |4 S8 r8 M* x {& U" O9 G$ R9 Q& U) e
if (upp_buffer_a
!= upp_buffer_b
)
2 {, d0 Z6 ^; E% c3 l
{
& _* Z# m' f' y- l) G
upp_error_count++;
% K2 w' k) D" ]% P! h' A
}
8 X9 P( d7 Y$ P1 g( L
}
) E8 [ p( d7 o1 o
}
T+ Q& D( r r4 u+ l
$ Q; v- [* |5 J, Q) w9 x8 _
/* 报告通信结果*/
5 T) W5 ]4 S1 Y5 W
if(upp_error_count != 0)
5 S* A& J& s$ ]' Q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 `0 I6 a: i; H
else
y0 j$ d5 `9 n4 R
UARTPuts("uPP transfers complete!\n",-2);
8 [) {4 M/ a1 Z0 ^' E) I
& V; g5 k/ X6 ]2 c# Q# u
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 U2 X! Q% E d& [# Z
UARTGets(ch,2);
( _0 i& D4 d4 T: w6 ]5 [
UARTPuts("\n", -2);
, S6 u% [2 F8 s& w- ?
- q6 z, C4 H9 ], t+ V
if(ch[0] == 'y')
1 m2 S0 R. @; F+ o- ^
{
3 a& T& n; x1 Y5 A
/*打印全部读到的数据*/
: c5 U' C5 @/ e: Y" i
for(i=0; i<upp_frame_size; )
/ D7 }' V4 K: _+ Z5 z+ O0 V+ `
{
; o5 [' `# \- f
for(j=0; j<5; j++)
4 m; ]: x& m) |& L- s$ J' |
{
9 I7 N; Y9 T" b) F9 j9 P! K6 Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, n9 {( U( W! d
i++;
. W# V2 C2 \! W% e7 G) u
//if(i >= 4096)
' l8 f. Z, v0 g6 R
// break;
8 U8 |* k7 _( z* I8 e. e
. d' v9 r4 j5 F& |9 k: T0 a B
}
1 h( L7 e# y- m4 Q+ t; K+ E/ B
UARTPuts("\n",-2);
* D( `! ]& Y# [% t2 v0 c* e0 i2 d
}
( A# V. L! ~7 ]( }8 ^4 \
}
6 o8 L+ W% w0 A3 E+ T+ m! H4 N
e% H9 ^. e" Q
}
6 e$ X1 Z# ~4 A- a- c
. u" k/ x: T& S, O6 D3 a- y/ N$ q
$ j) v, z" P. j
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 Y8 c1 x2 q, Q0 n7 _8 q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 m) M8 j% u( }! L H6 j
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4