嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# K: z0 ?( Q! [ A0 i0 M
Void UPP_TASK(Void)
$ _ J& s- H2 L d/ b. Z
{
0 V% e. @0 I$ ^
% k* W) \& a3 _1 Y7 g" t
int i,j,k,target_int_count=2;
& _% E1 n) ]6 w# j6 t" @
char ch[2];
+ G* ?3 z5 J2 L+ h
4 O( I4 o( n# N# O
. t" c7 Z4 u4 o
* |% L$ g7 H0 o$ N: G6 W
upp_interrupt_count = 0;
2 O& N- H/ `( h$ K
upp_error_count = 0;
. ^. b0 ?. C- R- ?' g
7 f: I' u1 c3 ^! ^) y; Z$ b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( L! ^+ z1 D R8 D* N% ]
// Initialize data buffers
3 d% P# d+ T" ~. U/ X# F
for (i = 0; i < upp_frame_size; i++)
9 w; o0 I( k; ?0 U+ R4 k7 t
{
2 d0 |' [/ @ }3 F. P
upp_buffer_b
=i;
* ~# C" J) G$ T+ F1 J z1 h7 A
upp_buffer_a
= 0xDEAD;
! i% }; Y, j: z. ~
}
+ }2 x2 C2 Z: h$ w( ?
& `, N6 D. q5 Q% A
//for(i=0;i<1024;i++)
* p3 U" o1 S5 |1 u
// temp
=0;
) ?! b8 I- g4 D; o. ]' \
5 o& [ ]- U- n1 C$ }8 A
//UPPReset();
2 e/ ], [; R1 E& j# e! V) q& G
/*启动UPP DMA传输*/
3 v. m7 k) w4 x' v l: H7 ]
UARTPuts("upp_prog_dma_i\n",-2);
- b: P! h a( V/ ^: N" J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& e4 C s! S8 W: h* Y" l4 S' v, }
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# e; v* z# k! R5 i7 n! O% O( G7 Q$ H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 p& y: d6 [/ P
9 A7 d6 Z: i6 l+ @+ c- a1 K
UARTPuts("upp_prog_dma_i\n",-2);
8 V# q. F0 T3 ?9 U( s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! I' T* H; t8 z5 E8 {) A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 Z; ~/ @( h; n1 N' {1 j. ~4 Z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
p B- x \5 j7 r
% A* N1 r% D8 E8 {' U
/*等待UPP传输完毕*/
6 @0 c( q& T/ j9 a+ Z& g5 l8 |: T
//i=0;
! [) p; _( @% {* u& a
//j=0;
$ i7 W( R0 I. _: E) `9 l
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. w0 ?' i" z' B$ ]& j! X
{
3 o! K) \5 Q' n5 {( i
/* 测试UPP传输的同时操作普通DDR数据
8 _7 S+ Q4 ?. l9 ^5 ^7 `2 w6 x
temp
=i;
q3 [0 \& V. B% E
i++;
9 ^( |, y5 ]/ d3 }8 s2 m% B
if(i==1024)
: ?% S! I9 _$ R; I1 v
{
4 H' k; R7 G: B5 ^/ [( g: [/ r/ E
i=0;
) Z, w# x, Y6 o" M
j++;
$ M7 d8 u+ k# i7 g8 u5 S# B
}
/ H( N$ L( ` g" |. y
*/
( r* F+ R$ r8 I# r
' v* x* S" J& l8 t+ N k/ @0 Z+ L
asm(" nop");
4 {2 v2 f% s5 o; Y+ K2 x8 y$ `- E
. I9 q5 Z: P" @ M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 s8 M# z9 I8 i7 |8 a! W
}
$ o' ]' p! `. I2 {
4 Q. M( U4 M, I9 |& _+ ~5 u
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" m* V$ Y& I0 }$ }+ q* b7 C& ~
//UARTprintf( "i=%d\n",i);
2 b( E' K( l3 S! |' F
//UARTprintf( "j=%d\n",j);
3 g, w4 A0 ~$ @7 [2 P2 ^- I( F9 g
UARTPuts("Data mismatch in buffers.\n",-2);
" A" n& {) T/ P- ]( ~( R
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ v/ R0 ?; ?: b0 ^
{
* ~$ J( E( x# C. }. A
for (i = 0; i<upp_frame_size; i++)
# Q( o( z% N. k0 u$ [1 E! @3 h+ a
{
6 a, Z; l- P( I7 |/ k
if (upp_buffer_a
!= upp_buffer_b
)
0 @4 I: z. K3 M% a* O. U+ e
{
7 A6 H1 Q! ~4 t* b6 h" e, b
upp_error_count++;
4 q, ]3 m" f2 u; C/ y
}
; z' G. k# F" l* T, e8 s
}
( f7 W! ]9 ~: C( Z: T) G) v
}
' Y$ h' n1 |; l
% r: ]2 L6 B3 H, r. z" f6 Y3 E2 M
/* 报告通信结果*/
/ w# \* o ]9 y( `$ J
if(upp_error_count != 0)
# K( g: X4 d% e0 {* H
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 b" I0 J, W7 k: a- l6 y
else
! p" y$ X0 I& i: g+ j: c
UARTPuts("uPP transfers complete!\n",-2);
: _8 f5 u+ l$ ^
2 c* W: g7 x0 F3 O9 T, h
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, o7 l2 O4 _& E/ Z! z
UARTGets(ch,2);
" y+ K/ x: L/ L- b" F6 A" `( A
UARTPuts("\n", -2);
- v$ E5 m/ l5 H9 ^1 `
) U/ s8 [' }/ K2 ?0 C% ~+ I
if(ch[0] == 'y')
% F; n) R, B3 ^) h8 k) y* Z
{
2 w/ J) {1 h2 U, x. N
/*打印全部读到的数据*/
; x' g( u$ }7 f% R
for(i=0; i<upp_frame_size; )
) C3 C9 x9 V0 h+ {) ?
{
- m; _: \' b d+ U
for(j=0; j<5; j++)
: N" |- h8 P' C+ O7 I
{
% f8 R5 x: D6 _5 v8 U5 K* n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 P& C/ b* A% d
i++;
8 D: Z% V2 f( p/ V( z
//if(i >= 4096)
6 R7 [. J' v9 C% X) t
// break;
+ ?' o* t3 D8 q3 t5 B( u
1 M; X% A/ m& v; q n* {3 n
}
( g8 Z" a% a# l) w& ^' T
UARTPuts("\n",-2);
0 G( y& f# i5 N( z
}
# K1 D9 C% [+ v, J: f+ S
}
1 T: k0 k4 P0 H( R4 O7 }
4 V# s( u- R- @( O% ], q
}
* {6 r" m( M' D0 R% x9 T
2 [ \$ S$ h2 J7 X
5 t5 c |' C! n* s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: g8 d5 A1 b8 R: j& R
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; d2 _% K* L3 p* c9 }
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4