嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( ?6 `- m; |0 i
Void UPP_TASK(Void)
5 e0 z) T7 T- Q2 ?2 D
{
; c3 g" g1 W/ w7 Q" B- J ^
! l0 J8 m b& U0 D+ `. q
int i,j,k,target_int_count=2;
/ Z6 S, T! b+ P
char ch[2];
( z0 ~8 |, Q5 N: \" g4 T2 N6 V
! \. x2 X! `% H+ [$ W
9 k; f- x# b1 n. z. h/ y- Y1 {1 P6 ]
! P1 \, J- e Y) q/ c+ h1 B
upp_interrupt_count = 0;
: W z# H2 w, Z' l
upp_error_count = 0;
) g) ?+ I" \5 [2 Q) r
" f1 M4 @5 g+ \2 N( |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( u. t# t: X- e3 f
// Initialize data buffers
+ B! O- N7 O6 |4 O7 ?' k( F
for (i = 0; i < upp_frame_size; i++)
5 w$ J: H6 [: n2 G/ y0 I
{
: o1 w1 z7 B& G; z0 M2 w
upp_buffer_b
=i;
+ U# ~% M' u4 i
upp_buffer_a
= 0xDEAD;
9 e5 }; M7 B; _/ r$ S# Z
}
7 t8 r) @0 {7 N, m$ @
g% s/ w5 r1 Q. ]
//for(i=0;i<1024;i++)
, B) \9 ~; O0 A5 V8 l+ @$ x
// temp
=0;
# L* b! b" i i5 D2 V# w$ D9 I x
9 m, i* `6 [: Z5 u
//UPPReset();
" Z% [/ p3 Q2 x/ J7 O3 t
/*启动UPP DMA传输*/
0 O# Q r' F3 C3 k2 q- y
UARTPuts("upp_prog_dma_i\n",-2);
3 {, K# Z* B8 q; h* E/ Q! c
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: \4 a" m$ b: S; y$ Z& V* B
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& D- Q8 C) Q3 `% F( L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* ^" q( j% w* f4 Y5 [
( Y$ f; W5 I3 s
UARTPuts("upp_prog_dma_i\n",-2);
& A0 s& S9 ], P; x
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 h3 g: t0 a8 t4 n% b, @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ }4 g" L2 E& ^- J6 h# Y, K6 e
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 E- Q1 n; l4 {7 ^
( J* n2 ^$ N% b: P5 ^* g
/*等待UPP传输完毕*/
6 t* F; _, z6 r( \+ B. R
//i=0;
/ H9 D# }( F4 w2 O: l
//j=0;
5 O: B; W% T0 E2 Z+ n( q* O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% c; j9 A. v8 R; e. ]
{
/ `3 Q+ D, Y# j; d( i' x! a
/* 测试UPP传输的同时操作普通DDR数据
+ Q% |5 h9 _1 V' u D7 y) G2 l: D: \
temp
=i;
$ b% D1 f5 ` {# i
i++;
7 {/ w2 }4 T! m( ]$ J
if(i==1024)
! ~9 u& M5 k* N6 D
{
1 V" \; f* G$ G, h
i=0;
: B9 `; K8 b$ ?' o- _
j++;
- W1 V: d O% n* u* u
}
/ s5 H* e/ M( e$ \9 ]# s. L
*/
3 s% A' k: e1 ~6 d" w2 \5 B0 N; |
+ L2 C2 V3 ` o5 o0 x* N, `8 T) V1 p
asm(" nop");
8 M6 r' o9 T7 k* Q+ r
& b/ ~9 ~ ]- k, Q& }3 N
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% k. ]: L9 y$ X8 Z
}
4 K. Z+ {9 w) u4 U" m5 I
* G: M6 n- s$ Y, Y7 r+ p" ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ |5 x, U" m0 h2 X, ?1 ]8 [
//UARTprintf( "i=%d\n",i);
$ {: D+ q% L; ~- W% P k: r( K
//UARTprintf( "j=%d\n",j);
) p( R+ o- n8 t4 h, P8 }
UARTPuts("Data mismatch in buffers.\n",-2);
4 _1 S: S% }! I9 q2 a, Q
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ y: q1 V$ Z2 [: L& w7 E
{
. p5 Y" R* O$ w
for (i = 0; i<upp_frame_size; i++)
7 i9 }6 _" v. ?! ]
{
- t4 h2 H; G! O9 t' H: x
if (upp_buffer_a
!= upp_buffer_b
)
, C& d$ K0 S! o, C
{
6 W2 o3 ?# F6 [! I, @' R) E
upp_error_count++;
0 W$ _; Z5 ^5 q3 D1 Y8 |
}
: k9 g7 s7 a( E% y
}
- w( p: N& B- _1 Q$ ]( Y
}
$ M4 O- b! C& u+ P( M
7 P: L, i. [7 R& R4 O2 x
/* 报告通信结果*/
; w" G u" D2 B/ h& m! b# z
if(upp_error_count != 0)
; t7 U: y+ {9 @! W+ ]# P. M
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% c+ K Z, d9 m6 \1 D0 Q+ f( W3 [2 Y
else
; {3 F" Q7 h2 Y& U i5 y
UARTPuts("uPP transfers complete!\n",-2);
! n1 q) a" @+ |9 {" g1 U
- @7 [4 o/ R8 N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 a2 Z" s3 u" s$ ^5 I/ ^6 V) l4 \- ~
UARTGets(ch,2);
/ |+ @ J. z9 V5 w8 b2 |
UARTPuts("\n", -2);
3 R e" r2 W2 U) X" H) t) B
4 f h- @+ b7 z: J2 G: e: V
if(ch[0] == 'y')
+ N* ]" t* \: W/ j' o8 h
{
( N+ a; R: k( _$ Z# @, _
/*打印全部读到的数据*/
4 r+ M$ @- z7 ?6 ` C5 H
for(i=0; i<upp_frame_size; )
; W+ U, r+ G6 a3 q7 A+ J
{
. x- x3 l* w$ e: m5 W4 L
for(j=0; j<5; j++)
' ?/ j4 p9 S, L; j' l% i4 U; x
{
1 |9 e( Y3 x3 @: t& {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: t$ x" A, ^: W
i++;
5 F! W; e; [2 c
//if(i >= 4096)
- X- C' x3 m+ Z! _! [
// break;
d2 b- ?9 K) o0 J1 U9 z' K( F& n
- S* T8 Q7 u7 r6 z/ c+ @
}
% M3 |2 ~8 t7 m& g2 R
UARTPuts("\n",-2);
. l7 v+ R" i% R* m' F
}
: @4 H6 C s7 Y- a5 g
}
$ B! k* S( U3 l5 S/ d& q
$ B! m7 R1 D/ w7 d& r7 t
}
$ K7 z3 ~4 L& m% p; P, O( @/ m0 V
( g6 y2 @- P* @( }+ f
( `7 A' \- p/ e& g6 t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 g9 |+ Z. V4 F+ ]$ Q/ `- S
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% g5 v, U; m4 S) ]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4