嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 w1 K0 w, ~7 {0 D" b0 z
Void UPP_TASK(Void)
) Y4 B& T7 s$ H* H
{
5 P; _: Z) X/ i) f( Z
$ ?# E" ~( t' _& @3 k% E# d3 D4 B
int i,j,k,target_int_count=2;
/ Y) T' w6 b; f ~
char ch[2];
# i6 c5 A) N; B8 h! ^8 r
# X X n4 |. H0 B
' s$ b# Q& P, } ?4 _8 }6 X
r8 @ U& l( y- J3 M
upp_interrupt_count = 0;
# m) ^7 C/ h$ y) g: C; c4 h- U J
upp_error_count = 0;
2 S$ @' l+ i/ o% Q
o: X; q3 K0 H1 j: @- }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* m4 j1 o% v2 T+ A, |/ Q( O6 j
// Initialize data buffers
$ c% j5 Q8 X( n' a9 g: v, p
for (i = 0; i < upp_frame_size; i++)
) v' m4 U/ A. Q j* Y2 h) Q5 W& [* }
{
Q' c, E( _- ]
upp_buffer_b
=i;
2 k8 f' Y* n' V$ x+ y! l
upp_buffer_a
= 0xDEAD;
1 W$ t# }( ^$ I! D, C0 ~
}
, c, W6 h A5 l$ j8 |% o
3 J0 Z* ^: J0 D( `# k; V. X
//for(i=0;i<1024;i++)
, ~1 `9 [+ ^. [# T$ P" M! e' T
// temp
=0;
: c3 t! \: W1 E' V4 h' A+ B9 O( ?
7 e! ?$ ~9 ~% }/ S
//UPPReset();
+ K7 t B/ ? X# N2 L
/*启动UPP DMA传输*/
1 H) G3 d) h5 h5 a
UARTPuts("upp_prog_dma_i\n",-2);
* ?# `+ N9 s& P ?- ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" J: l o! u! m$ n' e `. n9 c6 Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 `7 a8 G7 p+ N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# \, p( [( W, {0 g3 ~6 x
1 \' B/ P3 C& r; [8 [% U
UARTPuts("upp_prog_dma_i\n",-2);
' |1 [2 S# F" e8 ~
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 S8 A" {+ @5 W7 r$ ~! V! H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. V0 l& V7 i- s+ W; V: u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 X' g5 c* f' i- R) L$ Z( l
- E4 i \' Q% y% v4 u! n+ j! C
/*等待UPP传输完毕*/
- g( K- d3 k/ o: L# ` D7 |
//i=0;
0 }; a& ^' V# V7 N+ d
//j=0;
& z; y1 m9 D9 Y) |7 M5 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ I. m1 }9 y) c3 p6 |5 x9 H' C
{
' m9 D) d6 d o8 z; @, w
/* 测试UPP传输的同时操作普通DDR数据
5 U5 O/ b1 X( `) `+ O2 ^# Z. q( ?
temp
=i;
2 [: d( M; ^- P0 p
i++;
6 @) @, J3 V7 u: M0 Q) u
if(i==1024)
7 `0 D N* U- [$ F
{
/ ]9 r# n, `- T7 X
i=0;
/ G* J: \5 T+ D9 m5 @0 s
j++;
2 \) j8 X+ u4 b- S& l
}
2 l) [( q/ {# S, [
*/
6 O2 M2 L8 L, g/ G9 d; I! A
4 z+ l( P0 s1 H+ H i; t) x
asm(" nop");
1 T' z o% @" m) O, }) X. ]% S- \
0 E5 h' k0 r' r" D9 b/ a3 V" H
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& {9 x1 u) D& k$ `8 y* q
}
# `- _& d( i! ?5 M" G2 c" ^3 v
( f. W: g9 C; D0 L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; Z6 t) ~3 J! i! i4 X0 J8 U1 r5 F9 c# e9 N
//UARTprintf( "i=%d\n",i);
2 A }$ B% i: _# Q0 Y* d
//UARTprintf( "j=%d\n",j);
: x! _, u/ g: ?* j$ j
UARTPuts("Data mismatch in buffers.\n",-2);
5 x0 R/ g, f4 ^2 s3 X$ B( P9 n" Y
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 F: o3 O6 m% k* F
{
* Y$ |# [8 J! J
for (i = 0; i<upp_frame_size; i++)
( ]/ U1 h* D& K5 k& _5 `, j
{
$ V6 P) n5 f( s
if (upp_buffer_a
!= upp_buffer_b
)
: @+ b# O1 ^' B8 p1 w
{
! M) T" ?8 |1 i, J n; b" H
upp_error_count++;
3 v4 U: O$ k g" U+ R4 W, p t$ n y
}
2 O% C% r& N2 t) ?7 q
}
! r; _% ^% i3 d5 y
}
" d9 e8 R8 ^# l
) ~1 t0 z9 B% q1 t9 A4 Q# n- T
/* 报告通信结果*/
% ~1 U* R5 [: ~9 m) f6 G
if(upp_error_count != 0)
. x4 O B5 Q1 R4 O" H" I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* m- l& S& f( G, Q
else
8 F+ z6 ]- B D% @" G: b9 b
UARTPuts("uPP transfers complete!\n",-2);
; V1 |* W$ G9 g' a" F* G; b+ n
5 p: g; j/ l5 u5 d- f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ N2 L7 t4 _2 l
UARTGets(ch,2);
7 t g; I7 }" F& E
UARTPuts("\n", -2);
: h9 |7 H' [4 }' {
2 P; I1 H+ ?' `! t
if(ch[0] == 'y')
& k6 m& g' {2 q n8 d9 \
{
5 z; i% l5 c: q. w2 x' a' [
/*打印全部读到的数据*/
; O* c7 Z1 O: t& D
for(i=0; i<upp_frame_size; )
" k0 L& |! g' u8 T8 N, T
{
2 L9 V8 C0 ?( m6 X
for(j=0; j<5; j++)
9 ~6 u3 B: l8 }- z3 R9 H
{
5 l# t$ \+ B- m! a& J/ C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
X0 G) k" M( q4 V1 N% @
i++;
+ L! e8 f( a8 v; \* T& v' F2 `
//if(i >= 4096)
3 H& |" d$ \9 B$ Y
// break;
$ x* }, J i% m: O% C' W# n6 j
4 s2 @; M8 ?; F* g5 Z* |/ j
}
6 T& ^7 Q, C" R
UARTPuts("\n",-2);
& l- C6 h2 _4 g* t3 l' ^5 K8 K
}
0 y8 K( U$ W% b
}
( ?! o+ h8 m, v, ?3 Y: |( v
+ e7 Q- v7 r8 l$ _: {
}
. p; s( ?# h. k+ ]3 }
$ ?" m" ?' x3 R- W
+ _( P8 P; }) [1 d6 E8 T% t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' X8 u" d; z( k
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* t9 u8 }1 _' u3 f+ Q
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4