嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, q$ C. w% s3 ]& A/ N
Void UPP_TASK(Void)
* j2 Q- b/ `5 b1 h
{
: ^& h4 x. L$ {: ]9 M9 b
2 q& C: Y( S7 t j
int i,j,k,target_int_count=2;
# j. ^1 k3 I5 p( R) n
char ch[2];
1 C/ w7 R3 k( h9 Q7 a9 f1 D0 K
4 J4 w# M; R9 T+ Z" `. r
$ G* L- a8 S. {0 {9 G3 c
. F2 O$ o! M l- _' ?6 H. Y
upp_interrupt_count = 0;
l( S( Z7 E4 U* N M& T( I
upp_error_count = 0;
) U5 ~3 d4 n Y% M2 p( w
' ~7 U8 S. g9 O) G9 l" n: t) k
UARTPuts("\tResetting uPP buffers...\r\n",-2);
\" `2 N+ W+ ~
// Initialize data buffers
' n/ T% R0 G# W" e
for (i = 0; i < upp_frame_size; i++)
* L7 ], f# I& X+ o( o
{
3 ?0 ]1 p: |+ ^3 q" O- T( i
upp_buffer_b
=i;
; t# R" t( L1 O* D, o9 [! X
upp_buffer_a
= 0xDEAD;
4 A' z2 Z+ R* h9 b7 p7 N3 ?. o7 @; Y
}
8 V+ `$ n+ d& S. s+ t0 z/ p
0 F6 l0 q+ P2 l* l: |1 t
//for(i=0;i<1024;i++)
4 S0 y" `5 Q) s- _2 h9 m
// temp
=0;
& M' D0 B7 s7 I
. p+ E- z* M& i
//UPPReset();
6 B% u& M$ `. o2 M/ @! p
/*启动UPP DMA传输*/
/ [7 r* T/ u! i
UARTPuts("upp_prog_dma_i\n",-2);
2 R4 |& o' i& ]# J+ \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
w2 E" ]3 \' f: t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 [+ |$ V M+ O! M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T6 n; v9 ~- t" L4 Q; e
! I6 m5 N: d0 F1 y; H8 b& U
UARTPuts("upp_prog_dma_i\n",-2);
2 a* W H( k5 u# b, ~$ n- V+ C
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( R q% R# i% p0 g. I5 M' D
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* |1 y6 E: u8 \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
r, V! H& `" @4 h4 U* p- n: ~' b# P
+ t1 t5 L0 Q) ]
/*等待UPP传输完毕*/
9 |+ h& N5 W* R" \1 J/ f
//i=0;
, o, I. D9 W1 |. M* y* d
//j=0;
6 m+ ?" b3 r& h/ E8 w6 P( _
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* \" p7 y2 K- V+ H2 F1 m( t
{
- x) R n, y" y/ R
/* 测试UPP传输的同时操作普通DDR数据
$ q6 R! W- R ~
temp
=i;
& e- u$ Y5 B1 B' x" s
i++;
+ b, _# C$ B7 v
if(i==1024)
+ F1 E) K) j5 C7 J! y: z4 j3 Y
{
9 [/ T: Q* e6 y4 }& H# b( m' O+ p4 t
i=0;
* }1 H" E' @, M5 n2 I
j++;
7 V0 q# ^$ ^7 A6 u
}
2 }: h5 B* W. |% u2 K( k) n
*/
, q8 F+ T0 z v& o \5 v
% D/ }" r" T: b. Q* K- N* Q! ?# S
asm(" nop");
y# R) C. I3 u: h/ g9 W4 d2 C
6 m: ?$ F+ `2 k/ z. Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 `7 T& O# I8 i% @
}
. n4 I7 H' z5 _9 o
?% h" L4 A z1 v5 u5 T4 Z( e
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ v9 Z$ _( c9 ~2 L, Z8 Q/ e% l# s
//UARTprintf( "i=%d\n",i);
4 x* G! b) L6 W
//UARTprintf( "j=%d\n",j);
; ~$ G) b. l7 Q" R
UARTPuts("Data mismatch in buffers.\n",-2);
5 q- K% U5 L; g
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 J: Z* o1 Q$ w$ I
{
5 ` N3 h3 ?8 _7 c( M
for (i = 0; i<upp_frame_size; i++)
# v9 o* C F2 S# u+ R5 c
{
) T* O! I1 d( ^ T K
if (upp_buffer_a
!= upp_buffer_b
)
, z. y4 R) q, b- p
{
. v. N' t& D& L6 G# @% t5 j, L
upp_error_count++;
# p' r2 M0 G& s9 o6 J2 C
}
8 k e2 `) h+ c* E
}
$ }. v8 ]/ f& u5 G
}
2 b; {: G9 f! n5 I. {. W3 a {5 d
' Q5 P* Z2 S0 j, E( P
/* 报告通信结果*/
* `# t% F9 \, h; b* ]: A: B
if(upp_error_count != 0)
/ W& J2 m1 F4 N) y& H% W: I) q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: U1 {) u. e( D m8 @% V
else
$ V+ [% I7 D! Q6 k$ w" Y! l
UARTPuts("uPP transfers complete!\n",-2);
4 X1 H+ k* Q% e' s0 `! M1 c
. d- T( l# b" v, p, ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- Q Z1 Y5 ^- M* M0 \& u7 f: X
UARTGets(ch,2);
) r/ u5 U6 R+ c: a1 Z; Y* c/ \
UARTPuts("\n", -2);
& @* `% H" J) L
& S5 R& r8 p" y
if(ch[0] == 'y')
( u g( U: ]+ w8 M
{
0 P# F& i0 y3 v) H4 K3 O
/*打印全部读到的数据*/
; c0 M3 H4 l: P/ O, M/ V$ c
for(i=0; i<upp_frame_size; )
9 S; [: ]0 }( ~! W! L
{
4 A1 o+ C; j# o1 t" b% D$ H
for(j=0; j<5; j++)
0 u8 u: _. D- Z7 g
{
6 W* R! @% e' a0 q$ R6 V
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 w; t* G9 j7 ^# P& W
i++;
: a7 B* \7 G. R1 Q1 q3 b6 I
//if(i >= 4096)
) d# }+ x# W7 F/ r5 p
// break;
) F6 u/ K; f- i+ w
4 m9 X; A) B! Q7 ~
}
5 m, P( i9 O2 r
UARTPuts("\n",-2);
( }* ?& ?0 \( t. |
}
" ]& a$ Z) X/ {9 L
}
/ G7 [; w6 ^" V! e
+ a! E) G& h8 d
}
# {) f `- N5 D* d/ D- Q
7 t. \0 h3 O9 ?3 m9 K1 K p
5 R8 @5 h& j" _' y: J, z- c
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# H* V5 m3 f, p. {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( T2 u" W- \( W
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4