嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" ~; V* @6 P% G( V8 l$ f
Void UPP_TASK(Void)
+ u; C" U2 K$ H1 ?- d/ P+ ~9 r
{
% u* x# [3 T2 A# r8 ^
: ?% `7 d6 _: i3 @6 o: ]/ I2 v
int i,j,k,target_int_count=2;
# T& R A, b( L! v+ ~
char ch[2];
. K% b" B. Z; p- z/ Q/ y: Q3 G
, m# r$ y* r1 u3 \
0 s2 W3 W& }4 u
, E+ a' S1 k9 z7 S5 m, j
upp_interrupt_count = 0;
! n( d: h O- a( M( E4 u* T5 e
upp_error_count = 0;
0 Y: b4 ?; ]0 J/ E
0 X0 ?+ u+ }/ g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- p8 l2 u' |. K5 |+ w5 z; R
// Initialize data buffers
3 k& l' G$ y7 ^! }/ D* i+ N
for (i = 0; i < upp_frame_size; i++)
, }8 a7 w0 X* b0 H; f! i
{
% }% n/ R5 Q! ]1 f$ l/ W3 @+ R
upp_buffer_b
=i;
+ S: C1 v" C7 |
upp_buffer_a
= 0xDEAD;
6 e6 t, i v b$ E) C( k
}
( h& s5 {9 G) M& h* J! m! O
; p$ I5 O( @7 f2 w
//for(i=0;i<1024;i++)
e6 l' l: Y- r, ~
// temp
=0;
0 ^, R- |3 c6 w% H6 h8 l- ?
" v9 D" X* ]! S& b* O, e5 N
//UPPReset();
C' \1 M( Z$ i/ H# P' F
/*启动UPP DMA传输*/
) u6 j, J8 E* l2 f- k$ `! v; k- M
UARTPuts("upp_prog_dma_i\n",-2);
& K( t) @8 g! l3 a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% l- d7 o% i- g- s2 e3 Y0 ^2 X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* A- B+ ^$ u, P& I) b3 w0 Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 U% Q% l- d* O+ {* n! o
( Z& v5 ?4 [& @5 ]2 Z
UARTPuts("upp_prog_dma_i\n",-2);
, ]7 @8 L! G! T: w$ S9 n% R; p+ t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: k: W* b: k6 k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
s( h1 J. w$ M& f& P: |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 T5 A2 x! ~" P6 Q; g
0 ~( h- L Q$ T: h
/*等待UPP传输完毕*/
+ u. T, _& v- q
//i=0;
4 U/ }; e$ @0 f& F
//j=0;
- b( N1 N; E" [8 M% e
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* V F! }" {. u2 Z7 m
{
0 o* O) C6 J, `! G
/* 测试UPP传输的同时操作普通DDR数据
" l5 j1 j+ G4 [/ J( p+ v. ^
temp
=i;
1 T; _# ~+ S7 T' l
i++;
; N4 f8 g$ K( U6 q5 [4 L3 F, u
if(i==1024)
# N- c4 D1 c* j% C
{
6 ~6 J9 i6 ?$ }$ J+ g
i=0;
# B, `; z6 t8 k7 z, @ W
j++;
6 u; a- t8 {' }- h
}
; B. q4 s3 P7 D; }0 e+ b
*/
& Z+ K% t2 q+ {
u" e6 q- Z; q
asm(" nop");
5 g) Q0 q* |4 M, `5 q/ r# h( O
0 h! B9 x0 K' Z6 n0 q# d8 `- i$ E/ Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# I, c- C% g% r' V; A
}
- l. D& R; n4 t% G" j8 r
( E! {4 g9 @ s6 F# |3 E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 ?. R, f; { f. O3 ?
//UARTprintf( "i=%d\n",i);
6 c4 ], t* Y' Q0 U+ f. `/ j7 J
//UARTprintf( "j=%d\n",j);
5 N6 a6 [8 ?$ @ }+ r# w
UARTPuts("Data mismatch in buffers.\n",-2);
9 u" x; z2 z) A n* f) c
if (upp_interrupt_count == 2 && upp_error_count == 0)
' H& h1 e. o( s
{
# x2 [* E7 T2 q. o
for (i = 0; i<upp_frame_size; i++)
$ @. D/ {' I, }* L5 b+ \
{
0 n- J7 w; n! E$ v
if (upp_buffer_a
!= upp_buffer_b
)
/ Q/ F$ \3 h0 _2 {; G8 m) Q
{
9 {% i* U; F( R8 ~2 |: \' z
upp_error_count++;
4 X; D5 [# ~" K
}
, L- g! j, C' v# G; r( `9 R9 Q
}
4 `6 O8 i! h. p: R- T
}
- N% l1 v2 k! m8 G5 D2 J( A& e! R
4 J* P8 j8 d7 s4 }
/* 报告通信结果*/
& n% y5 w3 c" K4 i) d/ c
if(upp_error_count != 0)
' m! a5 V- `$ i. p0 a7 L; Y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! D8 A4 ?5 ~: D2 H$ u5 k: l
else
# Q* Z4 Z9 H& v. V) ^: q8 }: L
UARTPuts("uPP transfers complete!\n",-2);
$ Q. H; I, \1 s+ O k% u
+ S0 `2 J J, O/ |# X: w0 F' O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
`7 P3 I/ F6 E* ?# `
UARTGets(ch,2);
: V" V9 b! {; C. r3 W" c
UARTPuts("\n", -2);
9 C) ^/ H$ E- N$ H1 ]
- j6 M' Y w0 K* j- n3 x8 J# U2 p
if(ch[0] == 'y')
$ Y/ T6 u+ z1 J4 w& t5 T% }
{
" a9 n) Q9 t W v
/*打印全部读到的数据*/
- ]2 s4 u* a) x3 Z7 [6 v5 ~2 t, v, U
for(i=0; i<upp_frame_size; )
$ U( D7 K+ z) K4 i; n4 {3 p" q
{
6 M: l$ u/ X# `% U8 k
for(j=0; j<5; j++)
5 `. y9 g; M3 E/ W, v5 L0 L& Y+ |
{
: W! _1 b2 {6 m1 Z+ o" E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. C) i" [' o4 `( r; W
i++;
9 I# v' d! e- f! k' H3 o1 Q/ D
//if(i >= 4096)
$ w" X; ^0 c0 p7 @
// break;
3 n, u% C* U. _# Y9 R; o
4 Z7 j! S( ^8 [. _2 E
}
4 R# d- v0 O1 x1 t* W
UARTPuts("\n",-2);
( @4 c) \6 H5 y$ E. { y
}
: }. S: ~7 w6 D% m
}
6 i( |5 @9 }' O X p+ c
5 ]; i- s. y* k* t4 i
}
8 p) Y2 y# h+ Z) c# D6 B+ i$ E% b
: p8 }) q, h3 _% q7 Q. P
' U( Q( f0 m* _0 F& ]' T
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ ~! w3 Y+ s% R5 U% i' z" w0 T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 j( v# |& A. W
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4