嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ D5 j- k6 v9 g+ G' p* I0 w( b$ u
Void UPP_TASK(Void)
" {: `* ?* ~" l' Y- Q- P- Z
{
: ?" {. H/ b) O" r
! \: L0 I# _4 N
int i,j,k,target_int_count=2;
' s2 w2 A7 t- X# }
char ch[2];
$ @9 P7 {/ q+ c* W5 o
; U; X1 R$ U4 f" C' l& `! p0 t% k) ^3 b
: O, H* b ]% P9 M0 `
: [& O- W+ |; n5 f
upp_interrupt_count = 0;
. k" ^9 `6 H7 F, |- y5 U0 m6 U; G
upp_error_count = 0;
7 ?+ Y6 m8 t: m% l7 q( k
2 h* k# ^% ]# j# r. u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! o* ^+ M8 V* e3 c ?5 t
// Initialize data buffers
/ E7 ?5 `/ Z% b
for (i = 0; i < upp_frame_size; i++)
* Y: }* G b- `& e8 |" |) x
{
4 R7 x- |% ]# d8 H7 H
upp_buffer_b
=i;
) e, _4 W+ O- M0 w3 a% e
upp_buffer_a
= 0xDEAD;
i. z1 v0 f9 m
}
5 L3 ?7 _; ], s3 j
' n( i, v4 Q3 I+ Q6 ^
//for(i=0;i<1024;i++)
; u# G7 c, z ?& M( e
// temp
=0;
8 p( N# v$ k: s9 ]% ?$ x, v9 }
5 m) @& n( h; G/ a* T3 j
//UPPReset();
8 k/ O5 T6 ^* n1 S
/*启动UPP DMA传输*/
. h1 G* i/ P3 w; {: j5 f: V
UARTPuts("upp_prog_dma_i\n",-2);
, c! R& ~+ z$ M5 y# H
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( \, K" y+ p* ]
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ N/ o% E! `7 H8 T ^2 |9 m/ u; A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 {' L R6 B1 ^- m' Q+ ]# V- l9 ~
& R) [4 h$ n; h& y$ L+ y, ?& Y' G/ @
UARTPuts("upp_prog_dma_i\n",-2);
2 s$ h/ r9 d% ?4 q" Y/ y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' P: Y2 {1 |/ |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, }% G1 T1 P4 c: m, X8 n
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 L k' m3 H2 v
0 D$ m5 H6 k" h$ u3 o m; ^& c
/*等待UPP传输完毕*/
8 n3 b$ d+ b; a
//i=0;
( y0 Q! A7 t7 W/ } `+ a5 w# j
//j=0;
( [- Y# C- F' R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; @" w9 s, p. K& }7 R
{
0 U* F* I R+ d) S+ J" Y
/* 测试UPP传输的同时操作普通DDR数据
4 e+ F+ f4 ~0 e( a$ Y
temp
=i;
* B- f) i; d* p- C: B# M
i++;
9 B, `- W$ T- J5 z
if(i==1024)
" f2 Q) i; P. }6 e
{
" S& m& K- ]& {' V
i=0;
2 A5 {" Y" n E* P! W
j++;
3 }( M) D) J2 a! E) g
}
9 b2 P) E2 |- L+ n- \1 o. T
*/
9 d' z- ]& Q8 F" n+ z
+ |* r# C0 k: C) Z8 h
asm(" nop");
( Y: o% F( B# d5 L; i) Q$ S
% W+ A& |6 F' v, W
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ K- I" f3 U. S7 e4 x6 I
}
3 ?2 E$ f" n/ o: W3 [3 d
& Z3 v4 c9 U) o% ~# T! I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 [1 _4 @' H% M0 g! Q8 O
//UARTprintf( "i=%d\n",i);
+ _: c( S8 m Y1 J& h3 U$ N/ i* I
//UARTprintf( "j=%d\n",j);
; ?6 d' j% g7 g/ K& L+ t
UARTPuts("Data mismatch in buffers.\n",-2);
8 }3 Y( a; _; b: x! k
if (upp_interrupt_count == 2 && upp_error_count == 0)
! P$ h) d" [6 v }: C
{
/ v6 k, y# ]1 n7 \/ T' d$ m" R
for (i = 0; i<upp_frame_size; i++)
0 q7 U4 M9 [. |- m2 \) o( c
{
5 G/ n3 |1 ]5 s) S3 D
if (upp_buffer_a
!= upp_buffer_b
)
9 k' ?, d0 d c$ X5 e
{
9 z- g. j7 Y, a" }& Y
upp_error_count++;
/ j6 g2 {6 N1 o6 |6 Y+ ~/ Y
}
8 L8 }7 A% Z! ?. J! q/ q/ J
}
! K0 {- ~3 v* A' G$ J0 n6 c+ h
}
' c, [- i5 o, }9 t
3 g$ y# n8 ^* Z. }( p
/* 报告通信结果*/
: N( a0 e6 }0 z9 ^; h) q
if(upp_error_count != 0)
! M: Y7 m1 ]0 Y) N; m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 l d/ T! [! |8 J( H
else
3 E. G/ {8 A5 V3 \4 ~
UARTPuts("uPP transfers complete!\n",-2);
$ d8 K& X: }: h9 b) t" A5 s! j" h
6 X/ ], [& S4 Z' H$ m/ o
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ q0 Q* ]2 a, A4 l
UARTGets(ch,2);
U8 [" M, f+ v6 c4 O4 Q" P; R
UARTPuts("\n", -2);
& G! Z M& n! t, }6 V: y, R
" f' H0 [% ^: A( S# l5 S8 g
if(ch[0] == 'y')
9 k$ F9 k3 p" y' ^
{
5 `. r H3 t; \7 T
/*打印全部读到的数据*/
8 f! y( r# P' P$ ]" m) e" J8 D8 A
for(i=0; i<upp_frame_size; )
2 p3 V+ ] l$ a2 S
{
; |3 K6 Y: X: u
for(j=0; j<5; j++)
: z% D$ N* H% [( O
{
, f8 W4 s1 _, h! B3 X
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. @. `8 e8 y* a v+ ^
i++;
- @( N/ u8 F* T8 C, l, `1 g/ t
//if(i >= 4096)
& D% z1 C# X- C. a# B& [% i( |2 F$ v
// break;
1 R2 p w( m* Z! b e) E, q/ o+ O
% N/ f1 S8 P6 u2 }) a( _1 `" A' N$ q
}
' u5 |( ~1 {" T# d+ `% h, D
UARTPuts("\n",-2);
8 u7 c: I+ r$ u" b( f+ [
}
/ L; s9 F. ~: G. G; Z& `
}
5 p4 u5 K* M5 \4 U9 g. L! J
: I' d+ S1 ^0 F. E" u( Y+ b
}
( l4 E5 U; _# B+ d
$ q; R% ~8 `8 ~0 R) I7 Z4 X
! x B: Z3 e, r8 i# a& }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" f1 n7 \- i/ f6 l/ @
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 M, o( O; R2 d: L( k
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4