嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: q" a/ u5 C+ U# h# @
Void UPP_TASK(Void)
( o( G# G( e8 V ] y7 H
{
& Y/ K/ ]* W7 C" S j
8 |% r+ e# n: H1 o
int i,j,k,target_int_count=2;
0 |! L. H3 ?# E } B
char ch[2];
6 ?4 Q, g3 h+ w* a; d3 o. Q8 a7 i
6 ?7 O. a/ t$ N4 B5 X& I1 ~
5 A- @* X1 P- O% U9 O
' M9 C: T/ g: g9 P
upp_interrupt_count = 0;
. C8 L" h V, a- ~7 e- @% o9 I( K
upp_error_count = 0;
6 ~5 [" Q" M' H9 E5 D0 p
) W9 b& S1 o' U( G/ x4 e4 E8 \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! V- \+ z0 N& g. P+ H5 L
// Initialize data buffers
1 t5 u& ~* A- Q" q" K6 H
for (i = 0; i < upp_frame_size; i++)
( \5 f4 k$ O5 J
{
% m" w8 A5 T, j
upp_buffer_b
=i;
% n. h+ r6 U0 ]" U; o
upp_buffer_a
= 0xDEAD;
6 a( A4 S8 d# I* J
}
. k' Q* }+ f& y+ Y3 P$ y5 }
9 I% e/ G6 m* [1 W
//for(i=0;i<1024;i++)
% f. |. p+ P, y/ Y/ G( X, B3 t2 o
// temp
=0;
! _) t) k/ p1 M! w3 t' |( F
3 h4 t$ U! X8 a0 {- L1 ~
//UPPReset();
6 r0 J: Z; }) h, C9 T& v
/*启动UPP DMA传输*/
$ J2 r/ U# E6 H! p- u
UARTPuts("upp_prog_dma_i\n",-2);
' E. R x( F# h. y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 ~! ^) l. J& w
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 Y3 w; @2 _# I2 K n: M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& d! L, O# {1 m, ]8 @1 u! I
! t6 I$ Q3 _& o: o: p
UARTPuts("upp_prog_dma_i\n",-2);
4 o. a! P+ ]6 k, D1 ]5 i7 |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 b0 h1 S8 [' U" @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 M/ O" w3 z+ t- R8 w2 W3 g# E: e9 y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: u3 P* O0 G. M5 b P; x. e
1 w. v) A4 q4 p* w. C
/*等待UPP传输完毕*/
) y+ F; r4 F, q) c
//i=0;
* ~8 o( [9 `- M. G
//j=0;
/ U8 r- x' W1 R" b7 U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% H' S f" V0 _
{
. B [* X. A% y
/* 测试UPP传输的同时操作普通DDR数据
. w, V% A6 E- t/ e) [
temp
=i;
- `! X/ d( [- r; c) g2 G; q: D
i++;
$ T A: M" z1 m& _* {; i
if(i==1024)
7 R6 D& ^6 @2 J0 E/ `* L9 M
{
) m+ K9 t: Q$ }5 j
i=0;
" f- |5 x' ]# ^# _/ }7 Y
j++;
- p; V; Y4 G7 S& N
}
0 c* ~! c( \! y
*/
1 u: a" u1 y: v1 H u0 h
9 s" e) c7 V; \! d' o
asm(" nop");
4 k5 q1 x& _. n
* b7 @5 c" |1 b" \3 X' _
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ u0 o& a h- C5 x7 g3 x3 M
}
2 n6 N$ r; c0 q% S, W" ]/ U9 X1 A
( m/ G6 V8 |( _( C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* N; h/ d( t A, D* o7 ~: [# A$ _
//UARTprintf( "i=%d\n",i);
& v- n# V2 N0 T' Y
//UARTprintf( "j=%d\n",j);
9 x' l' Y# `3 n+ n8 j W
UARTPuts("Data mismatch in buffers.\n",-2);
! d- D( B6 m! ?9 {7 u3 q& ~! i
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ b; |4 h/ j; j+ Y, S- d& D! @
{
1 d: x( [4 S1 N! b
for (i = 0; i<upp_frame_size; i++)
, F3 f: J" o# c# o
{
5 }. s9 z. S- [4 S, U( }
if (upp_buffer_a
!= upp_buffer_b
)
3 m0 f: }4 d1 m" F5 _( G
{
1 B5 O* C- D7 X5 L3 V! h' L
upp_error_count++;
, Q, \& d4 W/ N% N9 o
}
. O+ ~9 w( e9 C! l5 H
}
& b: b- M% H9 w2 k* a; m# L! p
}
) _, |: D! W( M
- K* O; a v: L+ }. ?4 X- r
/* 报告通信结果*/
9 V1 p& w4 o7 y0 l0 ~
if(upp_error_count != 0)
0 b% L7 p/ `; B& i; n8 w; I8 v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% o: [% J B8 G! r/ L" J) q8 n' |
else
9 K/ E. h$ Y3 D1 `: ^3 G9 o
UARTPuts("uPP transfers complete!\n",-2);
1 b7 ^1 V# V& k
0 K2 R: a, M3 A4 I" K* \ z3 [
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' X( j9 a* J |) n
UARTGets(ch,2);
1 h9 V$ i3 L, q E: D, V
UARTPuts("\n", -2);
2 Z# y: P+ s# J* [ F
4 i+ j- e, t+ q* C
if(ch[0] == 'y')
) h" R8 Q: F; ~; F
{
7 o6 ?/ {& ?' w
/*打印全部读到的数据*/
0 y9 s1 T3 |( t) `; b! c3 B
for(i=0; i<upp_frame_size; )
H/ f5 _- I1 F S. E& d
{
, x3 u! s) a0 {7 `7 p
for(j=0; j<5; j++)
- g2 \$ q0 g9 I- i( f; N
{
% [( m3 n ^8 o5 |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, W! m* V9 R) S& e b; [% m
i++;
1 g' u! X0 Q% Z# Z, j3 F2 S
//if(i >= 4096)
% E0 F2 F. Z; |1 d/ B9 d; ]4 B
// break;
+ L( N/ f: E+ }) O* G" b" u
% Q) D. p& V9 U/ |; R
}
* L9 u& x0 T1 i5 i
UARTPuts("\n",-2);
5 t3 A' a q3 n
}
) |/ x' V! f7 n0 q
}
$ R6 J1 z# c% y9 r7 `
* [. S7 {! c" a1 [" W0 ^ ~+ E
}
5 d3 K2 o3 Z0 s8 E4 {
, A$ f9 t) g: e' U& s/ v" p
$ F2 ?. S3 N% W
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 }% j$ \/ f C% @9 W2 D W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. j; c/ X7 y8 |( P4 Y5 l: E
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4