嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! Z; ^) y2 |2 n ?: N# \0 @% g
Void UPP_TASK(Void)
7 X/ p- @5 f; [6 O. F
{
, J4 ]$ m1 |8 R; R& C# q
2 ~5 s, [" J: d$ x) @
int i,j,k,target_int_count=2;
' s. R( J% y' ^- T- ]* K& e& w; W. O
char ch[2];
9 A$ w0 f+ _7 Q8 |: a% |
8 O: d, V8 ?8 a
- t3 J( Q- ^. Z+ j& i
; P5 l: l1 u) |6 W) j y/ X5 W* L
upp_interrupt_count = 0;
1 H$ J' G! d5 O5 [/ E c- A$ `
upp_error_count = 0;
8 b: U$ L3 Z3 {0 M! I
+ i0 U( E, v( B. ]+ ]6 }: r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% I# }9 R$ W; c' Z. K6 M2 V: h
// Initialize data buffers
1 a2 ]8 \5 R$ k& V! C$ i, c
for (i = 0; i < upp_frame_size; i++)
: z2 \1 n4 I3 V" k( k0 p
{
' m0 E5 c: _- }& U
upp_buffer_b
=i;
1 O" \$ p3 o2 C4 j, A
upp_buffer_a
= 0xDEAD;
. V- Q6 O% n+ o/ A
}
: Y: X1 y% R$ H, ?; q! C& s
' F2 Q% R$ i& }2 H5 R t7 K6 G
//for(i=0;i<1024;i++)
& Q- m0 Q. t6 o+ ]& g
// temp
=0;
+ N: ~9 A( _! ~( k
6 X( A9 i$ ?0 x3 X3 Q; t; Y
//UPPReset();
4 ^. S# x; [, ]( q
/*启动UPP DMA传输*/
/ A, n R0 r8 U+ x: t: a
UARTPuts("upp_prog_dma_i\n",-2);
3 j# j& _5 c( M5 Y2 o0 F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 t9 v* k3 ^% P3 e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ O+ @ h7 m$ P
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
z- e3 k S. ]: M9 v
+ X. m5 _3 Q' F5 C. F
UARTPuts("upp_prog_dma_i\n",-2);
" Q& s9 Y% P* z0 z4 Q8 D7 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 d! c$ M$ V0 g2 p3 R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& l. h2 a5 {# Z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; i5 K; a& f0 M; d2 v, N
, R, \" w) u( a7 r
/*等待UPP传输完毕*/
3 l& b x, C5 }( ?
//i=0;
2 c; }$ G+ R4 U# p2 ^7 m( Y
//j=0;
+ t1 M7 C; E& v
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) q) N( M4 @: B( j" [8 i
{
/ H" l, S3 F* c! `& p" i' Z1 S
/* 测试UPP传输的同时操作普通DDR数据
9 R9 Z- L8 _" d/ @* X, a
temp
=i;
" g# [* l) F# }2 ?
i++;
" | G" j! i% r. u0 `" S
if(i==1024)
- A, [# M: J# w# z4 [
{
3 h- v' s8 Z b
i=0;
5 o% h* o% ]7 u! q! `
j++;
7 L8 F$ \* y6 f5 j
}
+ k8 s* m6 ]: c( Y1 ]1 w) a( g
*/
- H/ C* n z& \" q/ \
) ?# y# G$ k! [+ @' T" H* a
asm(" nop");
6 f# l" p% k5 b: ^- D
: u* ] y6 A6 ]1 Z9 K; P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 \5 x' V/ [; s9 c( h. _. _# y9 t
}
2 R$ g8 z- S; T0 q+ d
4 J( B$ M2 y5 y# l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ ~. J! J* d5 r9 q& X
//UARTprintf( "i=%d\n",i);
& L% Q* A4 Q% d: k
//UARTprintf( "j=%d\n",j);
0 ]! l$ z6 e$ h" l4 l' o
UARTPuts("Data mismatch in buffers.\n",-2);
: Q2 R- w: d& I8 V6 l& v$ h
if (upp_interrupt_count == 2 && upp_error_count == 0)
) c/ x8 F6 c; `- M4 ?7 W- o9 l
{
$ w y0 H8 J; `/ H3 \, c* l7 s
for (i = 0; i<upp_frame_size; i++)
& [) @ L, l* t9 h; [3 |
{
9 \. n5 Q- n# R1 q, q. ~2 g
if (upp_buffer_a
!= upp_buffer_b
)
0 V5 N: |& b3 q! G- D) ]
{
) J- a4 j! ]4 m l$ I! V3 S
upp_error_count++;
* U1 r4 P/ ?; i1 J+ E+ C5 N5 _$ G
}
; H7 N3 |, r! D5 W
}
5 P# X% t1 `2 ~* h$ |0 w
}
' ~, k8 L6 e- S# y, K& j! O8 Z7 y
" s+ l l+ y/ I' @( k6 c& g
/* 报告通信结果*/
6 ?3 H5 A7 o$ f( I% B) t) X
if(upp_error_count != 0)
5 X2 r" z- n) Y% e1 q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 ?/ j9 v+ n9 K1 A; U
else
* k9 p& S' J- `4 c. H( z( V, H8 V
UARTPuts("uPP transfers complete!\n",-2);
2 n6 e- q" g+ o# e7 S; z$ L
, O' c8 p# {7 {" `1 u
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# b) z, M L/ ^/ g$ }7 G9 ~
UARTGets(ch,2);
, r8 A/ C. h1 A I$ Y/ m
UARTPuts("\n", -2);
' P: v& t: Q3 | h- k% X5 w' V
1 o4 [. y6 U" q/ l
if(ch[0] == 'y')
* L6 k. u3 c' B4 @7 y3 U3 m
{
& a% u6 p$ z# R0 M X
/*打印全部读到的数据*/
5 b# |/ Q( c$ F6 s" l0 i# G
for(i=0; i<upp_frame_size; )
2 H w3 z/ A. F" G; P
{
/ i) M2 i6 ^+ c8 \7 ^& K3 {
for(j=0; j<5; j++)
5 a8 ^2 R& W, c) y: i' [+ G
{
# A! g5 L$ G' M5 ], n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* y+ _5 r+ C% Z4 U+ F& a, ]7 l
i++;
- @, g9 T' r; P8 m; `: N8 V
//if(i >= 4096)
2 Q; p6 [6 L) r& n6 Q
// break;
0 P$ x5 E3 `. ^3 G3 u& P
) K! [1 d. Q' f! H
}
# N9 g3 a2 _- C- C9 H
UARTPuts("\n",-2);
! C, i+ c! a& ^
}
: `# S* K5 }7 p) E6 e3 a# ~% J
}
; _5 d! Q2 u" j6 N! f0 ]
2 K1 J/ B$ h4 G* i/ O6 F7 Z
}
; b* x3 V1 g$ g# q8 |
r+ J2 p& ]( c) u1 t
/ W* P( F" J. r# M( b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% L0 `) G; {7 S" t: n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ R# s* s; e% m
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4