嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% w* A: m$ j% l) l$ t
Void UPP_TASK(Void)
; J( n; v7 z: A; D, `- S
{
; ]0 v6 p+ ]0 V* |
, t3 ]& T$ W! T g7 q2 a
int i,j,k,target_int_count=2;
1 Z" k/ T7 o( Y; f$ `( o
char ch[2];
' C. g- O! N8 P* G" }/ Y
& E0 r+ f1 [/ K: [8 G
: W4 V* ~5 S& L# x! V0 ]$ {7 n5 _2 L. W
; _+ w4 O/ w1 b1 ~/ K, s
upp_interrupt_count = 0;
) V9 j/ e9 R& K2 M3 I* E
upp_error_count = 0;
1 M( k' R4 J- n; c. Q g
* h7 f# [8 |7 k; d; r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 t0 D3 g3 ~6 g7 M* b0 s* M
// Initialize data buffers
$ r+ L; Q) ~) X4 p" G3 I
for (i = 0; i < upp_frame_size; i++)
0 K# I. a2 ~/ L1 p; e+ Q
{
7 N4 j; p6 L! {9 t
upp_buffer_b
=i;
$ E& i7 }% B6 S! o, y
upp_buffer_a
= 0xDEAD;
8 f9 y9 |5 z6 B- s, X0 N- A$ h$ f
}
; @* Z. I7 H/ c3 A0 O ~
4 T! ]1 u5 a) m- ?2 U
//for(i=0;i<1024;i++)
; {1 U# H. r$ H$ L) @1 \
// temp
=0;
2 c" Q. A) \4 g" W' R
1 y9 u; \1 u* n. l1 `3 ` S
//UPPReset();
2 q( @- N4 ?+ g9 i& A3 R7 k
/*启动UPP DMA传输*/
( _7 @2 q8 |8 R# {
UARTPuts("upp_prog_dma_i\n",-2);
" {9 g. r& d/ s' C
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ U$ g9 z u j8 h9 V3 v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 L# \$ z7 G4 B0 R! ]3 m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. i) e+ C. Z3 p. n/ w( b
# ^; f& b$ r. }' Z( M: Z
UARTPuts("upp_prog_dma_i\n",-2);
% m+ L# f/ C! @ E' j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" f& {; ]! q0 j) D( Y4 |2 |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 k" L/ r7 [" J. [1 _! D. W/ J
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" V9 f, h0 {3 x
4 {' F+ x! u2 Y
/*等待UPP传输完毕*/
$ E- p% L) u" ~) ~5 p. |4 h X9 |
//i=0;
& H" ^. H( ~" t0 K3 ^3 |
//j=0;
$ M9 G7 {* o1 _$ d8 c8 U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
@* e, P$ w) o7 c& Q$ x4 X
{
4 h; n6 u) s* `" v n
/* 测试UPP传输的同时操作普通DDR数据
. P0 O' m$ f; r$ _ a
temp
=i;
& R( }% G5 M; ^# b* [# T8 A% f
i++;
2 b0 G' K5 p! _& |$ I
if(i==1024)
8 t( N b4 Q+ Z+ b
{
8 G2 i7 f, p/ B$ {1 k0 p
i=0;
5 v+ V" N7 u% U, A# |5 j
j++;
) G! s; A% J3 w* A- @1 [: X
}
1 ~2 A/ _' ^ m5 |$ F+ B; O c
*/
3 |+ s9 h' x+ g; ]* X A2 c
6 l ` L, n8 @0 J8 w
asm(" nop");
% F6 p g: \2 N
% B. X9 f" T2 F" c7 l2 w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 g. d! q) V+ f. X' K7 W5 ^
}
$ a- h' W3 T$ ?
+ A& T9 X7 i% ^, Y) ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ G0 @: C9 F/ b; k4 \
//UARTprintf( "i=%d\n",i);
, A4 k; r0 g: h! B/ h9 P; D* a0 y
//UARTprintf( "j=%d\n",j);
3 e! D' O! S, P6 i: p. g
UARTPuts("Data mismatch in buffers.\n",-2);
% K7 h' s, v0 `9 j
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ N7 p$ R# s/ C4 D
{
$ W5 C' N ~6 r! _( X1 X7 ^
for (i = 0; i<upp_frame_size; i++)
( M6 D% T- G* i/ Q7 X/ w' X
{
! G5 Z7 [- S% n8 j8 W% Y* `
if (upp_buffer_a
!= upp_buffer_b
)
( p- ?0 B) R! [, d% J
{
6 o) A( j1 R" r/ ]) @8 _
upp_error_count++;
6 J$ i0 ~+ K J6 N: `
}
: Y7 u2 D& q7 `* m6 [2 s
}
, h1 X/ T# a' x/ |% K
}
+ ?# ?7 o( D$ q+ q% y- T% o2 a. b
! K7 j# C3 B2 ?! w/ O" y8 V+ F
/* 报告通信结果*/
8 }) c% F; |! |$ i% q: P) I
if(upp_error_count != 0)
+ c3 G3 C! G, a# l/ t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) w8 `+ P2 z) M$ k
else
" H- A* z! y* r
UARTPuts("uPP transfers complete!\n",-2);
* W8 h7 Q5 e0 v# L
0 F6 e U1 T; ?6 X `6 l4 q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) ?7 G4 z0 C7 c) I. L
UARTGets(ch,2);
4 a, v6 S/ o0 i
UARTPuts("\n", -2);
6 x. J2 [3 X! f# y5 P3 a
; x+ v7 `4 U4 ^: t1 {
if(ch[0] == 'y')
/ H' w! p' a9 k% Q9 B
{
3 x# ?) ~* o% R8 n
/*打印全部读到的数据*/
# H' ~) |2 f) @3 Z
for(i=0; i<upp_frame_size; )
5 I) C! o* t, M' Z- y* s* t) X9 l
{
* o. |) B7 R4 z5 Z2 P0 _! F
for(j=0; j<5; j++)
3 a+ B6 U' W+ i' y) E
{
) K+ d# d$ N# [6 T- x; c8 n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ z# r+ L: Q! K9 B6 l! b2 l0 o) M
i++;
6 b$ L, } S4 |" t2 X- P
//if(i >= 4096)
: ^% w0 |) K& ] a
// break;
- z9 z! [8 u& c8 o
3 c: I4 g9 c& U% ?
}
7 N6 ]" y; g1 }" P$ j" z
UARTPuts("\n",-2);
- V+ s* t4 G- k, \' {! W
}
' G* A" c- k; e$ \+ _, E4 m5 m
}
) G3 B6 L9 i5 s; h. \5 E
- R3 r; l) X6 o% e
}
( {8 D `" }7 t
! C( m! g2 w9 U+ R
7 a- R4 p# S' ]" \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ ~ ?. j7 C' x8 u$ K4 `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# S. h/ F, M- `: W9 n
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4