嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" Y3 P! Z8 e3 B" i* A
Void UPP_TASK(Void)
: \0 P8 h/ u& d& v# X% `
{
8 g; N" H/ c5 R( b" A2 y
7 S4 S6 V/ W0 k7 }9 i) ~
int i,j,k,target_int_count=2;
1 S* q* @, A& c g: h/ Y
char ch[2];
% `/ `, }! J& ?
& i- u# |/ r6 J
* O% S4 h6 `# Z+ l" [" s
9 v# x1 p% A9 Q. m1 [5 W
upp_interrupt_count = 0;
2 Q7 s$ A+ ?7 J1 v' H3 X
upp_error_count = 0;
& l$ L" y; R& ?0 Z; `2 C* M, a: @
0 r8 {4 G. q# |: |0 o, B+ d/ A
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 n; U1 ] \1 }- ?/ E4 U
// Initialize data buffers
7 M3 x& H/ q$ R+ a' z" M( i0 {; L
for (i = 0; i < upp_frame_size; i++)
! |7 I& N0 ^! C1 B# q+ Z/ P
{
2 g6 e" P3 {: R0 P) G7 z
upp_buffer_b
=i;
8 v) K+ C& {* i; H0 B8 J
upp_buffer_a
= 0xDEAD;
, Y, u+ o, I8 ~+ I
}
|# W7 M: k+ i4 ~0 x7 M: B6 o
# y& _' V+ Y H5 I* p. h( a
//for(i=0;i<1024;i++)
& u5 X" f3 J2 h6 H; o7 ^0 Q4 T; I
// temp
=0;
# W7 h7 m$ c1 R& @+ r% [* |
7 Y) K( e% U0 B0 ~9 z
//UPPReset();
( K( s( N9 W6 R0 C. U
/*启动UPP DMA传输*/
9 }4 p$ b3 J: o* l+ e
UARTPuts("upp_prog_dma_i\n",-2);
. s9 A/ a- o& O7 ~' I& V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 ?) Z6 [4 z# J2 d. y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ J. G2 A4 N ~! z6 z4 E* E- e4 I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. r; w' o2 F: Z' r. `- P" k
+ v* J; W4 w2 S; A8 ~1 ]
UARTPuts("upp_prog_dma_i\n",-2);
2 y1 |! e% {5 B1 D3 j7 e, R
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 V: r! v2 c3 j8 y) p$ |9 a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ C2 g+ d E- u+ s6 @9 f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ n6 q7 \" i5 a$ t" b. M0 F6 i! w, S
6 L5 r% x- J! d
/*等待UPP传输完毕*/
9 k+ d- W( H- M, m. R
//i=0;
! c& \7 S* s- ^# b9 V+ E8 G" }3 e
//j=0;
; F z3 A) p+ n( A1 n% A4 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; v9 E g9 l7 m7 H5 N
{
0 M$ v4 U+ j- l- _
/* 测试UPP传输的同时操作普通DDR数据
& ?/ B/ r; {4 A. b- y5 Q7 W
temp
=i;
# A4 q$ N# R" P0 n5 n
i++;
% }4 E" w- u. c! t, E) x7 J* y) f
if(i==1024)
6 }/ d/ n. Z3 [& R& c3 O# _
{
/ }* @; Y5 q) o2 f8 ]& e
i=0;
4 W+ l, s* p( c. \, |' |
j++;
5 u* H5 d$ t# U/ L) h
}
/ Z& U& r1 r; [1 q
*/
$ {. N k8 U9 e) }2 S: ~) K
* p2 N7 s% s- n# b) o$ T
asm(" nop");
7 t( Y8 b% S6 v' c7 \9 o
2 J" Q* n) ]/ C, H8 M3 B( A# u- h
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) g5 T" I S0 F2 Z" ~
}
% g! j7 Y1 C5 g# c: P5 Q7 m
" f" B8 E) z9 q6 i. J
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# T9 P* _/ \6 n/ o, A
//UARTprintf( "i=%d\n",i);
7 n) T% Q$ u' @; `, _
//UARTprintf( "j=%d\n",j);
: z0 c& x. u% M6 Y' X
UARTPuts("Data mismatch in buffers.\n",-2);
1 u7 d7 K' G& a2 Q3 t0 |7 ^7 }
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 H! c- q( D/ \8 @
{
0 n$ _, [1 y: w; Y
for (i = 0; i<upp_frame_size; i++)
- u$ f# h* ? M- h' i
{
9 l/ @9 C3 U7 `9 L& `" @
if (upp_buffer_a
!= upp_buffer_b
)
$ D e( h% T, U M9 i/ U
{
& Y) D6 E. R J, {3 ]" K8 a
upp_error_count++;
`, C4 `! |: C ~( Q+ D! U! ^! Z+ z
}
% x% \; B5 k) d( k
}
3 u( K/ f3 x* G7 p# ^8 J
}
0 ~$ d- t- f* M* e: V" U9 _1 C# H
$ X3 B6 o+ u; I* @8 n- ^2 W
/* 报告通信结果*/
) a! Z* [& ?" ?' U& l/ d' I
if(upp_error_count != 0)
: G1 @5 I* B/ o7 W" k
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. I! o% ?$ P$ h- m, a* c- ~+ z
else
3 Q+ I/ m" U5 u
UARTPuts("uPP transfers complete!\n",-2);
. ^2 w% h5 h2 f0 J' z1 S
2 ?. Y# t7 i, \+ g+ ^* B+ f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, v/ [0 s0 ^4 ]+ y5 J7 {) U" b7 j; Q6 N
UARTGets(ch,2);
& S5 ^, V- e) H. H+ w0 g
UARTPuts("\n", -2);
) b: C9 U1 x" T
3 i9 b/ F7 l% ~6 o* o- b% e- N
if(ch[0] == 'y')
' e+ ]; T! k6 z6 T$ a9 `
{
( W# Z4 y5 w( W9 P
/*打印全部读到的数据*/
4 f0 l( w1 _( W/ v7 ~. f4 W
for(i=0; i<upp_frame_size; )
7 d1 I3 l% T* Q' l/ L
{
* S$ ^% H$ x" y! T, Z+ o6 v
for(j=0; j<5; j++)
7 ?% b$ \* l! ?# H
{
* D+ [8 j0 q: M+ f4 ^8 T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
x1 g1 J: t" t1 T, g; G: Y
i++;
. Q7 A C/ T0 A* @& Q* K3 h
//if(i >= 4096)
) [+ r$ |# H# v7 H, }2 a, @
// break;
& r+ P, o( h5 v( I5 C5 X
S( c8 L1 u' u& c
}
$ Y" A2 E3 C }/ a0 B* ^# ~
UARTPuts("\n",-2);
8 b6 g7 f: d2 u0 K& k) K& w
}
* g( M n9 K) [# e% Y1 B- E
}
3 n2 v3 N* k+ S' ^2 K \& a5 l
! w+ c$ G6 i* W3 ~* t
}
4 ?9 p; Z; ?; U/ p7 u5 e- k2 d* f
) s" p t3 n+ Y. ^$ \' v
8 K: O2 O7 F) i
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ {) G8 I$ ^4 y8 C5 @
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( E5 M j" v$ U2 R1 t6 J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4