嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% J9 k6 F! F8 l, |6 k( [
Void UPP_TASK(Void)
6 R5 t3 w1 p* x/ U G
{
& O4 O5 `; v8 Z; K" H1 |
' D$ R. R; u' h
int i,j,k,target_int_count=2;
# W3 N& I. ^4 \
char ch[2];
) ]. _$ S2 {: z1 k. _; g( O; V, W
% h- a; {! y" N+ z$ @ [3 O8 e
/ c) t' I- v( t+ _3 q, B' |
6 t; q2 ~0 [; W; A$ t
upp_interrupt_count = 0;
, B- M5 T! Y/ b/ u/ H* s) N1 A
upp_error_count = 0;
0 F" S% C5 j2 A9 J
5 _; J0 u; P# L- n
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; x2 P8 K7 k/ i
// Initialize data buffers
% w3 p: a+ Y* @% S
for (i = 0; i < upp_frame_size; i++)
/ c4 m/ t# c1 R1 u E
{
. E4 G( [: @0 [
upp_buffer_b
=i;
. [5 H$ h. C0 _) @
upp_buffer_a
= 0xDEAD;
& a2 l" q, {. L+ ?
}
% }( v6 d8 L8 l6 b& I( X A
$ K3 B6 z( [6 E9 _+ b* N( c' ]
//for(i=0;i<1024;i++)
% y, Z- O+ X, Q6 J. S4 |
// temp
=0;
$ b) o; F( w! U1 [: R' W0 c
. q% S/ q7 n* ?% p
//UPPReset();
! E7 w! {: Z& {& ^8 N
/*启动UPP DMA传输*/
7 B! \6 d# l! _0 |8 D" C; c
UARTPuts("upp_prog_dma_i\n",-2);
9 ?. n8 v9 T0 Y* x1 S
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& A) E4 {! f( [( q, N7 O( A$ Q% a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
O6 C) P2 c# ~ {/ R
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, M; @' P9 y. `; P( V# b
& [2 j _3 R" B. f$ T
UARTPuts("upp_prog_dma_i\n",-2);
. J% y( b; E8 M4 t4 @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# F) D6 \- c- p, s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: ^# [. H" n9 f% E+ _2 E6 H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ H4 ?: y: @& B: }% t
7 ]: L) N& {+ _
/*等待UPP传输完毕*/
A N% J+ m( ~6 i9 L+ T
//i=0;
5 T/ Z; ?: i: v3 y
//j=0;
; I* o; t% p, [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( I. [# n3 |: t- A }8 o
{
4 J( T; V9 d- q7 @- N! F; e- h
/* 测试UPP传输的同时操作普通DDR数据
$ g) T2 `' s! y8 m# P
temp
=i;
" q6 }) G! {+ a9 N. y
i++;
. @# ?0 a }+ q$ s3 X% @
if(i==1024)
9 x: r! Q5 l' l/ G$ }6 N5 I, e/ v
{
2 S6 m8 V6 N' ?7 N$ s
i=0;
( z, l6 }- r! R' T& k! O2 F; T
j++;
# ~) S D3 z" S& q& J! J' `$ j
}
6 F5 m1 G) k7 R
*/
/ L; H$ z$ d! p+ K: O
8 Z1 O5 M/ u1 ?& p
asm(" nop");
/ O( I. N9 [; n4 P
: O- G+ ~/ G) P$ g+ ~( h
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 L4 n7 ?' z3 p* d3 z) `
}
} l7 D3 x/ C( a
3 j% C4 P$ R4 }6 j/ p( Y. F$ K3 y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" p) F* V" Q8 b
//UARTprintf( "i=%d\n",i);
& {% x4 p* M! O/ i2 |9 Y8 t+ l+ q
//UARTprintf( "j=%d\n",j);
) ]9 E" Q# A6 e0 x* X* f. F! R: q* ^
UARTPuts("Data mismatch in buffers.\n",-2);
' d6 j) w& H) N3 M: p0 ~ b
if (upp_interrupt_count == 2 && upp_error_count == 0)
! o' b# o7 a: u( o& \
{
, R8 i* [9 Z$ t
for (i = 0; i<upp_frame_size; i++)
) ?, Y5 }+ [% E
{
- ^. i R2 I+ ~( Z9 q0 Z' c4 x
if (upp_buffer_a
!= upp_buffer_b
)
2 k P" F6 ] a) w" a
{
. w! V& Z% p( r
upp_error_count++;
) E* n3 g& f) f, v5 W
}
/ d8 Y* ]' C3 O, X' F. X, q
}
& L( U% J4 |& r
}
, ] l2 }8 r% ?1 X" i
$ m. O& f/ C5 }, m) s- d" C0 p: q" F
/* 报告通信结果*/
# U( W5 E8 J+ H. _7 S
if(upp_error_count != 0)
t- Q t: ~1 S8 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. N7 u& p3 g) B- U4 H
else
3 j) [7 p9 e% s9 H; c) j2 D
UARTPuts("uPP transfers complete!\n",-2);
/ Q2 i. i: ?0 U- J5 Z
" t' l" @8 I9 I: [6 x* t
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 l% j/ Y1 t- ^) u0 ?
UARTGets(ch,2);
4 i2 A/ x* R" y# O2 _9 k4 v+ V1 z
UARTPuts("\n", -2);
" Y& ?9 x- b. B4 q+ K
4 X1 e. }! n n0 S0 g& q/ i
if(ch[0] == 'y')
, x" J9 q6 @1 @5 t
{
: ^) }4 ?. q- {* k3 o0 w
/*打印全部读到的数据*/
0 @; L- E8 V# _, X4 ~
for(i=0; i<upp_frame_size; )
p0 ~% I8 k* r$ ~; j* k
{
& M, Z( z5 W9 U+ |
for(j=0; j<5; j++)
9 u4 c& x! N7 J* O7 Z' Q: D
{
* Y$ a" u+ J- E( U1 B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 w" p! {5 h8 C8 P1 u* ^2 o( r
i++;
* O6 A) x5 O/ T5 v; ~
//if(i >= 4096)
& ?- O" P5 l) D1 N9 V8 j
// break;
7 r& {) q3 w- R8 @4 L/ [4 t
$ j- p8 \1 J8 y& S
}
7 e+ h- w% m' y
UARTPuts("\n",-2);
( u. `# Z: b) {5 x
}
6 \% Y. p( ~6 N0 Z) c- E
}
3 p" v; ^4 H* N
# Y6 q3 j( ]- ]5 Q8 a- L4 ]
}
$ _8 m( b" _, c, |% s6 ~# [
' q: m3 b1 @- u* j) v
+ g% n, [) n/ C/ s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 K! F- Y& v5 q3 {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- @! [5 n5 p$ g0 i& s
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4