嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* o0 J" ^$ P& e
Void UPP_TASK(Void)
3 B" ^( i' ?7 Y( @! _% |! T" p' H
{
- s) E" m. H2 N; [! V7 m
4 T9 @. t" v" b! J; p( ^# c% L- t+ O
int i,j,k,target_int_count=2;
' g b. Q3 Q/ p
char ch[2];
, x. n: g- w; E) C& v1 T0 I# B
( ~, `9 x7 m+ q }) C1 ~
7 \- ]: t' @9 ?. s7 C
, A8 r: S5 i" @% ~
upp_interrupt_count = 0;
, W4 F0 U% D9 |/ A9 b( m
upp_error_count = 0;
, m! F4 J* m# q- W. Y _7 u
* C+ }( T5 \. o$ W2 F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 m/ O* j- U) u$ F4 M3 e4 B) Y
// Initialize data buffers
" U; B8 W- K0 Q- h: Z( U4 j
for (i = 0; i < upp_frame_size; i++)
9 B9 ~8 T3 N% b1 y+ O8 A
{
2 P3 @( {. X. t
upp_buffer_b
=i;
/ s7 [' t2 m( w, C! O, Y
upp_buffer_a
= 0xDEAD;
2 k J( u4 Y7 P l5 U
}
- f/ o% z5 }/ ?! G. c1 g- Z& t, {
; \' c( m9 O# g- o
//for(i=0;i<1024;i++)
/ K8 }1 h; ` B/ c
// temp
=0;
S' a. P3 v0 D; M( x- s, K6 e3 a( b
3 V7 D7 O) c& i$ W! O" H5 z
//UPPReset();
+ y. s4 F! |5 j0 u! A; M! S) d* b
/*启动UPP DMA传输*/
9 A+ A6 O4 g0 F3 x' \2 q4 Q! Q
UARTPuts("upp_prog_dma_i\n",-2);
/ y0 G4 B& q/ ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 c: h0 e8 r- [; P3 ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 n1 A* r. y! ?8 N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 U2 \; Z. q' t8 o; } A
+ a4 B* \& v) }; A: J# @
UARTPuts("upp_prog_dma_i\n",-2);
" Y: ^* Z6 u. U2 h+ I5 f" p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! I% R4 a, [* S3 Z; v' u( F& i) q* K, c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" j! _' O1 r& M: f7 H( j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& A5 y/ \8 W. H4 p
+ b5 W& E8 m8 E) I0 O4 }
/*等待UPP传输完毕*/
D( d5 ?. f0 U, H, X1 ^3 x
//i=0;
+ O7 n7 R. _1 j! @" M
//j=0;
; Z$ P3 g+ t- V0 q% \ N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% \- B4 u1 o7 d; Z$ [, C' f
{
6 W2 { M' p' C4 i0 H3 Q C/ l
/* 测试UPP传输的同时操作普通DDR数据
9 M- n9 y3 W3 |1 n
temp
=i;
' G1 }9 }0 f! p/ U2 }$ R3 a
i++;
0 }9 Y0 K/ q( n) R9 x# ^
if(i==1024)
2 w$ C) d. M0 a0 `3 W
{
: j7 [7 u) s2 t% F U
i=0;
. \/ }; _$ J, [1 ]2 @6 R- i+ D, g
j++;
$ Y& k% d- C% y, |
}
; @- ~. [4 g! v% h9 W9 r( W
*/
& q! X* u6 _3 S3 E; V
" t2 t' }6 Y; P2 I c
asm(" nop");
$ J) u& x! v- A" ]0 @* k6 }- I& I4 O
( s' j: C4 v8 ^3 {
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 q! L3 N% }1 |9 R4 o
}
4 t# Q) U! s3 p0 c
7 D; [! ?. d: M l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* i1 S3 X' b+ k8 j- x m8 H" c
//UARTprintf( "i=%d\n",i);
( V; h/ j) Z5 L) h; } W
//UARTprintf( "j=%d\n",j);
5 ^- P7 s0 F5 n: N
UARTPuts("Data mismatch in buffers.\n",-2);
5 V! b7 Q# |) l) ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
. ]% f6 E: m, z8 u0 q) J" a
{
# s) E4 ^/ O/ [* u7 x
for (i = 0; i<upp_frame_size; i++)
$ M# U8 ~/ R( j" b2 u
{
) `) E7 \. @- `. h* L
if (upp_buffer_a
!= upp_buffer_b
)
& f: n, a# ~+ _; `& f9 Y
{
1 r, [! d, W1 s7 G% T
upp_error_count++;
& G4 e5 p2 @4 Z- U* ^; g
}
* P/ V0 t# y, d6 x) m
}
. S( P8 D" u) l: a! c4 b+ j
}
5 _" Q8 @9 W* @0 H+ S9 `% X5 i$ U
5 y9 u: C# G7 N! l% Q
/* 报告通信结果*/
4 e5 d5 N( S1 L; B9 X6 p
if(upp_error_count != 0)
6 W7 }/ H+ t8 L/ z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 I L& ~, k+ n8 K9 M
else
9 G- w: m) b/ F. A& C6 W; I, ~( d
UARTPuts("uPP transfers complete!\n",-2);
$ a3 x2 }/ u1 p+ [7 b
- ?8 u- ^; z0 T% @+ f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 |8 F6 W$ G/ d6 E: g6 Z7 q
UARTGets(ch,2);
* p# M2 {7 B: }7 R, T. d
UARTPuts("\n", -2);
! X0 X6 d4 z B3 L. V! M
7 }& H5 H% E% N5 |: `
if(ch[0] == 'y')
8 Q8 O3 }- G9 f+ f9 E
{
3 A0 S5 p& | }1 ?
/*打印全部读到的数据*/
1 z! f$ u, }4 f6 g5 U
for(i=0; i<upp_frame_size; )
1 o" J* O. ~" K0 s
{
# U: k0 k& a9 P% d
for(j=0; j<5; j++)
7 ?+ N- t: l+ N) c& U0 `; e0 C: O p2 `
{
4 C4 U" c* P7 V% s! i$ ?% C! M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 q6 p- j/ C7 C) E h
i++;
4 ~8 u$ d3 H6 W4 G' z7 f
//if(i >= 4096)
( E9 {" y$ @% C! @4 m
// break;
" u$ T) h4 E2 L& \2 A! o
6 y/ u4 e |; x- j
}
0 z5 B2 ^+ C$ U6 l7 q1 w0 C
UARTPuts("\n",-2);
/ O* U1 j: @: \+ t
}
: l8 i' c6 u, J+ b
}
: K, v1 \ y; J4 ~! U4 p. ]
7 I" o+ R, t3 M0 r; C6 v' T
}
C7 p7 O( t$ |+ V4 k. d* ~
, Y2 f0 g% N$ K) w% Q
3 D+ R$ n4 E; s" s8 C9 F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. c1 ^, z% x7 y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 l3 n; B) |$ _% a4 ]
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4