嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ r5 f/ @& q6 D7 x
Void UPP_TASK(Void)
+ P5 D& ^! u& y) K* l
{
' @) B* j! p2 o6 [# Q
( s% m9 E8 q" Q. V0 k8 i, c L
int i,j,k,target_int_count=2;
$ N1 b' m; m2 \1 S) U
char ch[2];
5 x. u6 O2 \' _+ X. J
$ }/ V }! A" t2 A2 w) y5 I
! a3 G- t8 _: H# b6 x
" p. q- G8 s, A& |( ~5 Q, p% E
upp_interrupt_count = 0;
) F2 t! ~$ V3 Y! [; A
upp_error_count = 0;
/ Q) @4 t r K% S$ h* V( O
! d$ ?3 h& } L, V/ U' J$ f+ P
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' F9 u' i1 m4 { ?1 I" A! Y! E
// Initialize data buffers
: i5 ]9 s# ^' M5 V
for (i = 0; i < upp_frame_size; i++)
c) [( p$ B0 L' L2 y$ F; t
{
- Z# g" C' s5 D
upp_buffer_b
=i;
v$ B+ c' t' [6 i
upp_buffer_a
= 0xDEAD;
" m C8 I3 V- V1 ?0 s- E( k& `
}
; K0 V" ]0 P4 z* U2 n
$ j3 Q# v$ O: w- B! A4 o
//for(i=0;i<1024;i++)
1 f/ S+ k* Z( G
// temp
=0;
$ Z) r4 Y3 @6 Z, ^
[$ P! N' ], b, n7 D9 \" V! z, l' ~
//UPPReset();
4 Q# {6 {& `( S
/*启动UPP DMA传输*/
7 o; T. [! |( K: \7 [* ?
UARTPuts("upp_prog_dma_i\n",-2);
( @+ ^% L7 z7 ?3 ?" O9 }5 J8 Q& V9 J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" X7 |; {9 v1 B& l' ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 C. ~& {( p6 J! b
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) r* A1 N j/ ^2 e- o' J
3 @4 l4 [ o3 j
UARTPuts("upp_prog_dma_i\n",-2);
. G( _& i1 v8 @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 Q) Q6 q9 O4 _8 M" |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 W; K( U3 G6 z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 W6 x* x5 o" ^5 [/ t
3 X: Z+ B7 O# ]: @, n. a: R, O9 E
/*等待UPP传输完毕*/
% b- B( h; C( I9 i
//i=0;
" v4 Z& _) ?( {8 \! d- O
//j=0;
+ F$ I) Y. U) Y- B1 N- M' @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 ~3 k4 l5 {& y- R" R
{
2 G3 t. r( I% @( c7 @7 l! m9 c2 M
/* 测试UPP传输的同时操作普通DDR数据
4 d* e! A* [9 ^ E
temp
=i;
) Y) t& a5 g$ ^( u$ E
i++;
& s$ m* z- ] i+ \4 z
if(i==1024)
( l; {( |- F7 t
{
' v0 O. J# _4 M0 W. l
i=0;
7 {0 P. ~% T4 \4 Z
j++;
5 e9 c. Q# Y+ z3 H* m5 u& }
}
& Y ~5 x, ^+ v( G& e+ t2 P
*/
) [2 h. M- O; T4 K0 u
2 l3 B" v% Z) J6 a6 @! u
asm(" nop");
, v5 `9 C. f- \' p7 p3 U
+ Q; }( m* B. ^7 n& }7 P" F$ |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& ?) W$ S; ~; n: Z/ N* O* h2 [1 A
}
C8 J1 J/ J% D% C, }3 P) i8 w) ]! u( J) |
6 t8 S1 ]' T) K5 x/ D2 g, J
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ D* f! U5 X; a" x* r G, e0 v
//UARTprintf( "i=%d\n",i);
8 {, } P l9 `! @6 n
//UARTprintf( "j=%d\n",j);
- w J3 Z; u% Y/ g9 x- W- X+ ?
UARTPuts("Data mismatch in buffers.\n",-2);
: ^; P1 D4 ^# ^2 x
if (upp_interrupt_count == 2 && upp_error_count == 0)
! B$ R5 B$ T# _9 _
{
0 y6 U! ~$ d5 J
for (i = 0; i<upp_frame_size; i++)
* I' n# l% D1 w5 ?
{
( P0 j3 A! h% ~/ J! l( L
if (upp_buffer_a
!= upp_buffer_b
)
1 j l( h, ^! }# L
{
) a' G$ G8 Y% k! c# G9 k: M; X' k
upp_error_count++;
# C) r! @ D" \8 b
}
( T! E% s5 H) Z3 ~2 @ ^4 f( n
}
( [9 p7 m/ V# J t% y. v) ?3 q
}
* o6 w5 a: N; ~# x
$ d- k. o* g) Z/ c
/* 报告通信结果*/
9 h% W, B9 f( b6 O7 u
if(upp_error_count != 0)
7 s6 {& L7 a6 Z" [5 Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: q, a8 d. u. d; F8 W- ^ N8 m
else
+ {, g4 h T' L
UARTPuts("uPP transfers complete!\n",-2);
@ \/ e5 s5 `
) {* Y3 n) B* V' o8 y0 T# q$ p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# z! H5 I2 R. _5 C8 l: c4 Z: B B
UARTGets(ch,2);
. Q2 N& k# V% x1 I. ?" X6 B
UARTPuts("\n", -2);
" o; K- B4 U5 P- D7 g8 M
* | e y% Q& B! ?1 c0 i( _
if(ch[0] == 'y')
# d7 [7 S% G' e/ H, A
{
. A& g" u5 H4 X
/*打印全部读到的数据*/
: G. A, Y' p) ]
for(i=0; i<upp_frame_size; )
( Y8 _4 i* o6 p" f
{
; {. E6 Z9 ^9 N1 C W
for(j=0; j<5; j++)
9 q# C0 u) z* Q
{
( S) L# R# \( J% R( c
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 L' F8 t, J$ F
i++;
T. v4 g R& u6 E L
//if(i >= 4096)
( |" B" K% Y: v; T, I# H$ @
// break;
9 s3 g# |. d2 H. H2 f7 e' K( B3 l. H
0 t0 p# F& m0 F
}
) h) T% w7 k8 O9 ]: L. X: I
UARTPuts("\n",-2);
& v% M3 P0 U( a, p4 h+ ? G& @" k
}
, g, r$ B) V. \. M
}
0 b5 z, @6 [$ C5 Z+ c
, E- W' l- P3 o4 \- ^/ I/ E
}
6 S- _& ]+ \5 m7 I- t. A
6 T/ C8 x. U) s/ ]/ c) V* G
+ l4 W0 Y `( Z2 M8 I* w) {
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 w* g% ]- ~: [* W- U" `# l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, h: u3 b. ]7 ]6 q9 I6 J
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4