嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- H q1 W$ V1 I4 [ a
Void UPP_TASK(Void)
; z! z' n6 c. }- a
{
# c- S# M1 I4 x! n/ v' N( Y* T; c
1 \4 s+ G0 S I) D O4 v# c1 D7 k3 U
int i,j,k,target_int_count=2;
4 c8 h; I2 b. o/ K( t
char ch[2];
6 H" h2 s! t2 b) c6 d( _
( |/ J8 i# P" t; n' N6 P9 A# `. q& b
% ^8 S% s ^: m3 t# e
2 Z- ]; E- @9 P
upp_interrupt_count = 0;
) d2 s& i B; k( c
upp_error_count = 0;
' H: }- c# w9 z1 ]2 [8 D
. _. x. k. [2 W/ B0 ]3 H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 w3 |. P8 j# ?; {4 R
// Initialize data buffers
. B! m q' i3 O) r) l4 q7 F, [# a- h
for (i = 0; i < upp_frame_size; i++)
8 Z) ^" K3 j9 f" o2 S
{
( x4 x4 E- I( r3 J3 |) i4 U
upp_buffer_b
=i;
0 S* q6 t( R3 |
upp_buffer_a
= 0xDEAD;
: B) B+ Q6 H! s. }9 a
}
5 F% g0 g% ^' z, e& o9 {/ S
0 ]2 r1 U5 |! _6 p9 S1 ]$ j% W
//for(i=0;i<1024;i++)
7 Q! l; b+ S% \9 r, z
// temp
=0;
3 c" S! L! i) o; v, l
2 ]$ C, G/ f! j ?: p* j$ |" h
//UPPReset();
2 l: l* L, x' E( j
/*启动UPP DMA传输*/
. ? ^8 H' M5 `; X( b+ p
UARTPuts("upp_prog_dma_i\n",-2);
; K0 P' E$ f8 X8 `# A0 o1 j# E6 _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ H9 M; m; P1 N5 v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) v5 z0 x. i q/ a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" g' i) H" P5 [: h2 B0 `# Q2 p1 P6 r" I
. t" k& r. @ C% s/ X4 A+ u
UARTPuts("upp_prog_dma_i\n",-2);
3 b2 j; B8 o" r# l* n
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) v: \. \ G8 t, ?: K- y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! g& ?& c e1 `! T1 G" |/ v v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: \; n) u+ I6 c& x& z8 {1 n
4 q8 }5 O2 o* ~( n! ]
/*等待UPP传输完毕*/
1 H2 E9 B" h0 d: T& N
//i=0;
5 T% b; u u7 q6 c7 Y0 l" \1 }0 C6 c
//j=0;
: b0 p2 F8 [) \2 ?. q2 p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. ~# j( p$ o% f$ m
{
% D* [3 z' K% W5 U
/* 测试UPP传输的同时操作普通DDR数据
8 `, J( ^# B* C; r% `/ _# T% r
temp
=i;
. V( B+ j1 A( V1 b# q* R. p
i++;
/ S# y$ s/ @, ^; x7 i
if(i==1024)
! |7 T- g1 W6 W1 I; P& G. z6 b g
{
0 L: g8 o. ~) l6 B8 d
i=0;
- N( b8 S+ l7 [; x% X0 `% a
j++;
0 d( c. i! ^- a2 n0 t! h5 W/ S2 h
}
8 D# G* X& l2 P8 ~8 g
*/
. y: X* b* g; ~* q6 [" G5 _
" X7 Q7 I0 m. s) _& |# u' i, g
asm(" nop");
( f( L& k' L8 L9 I& _& |: A/ P% r" X
O0 m( I$ T5 f8 l6 m+ U* `% S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( L) @1 D: c/ q4 u
}
& d$ b+ h- e8 {7 V3 d) N
6 a, M) s% o, M6 r5 L) ` C+ [
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' }; l2 d( D. m/ D$ o4 @" Z
//UARTprintf( "i=%d\n",i);
% a) |8 o0 S& _+ }
//UARTprintf( "j=%d\n",j);
% Q6 d) K3 }4 Y, n/ O! a
UARTPuts("Data mismatch in buffers.\n",-2);
$ }8 p8 U/ P2 \: g3 o+ y ? g
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 { p- K R7 B6 y
{
& A% l1 b& v- P: w) p: a4 l
for (i = 0; i<upp_frame_size; i++)
3 n. D* N0 Y1 S B7 ~, O
{
$ ^* w* m _. c7 b0 B8 p3 ~8 p3 j" `
if (upp_buffer_a
!= upp_buffer_b
)
8 |0 K7 ~/ U# g( j9 |; G
{
! Z( {4 Q5 X+ U4 O `
upp_error_count++;
# V, u- J. i8 p- J* [
}
L( U5 t% t5 F; J ]
}
1 k& V' X5 f. Y1 r' e- |* \" ?
}
* ^# W& [; q! i. D! Y
4 o, S: j0 g6 g' X4 `6 U
/* 报告通信结果*/
6 o$ H! @" ]" q4 _9 {7 y
if(upp_error_count != 0)
8 v) N; N& d9 J9 k3 e; ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 |: _: N% a/ t8 d, E: v8 s
else
! j, d$ ~+ R& N' c1 w
UARTPuts("uPP transfers complete!\n",-2);
0 R% Q; K- h/ T0 P1 @" b. I Y8 A
8 n4 y! u3 z N" W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ N4 @' h* V8 j5 p" B% E/ L; \
UARTGets(ch,2);
+ w& T7 S/ | B( k" W8 V
UARTPuts("\n", -2);
. T8 W1 @. Q/ p% ^/ {
" ]7 z5 V( V: Q! P. K
if(ch[0] == 'y')
( k3 q6 X# d7 s
{
; \4 N L& w2 j8 V8 u- w& K( R
/*打印全部读到的数据*/
) v9 y+ q" h& i' m! r: ^
for(i=0; i<upp_frame_size; )
/ E% }4 p8 f" T9 w2 o
{
: X: P/ Z9 T5 F! @+ X) K# {
for(j=0; j<5; j++)
; e0 k2 k8 s% g2 \
{
: X5 W' S% E" M2 M$ y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& `- P' t2 \$ g% w. s
i++;
. p0 K" o7 B, A+ y" F
//if(i >= 4096)
9 Z/ c# e" m) |. T& D. |7 [: w
// break;
# h' _+ T9 G4 T9 B: D: i+ O
9 w0 n+ t5 n( R1 g/ M& Q$ h9 `
}
4 h! V9 D' E+ c" t8 }
UARTPuts("\n",-2);
7 u/ Z0 ~% K$ x. {% \0 p6 z/ V/ @) ^1 q
}
2 e! I0 \3 L& }
}
# y7 v* }- B: r
6 O3 M7 F* S# `* a M' e q& ?
}
5 }( _7 z9 ?! ^ o- C; T& E/ G
% l" {/ [6 I7 T. x0 D# r$ X
/ A" Q/ {) w8 _
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 i( N$ }* u# X; b- e! E. K# X
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 m% D* ?' D2 a8 z; u9 F- Q5 @" }% U
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4