嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# X1 q: V; N3 e6 l+ F
Void UPP_TASK(Void)
* D: J2 Z5 z4 ~' t' h
{
# r! }4 K. _% X! J2 i8 Y b& Z
$ ~! |. n, P7 C9 v& |4 ]/ H
int i,j,k,target_int_count=2;
! E* W# J9 Z- U6 J1 Q" M, R
char ch[2];
" J9 ]- q1 Z8 q+ E
/ H. w, t: P, {$ Z! I
7 f# b+ [2 {& |$ T3 P$ }
& E) n. R2 m" S
upp_interrupt_count = 0;
$ J- A" y' f# Q+ m
upp_error_count = 0;
1 E) c& R: B v5 T! b+ \8 D
$ W8 J! l( J( I
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& h3 k R/ l" a8 p8 Q
// Initialize data buffers
0 V6 y/ O, i- g' n1 U" t9 U: {% M
for (i = 0; i < upp_frame_size; i++)
+ [( t% k- X& s7 S* x9 g- L8 t
{
+ u" y+ s) |8 E* r
upp_buffer_b
=i;
1 N1 Y; [# c3 U
upp_buffer_a
= 0xDEAD;
- f$ s' S% o" |/ E- g# l% {
}
( p. M: l! Q' L. h) `7 ~
) g8 f; N# W) Q' W
//for(i=0;i<1024;i++)
; p: h! d& H6 g) p% |: c! K
// temp
=0;
. m7 c& d+ g6 ]9 F6 a
' F( H6 f7 U/ v% Q4 g
//UPPReset();
8 u( D) j4 L, N/ j
/*启动UPP DMA传输*/
0 v8 T/ j" a3 Z- _: n0 ?2 b" V
UARTPuts("upp_prog_dma_i\n",-2);
% t1 ? a) Y; @* d! ^% T; }$ M }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' \7 }& v Y: [4 T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 W' f$ l( N' k! ]' x( D3 a; J
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! t8 C5 k# V) ]
9 B- x0 u3 \) c1 R6 k3 e3 v
UARTPuts("upp_prog_dma_i\n",-2);
* E& p9 Y& ~: t5 ~
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' j. c6 f- ]& x2 `9 V3 }. u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ M$ X; @" o F/ ~0 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- r4 V2 Q$ V! ?) {8 D, r: b
1 a* m" w/ u* Q" h
/*等待UPP传输完毕*/
* j# L/ ^" m- m
//i=0;
' P4 X+ ~" _1 k' P5 G" H
//j=0;
, k$ `0 c& ~/ _& y: Q9 l( Z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
p$ x: W" ?# J+ N# u2 z' s
{
& d- l2 c# w3 g1 Y* L
/* 测试UPP传输的同时操作普通DDR数据
5 \" }0 p! H# r( K3 _
temp
=i;
( `0 O8 W& X, N5 b1 A; d- z
i++;
5 A" O* u: s6 k1 m" z- D
if(i==1024)
" B9 W5 q( ~, v6 f: S9 N
{
1 p8 ?# r9 g6 `6 N% q3 u v# `
i=0;
0 ]* c% e; K4 q+ L
j++;
5 j8 [0 \5 x7 }) Z( [% n
}
$ z& x% }, s5 \" G, t
*/
+ d1 m& } w. w0 k/ S R
2 C+ A) ?$ o* f+ p5 \! F% S8 X5 I
asm(" nop");
) b9 J; Z* o1 d6 v+ G% R7 d
. @" y. s5 y# n2 {# M, c0 t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ s: H1 o3 p& u3 W2 L
}
5 Y: i, t" V7 [! |6 M5 z+ J2 h, Q
4 X0 i2 O/ v% |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 g% S! |$ K1 o- Y) m6 r
//UARTprintf( "i=%d\n",i);
# {; k% k! [. E( j& T" L
//UARTprintf( "j=%d\n",j);
. o+ @8 V5 J) ^: F0 V9 G
UARTPuts("Data mismatch in buffers.\n",-2);
( O( Z+ P$ O5 B, u8 w; m- O
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 L6 V8 E. T4 s; ?# e
{
" N" ] y( p& Z
for (i = 0; i<upp_frame_size; i++)
7 E7 r2 n6 h# Y4 z4 v2 V/ w
{
% E0 d. B! D% x% k
if (upp_buffer_a
!= upp_buffer_b
)
# o( Z& R; n: W1 g; A# ~1 F4 r* M. G
{
" T9 q/ Z7 ?0 V* e8 a; f1 K' l9 g# G3 Z
upp_error_count++;
+ W* n& @" I5 ^# ~0 y; A- `, j
}
4 C7 z. Y2 w$ a/ d: }$ c, e* M
}
/ Y1 i4 Y- o' F4 \4 O* Y! h
}
& ~6 B3 W$ \3 t/ ]0 o; j' t" Q
* C( z, D/ n* Y) U' }5 u3 Z
/* 报告通信结果*/
* h1 s8 C5 p1 }
if(upp_error_count != 0)
2 H1 F* y* m7 x0 Q6 o
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) Y' P6 e3 p8 C: D3 u/ c
else
6 e7 |) ~' C0 B& T$ Q3 [1 A) c
UARTPuts("uPP transfers complete!\n",-2);
) T: W. @& E8 L9 O( |/ {2 a
; B! E% V& h. d% t l) d* S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 A. J$ f2 j5 q* m: m
UARTGets(ch,2);
- a9 V; n1 n4 K6 ]' Q& h8 O
UARTPuts("\n", -2);
* j# ]1 d- h# P n
: {" |& c! R$ E* b& p
if(ch[0] == 'y')
! B, q6 } ?7 s
{
# N2 e0 W: s. z7 k* a# E5 S/ Z
/*打印全部读到的数据*/
, I3 i) H3 t/ m/ Z$ V( v* B
for(i=0; i<upp_frame_size; )
, R& q1 d8 p9 c& N6 U& |7 j9 w3 s
{
1 q3 X* f, S4 T% h* Z
for(j=0; j<5; j++)
+ c8 D& O4 @$ e# `; H# h
{
- Q' n/ x3 {: }9 n& X0 j" W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 m7 u+ `3 Q" l6 U4 c5 q0 x
i++;
4 V1 N" I& t+ P
//if(i >= 4096)
( Y: V5 e# m; H3 N1 O/ e
// break;
. k D2 w X0 }8 n' A# U5 ]
1 V6 F7 @, N8 K8 D
}
6 g, P# G6 n; X/ F
UARTPuts("\n",-2);
; W( p6 w' ]0 D) L: r |& w$ @; I
}
' H* { c9 I; k2 f6 M0 ]! K( ]
}
* M. j2 K8 i0 c4 Q7 I
( s0 L7 _) m3 t: [6 n1 C. m& r
}
- v; q+ p( d) i3 o& z" I
5 C) R1 j0 J) p8 y
: n4 l7 L! c/ p# z1 w* v4 t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. x* R! {- v! {8 v9 ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) v# ^/ |/ _% h3 j4 `7 j2 M
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4