嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( y& _+ [6 C; x8 l/ Z9 S9 y
Void UPP_TASK(Void)
% ~, o6 \( s; e" y5 @3 }
{
' U& K) X+ _) C7 c" V2 N/ R
2 l7 U, s; y$ e0 A: B2 x
int i,j,k,target_int_count=2;
0 x' a5 z# p; a5 {. w/ ], f3 `8 r
char ch[2];
- }3 n- D( H2 a) |3 } O4 o
/ d# p( Y4 X r# c. D# X, ?
, s ?* G2 T3 z
: w; U) L3 l' \- r& o" B
upp_interrupt_count = 0;
; r2 n R3 n5 _1 F0 \. t8 L
upp_error_count = 0;
" y* j$ p) F0 I4 w( z5 T
1 J% _. h3 _) o- {0 w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ Z+ h* n9 T2 ~
// Initialize data buffers
) ~6 E( r$ d; b/ f
for (i = 0; i < upp_frame_size; i++)
: ~: P/ x0 j& n6 ^
{
* _6 K% b( `: h* F) U
upp_buffer_b
=i;
4 v* l. l+ {" E: T" i, z2 v5 t, @
upp_buffer_a
= 0xDEAD;
5 u( H4 E: B& [1 B5 {2 E+ N
}
5 |$ i& d' L' Z8 P+ M, p
1 p4 E1 _: Y1 R. C) F! Y' C
//for(i=0;i<1024;i++)
1 _; o" h" B# J" \% A
// temp
=0;
; ^' ~# `: h7 p3 w6 M
* I9 \! O6 ]8 w5 M# J0 C3 e0 l6 V A
//UPPReset();
9 O* T$ M0 E' Q' ]# z
/*启动UPP DMA传输*/
% ?4 ~- _3 H4 Q2 y% R6 j( Q7 S
UARTPuts("upp_prog_dma_i\n",-2);
' ]/ }1 {! V6 A
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& x l) B4 M. f& _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& G$ A2 S: V) A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 b) f9 C' I: w% G r) X) f
& p" ?+ b/ M! B. z( T
UARTPuts("upp_prog_dma_i\n",-2);
+ ?: \3 c& X* \ p- \
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 j2 M3 z2 |* a4 t( s2 [0 r# s: c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' ]" }( y' {/ Y4 A: V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, }8 V: ~# p& q3 J9 {3 P
; A* I6 F# _1 a( F+ h% x/ E
/*等待UPP传输完毕*/
- u( z- D7 z! \
//i=0;
8 _8 ~* I+ u- ~7 T' S+ S
//j=0;
: H1 K$ p" R6 E5 X' T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* s( H/ C6 M+ ~( Q! I
{
$ O q: t' o' D; v+ n
/* 测试UPP传输的同时操作普通DDR数据
2 O* F& u5 I! t4 @9 l. R
temp
=i;
( Z1 p$ D+ r a! L
i++;
^1 Y A! \( z$ A. D4 [. h9 k
if(i==1024)
9 l! Q- P- B$ V2 ?- T5 ]
{
& g4 A! c5 x/ P6 H0 z3 K
i=0;
) h( u/ _5 x4 }
j++;
( Q [, H# `; q7 V8 H. @2 h# |5 i
}
# `/ b. S+ _' F7 v0 G
*/
0 {- k5 w0 Z: a5 I' z! B/ t- W
1 B9 ~* u/ T& O/ t. d
asm(" nop");
. p# N" R- s$ ]) |( N+ h
, s4 p- G6 S. h5 |2 G0 ?3 G# {7 b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 ]! U8 r6 T# O0 W; L! N9 b7 f
}
6 ]: T" D1 n$ h6 U6 p
1 {5 L2 S+ G; s- d; L! d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- S6 H* l8 N# M* n) M
//UARTprintf( "i=%d\n",i);
7 t2 I4 u$ d2 A' [1 G" R7 N
//UARTprintf( "j=%d\n",j);
, q& g) |" t" |4 f3 o
UARTPuts("Data mismatch in buffers.\n",-2);
( f; \5 l1 B+ |9 D
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 I$ j4 T: K/ {1 D3 M9 k2 p
{
0 H6 ^! t* m6 C0 O7 G! l
for (i = 0; i<upp_frame_size; i++)
5 o$ y: e/ B& U0 c, N% }
{
( H5 {% G/ V, M) [2 I& N/ P. B
if (upp_buffer_a
!= upp_buffer_b
)
$ L+ m/ F5 {& G" D+ k# s! q
{
- p+ B1 y. x% K: J- N1 m
upp_error_count++;
3 g& q# e* M/ Q& h& }
}
7 C& j5 s$ i$ i" P. L$ N
}
5 M v& ^; I0 U3 b" ]5 ^" J2 C( Q
}
% [/ y# Q1 b( @' ^
* a7 p8 P1 G* s3 F' s
/* 报告通信结果*/
* m5 n2 y2 G4 L
if(upp_error_count != 0)
3 ]6 G& h! x' L, b+ p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* ?; }( {6 m, n& r
else
; }( h" D5 t ^$ n/ R) v6 ?; q- v
UARTPuts("uPP transfers complete!\n",-2);
" B0 G, o1 g* t1 I; l: F1 x
4 z7 _" S5 N6 z6 I% S# m0 |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 o: q; U! e2 p, x# L
UARTGets(ch,2);
p6 Z X; \7 p1 u
UARTPuts("\n", -2);
9 Y' v9 _& R2 W
( A5 A1 Z7 t, n# X9 |& n
if(ch[0] == 'y')
" v% R5 ]) m; }! l0 m1 w9 j% ]2 N
{
8 v, v: U) [5 Z$ r) I' n
/*打印全部读到的数据*/
) H* J8 n! j' d+ X7 j6 Z; x
for(i=0; i<upp_frame_size; )
2 b! D, `/ i, s* P4 ^! \% G
{
* r6 L0 i8 @ Z1 e/ O. A' b
for(j=0; j<5; j++)
8 ^4 g. v7 I1 K+ O3 R5 t! u& P
{
" s5 [3 ^) W4 z+ x3 P% W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 ~2 w3 G3 n4 a" V
i++;
/ @ b9 j8 X' ] s; a" Z; o+ ~
//if(i >= 4096)
. e! N+ c: O9 _0 T
// break;
0 z) ~2 o; H: ?7 N
7 O/ f9 M8 V& N1 R
}
7 Z3 l* w; q" @. S
UARTPuts("\n",-2);
$ j( v0 M" R' k: ^" y
}
/ |# d b. @3 A
}
8 \ s% J3 W; q: O- H+ B6 m7 k
- Q }% u( p1 `1 E8 P) B1 Y" }
}
' M2 y5 h& N; I8 |3 ~' x
; C0 {8 f# P" K8 t# B
7 @* k5 t, B s5 H$ |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ ?$ L# [& `' o. k
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 N+ [& D) W3 k8 c9 Q0 G, w
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4