嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& N( @6 {6 c9 Z! y( `
Void UPP_TASK(Void)
" o4 H U% ~( a; p2 P+ c* d" b
{
) T. ~8 f b) |- {$ {! L
6 i$ A& { r2 U" \; u
int i,j,k,target_int_count=2;
3 G* W, S2 i% X1 v' f* y: d; @
char ch[2];
6 O, w7 B) n2 Z1 ]1 u3 r$ k
- u9 r; P" e: h9 Z% [( t4 W- C
2 J2 c- n) \1 h
0 q2 L0 p+ S% X$ n
upp_interrupt_count = 0;
; T$ U8 G& S# U6 V+ ]
upp_error_count = 0;
: s4 y. _1 |0 D4 f+ E5 V( ]
1 x4 u( m" g: V- _: S; z6 @3 M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 A1 I$ N# H* R# N( ^
// Initialize data buffers
6 |' O5 Y3 m& j3 x
for (i = 0; i < upp_frame_size; i++)
7 }+ O$ z7 L5 s+ J' W6 i+ o
{
2 F- x. a4 _- F" E
upp_buffer_b
=i;
) k, r% w7 e2 \8 M4 ]
upp_buffer_a
= 0xDEAD;
2 B) m9 G; ~# V7 F0 Q$ Y9 @
}
: U+ [$ F( D5 f5 T
/ T. u# X8 K4 b3 p7 v3 D
//for(i=0;i<1024;i++)
w4 ?* g6 L: u) L3 p1 S4 M0 _6 v
// temp
=0;
9 z$ s' Y( |. H* _
8 f7 H# Y- x+ W9 k( n' G
//UPPReset();
: n5 O3 ^1 ]& w% l3 ]
/*启动UPP DMA传输*/
$ B- {, r6 V8 h3 b0 F5 a. x
UARTPuts("upp_prog_dma_i\n",-2);
( M* w4 R0 s t: n9 H9 {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 E) E* W! j/ B+ v. O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. C) v3 g! x$ u" i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% j* n+ [8 F2 Y) o7 A: v
7 L+ \, a( G: B& z3 F/ f
UARTPuts("upp_prog_dma_i\n",-2);
7 d# V' Q" e* {/ ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( a: K( S# ^- M# e
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" H/ ^4 h! B- j, j. ^8 a3 ]" I
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 G! x3 `& K% t. J' ~8 M$ W
0 i, D, M+ ^: |" W0 L0 } h8 H% o, P
/*等待UPP传输完毕*/
+ n8 w T \1 Q' Z5 }
//i=0;
. ?# K" _, ]# e, I/ u/ @
//j=0;
8 _: ~. u# h" d, @' f# a& a2 y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 U* x5 d( R" {- u7 Y5 U- u
{
8 X P& P" i& \: k- C, c
/* 测试UPP传输的同时操作普通DDR数据
! v7 S2 \& P" {6 p9 ?0 A/ F! p
temp
=i;
) C( \1 {, i* {, O: S
i++;
% Z$ a! H# E, b* {+ C9 Y
if(i==1024)
" z6 o- v4 t4 T6 q: f+ \4 E# E
{
8 c& N4 v5 s$ l8 E( ?% F
i=0;
2 z0 \9 m9 M0 {3 I U6 }; K
j++;
7 i+ Y* m) ~: Y
}
7 h2 c/ M- D+ z2 E- s2 ^
*/
. D7 c2 i% l/ K* x7 b9 `
2 f; C D( ?" ?/ i: ^/ y# N: }9 T
asm(" nop");
* [) m# g( K6 G' m7 V) G
- T, R8 g* ]. o7 q( s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 w! o3 S3 }' j
}
x* I# }8 u8 O: q& c# E' S
) k ^: X4 b# x2 X7 V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. |" k3 |% c! v
//UARTprintf( "i=%d\n",i);
+ O0 e, ]% x, x2 E& B% u* V
//UARTprintf( "j=%d\n",j);
% m, E8 y" G6 L2 _, n5 `
UARTPuts("Data mismatch in buffers.\n",-2);
6 S+ I- u7 r. [% E
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 G; {$ g, k0 d+ B. A+ U9 l
{
8 h e8 D( f7 z% q- i7 ]
for (i = 0; i<upp_frame_size; i++)
" s$ B$ E" B# H" o9 Z
{
7 r1 ]3 `( G6 Q+ V u% E
if (upp_buffer_a
!= upp_buffer_b
)
$ f, J3 K( X6 t
{
- K0 O: } P( z! c. _' W
upp_error_count++;
$ Q) d" n% ]! T: A% @6 E% H
}
( _, S% ]. b4 L5 {* }) `
}
* ^1 a9 O' }. E! b
}
+ x( T+ v6 U0 a+ N+ R: L J
* p" E3 a+ l ^$ l& t5 I& f- y
/* 报告通信结果*/
7 |2 L2 J S+ f
if(upp_error_count != 0)
2 V9 h0 ]* b N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- Z0 U# d/ e) k* K& @* Q. C
else
! a; C3 i1 `$ c2 e
UARTPuts("uPP transfers complete!\n",-2);
, D' \2 I! c) V+ p0 x" C9 i; }
5 I% d& p- o% Q/ {( z4 U' r$ K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ f* |+ {0 R4 ]9 j3 j7 i1 @- W
UARTGets(ch,2);
: t3 M3 `6 ?6 `* c/ n2 k& U- x& U
UARTPuts("\n", -2);
% Z' Y1 V- O2 \0 _+ D
5 Q0 ^& l! C! G8 d% r
if(ch[0] == 'y')
1 [( ^/ ]( k; f$ L* D3 Y4 X7 _
{
! k* y' [/ j" v. y4 k6 N
/*打印全部读到的数据*/
9 _7 x, c8 s' i0 ^3 L
for(i=0; i<upp_frame_size; )
: G V6 N* g" H. ~- x4 v5 t
{
' N* ?8 `. @7 m' T* D
for(j=0; j<5; j++)
o0 G! o9 ?8 ?6 g ^
{
M; p: D6 [' O) j" O/ ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% U4 M9 i, j1 T2 b
i++;
' J# Q3 r* m$ `8 i& o6 ?6 D! p
//if(i >= 4096)
$ _- p9 K* S6 ]' U
// break;
0 a, a$ K- ~" ^+ [
$ J" u; o' J9 `$ t, h
}
/ [* b% M) J. }) [7 Q
UARTPuts("\n",-2);
. ]9 D" t! K( z, f* Q# B4 `* h
}
$ O* z$ \9 I5 t3 a
}
% D3 i: T/ E4 Y5 ]+ g7 z
; S$ l$ f e, {7 J9 u; q
}
! u- A% {, P# Q+ J+ U9 a
5 K/ H' I( ~3 ]8 n% u! w$ x- F9 m5 ~2 u
' X' s2 C; J3 \; z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 f6 i9 c$ Y) K6 ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" B9 L, x" ]! ?, n
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4