嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: h& d& `6 a1 d$ C2 J Q) X5 ?1 A
Void UPP_TASK(Void)
1 {1 M$ u2 ?, I9 ~3 T
{
; Q2 x8 o3 M# p2 q# f( g3 y
" |: ?8 U8 F2 g0 }0 C" |5 M
int i,j,k,target_int_count=2;
' x$ v/ c9 Z% L. Y+ t E/ Z z* d
char ch[2];
5 B3 j1 ~9 E& g4 g' x
4 K$ I; z# D4 \
! f: w2 \. T. D" V8 k3 A
c" X4 P; c C6 \* q0 I0 F
upp_interrupt_count = 0;
% J( K1 t! W' F/ F
upp_error_count = 0;
. q7 v3 ~3 v( d; `$ m$ S
7 L! d8 [ W( m2 U. Y$ Q& ]! M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! u! g& v4 H6 w
// Initialize data buffers
, X. d P3 G+ V6 C' a W
for (i = 0; i < upp_frame_size; i++)
3 `2 V, ]1 F9 K/ F' G: F
{
. L i' u) k6 t/ c" G' ~& R _
upp_buffer_b
=i;
6 I$ ~- S: L9 \; f
upp_buffer_a
= 0xDEAD;
; ?, J% D; _( ^; L" q# `+ e+ ]
}
* A" D( Y) }+ f9 w% W0 E9 i
5 m" Y& b* A T+ c- K P8 i. z
//for(i=0;i<1024;i++)
$ e c! T! h9 j
// temp
=0;
3 S0 g9 B4 c) }* V2 g
8 `5 k! F. N. M" z4 X
//UPPReset();
8 b- w* U/ o7 h) g7 P2 V
/*启动UPP DMA传输*/
' {! T2 |0 s# `& V0 g
UARTPuts("upp_prog_dma_i\n",-2);
?5 ]0 @+ |4 c% ?/ E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% j7 x& o2 j* G" b, N/ G T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( P; e3 O6 }# o& ]5 ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
l& p4 D0 R; u( O4 z& E& X: P
+ c+ p7 a |% V. b( R1 e
UARTPuts("upp_prog_dma_i\n",-2);
! S2 W, J. x5 _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ u1 h0 `+ N d/ j3 C1 H$ w, h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, e8 [; Q: f% {1 D: n" q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- }& f$ \ R( N9 q" E0 Y( }
( z; k# ?9 G, [! `
/*等待UPP传输完毕*/
B e, D' m6 n- m" X# J( P
//i=0;
0 ^4 I( i+ b" \
//j=0;
8 q* ^+ J7 U0 w- G0 \* P8 X* B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' H5 L. @& l3 A4 x7 W" o
{
0 e6 h" V( e- z' V& f
/* 测试UPP传输的同时操作普通DDR数据
: Q5 P/ I7 ]2 c- y
temp
=i;
) o' z# f. n' K
i++;
' [4 Y! |1 Y1 s
if(i==1024)
/ h4 m' @. V+ O- y! k
{
3 U- n }, Y2 L, v+ k; X
i=0;
, O9 S" q" W' e! x7 ^: t* O' V
j++;
: ~6 j( u4 n& b7 P
}
, [6 Z- a5 l9 R/ I) b( q3 k
*/
; O/ ]7 _2 r" x8 Z8 P* Z
+ i8 E: }3 h: ]& N5 `4 a
asm(" nop");
3 z4 R+ z! e) [, V6 s% k
1 O. `6 Q" C! ]' V
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) N0 J" g1 O8 C' x
}
' A( k) \! O9 L9 Y" {, q
: m5 E: R0 y$ Y8 I% q* J& D, v% e
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) A; A# f7 R/ w) M
//UARTprintf( "i=%d\n",i);
% \( G8 |3 N3 q: D4 e! w
//UARTprintf( "j=%d\n",j);
2 L* d+ `8 D- w; N! P- y5 t F
UARTPuts("Data mismatch in buffers.\n",-2);
$ d k7 S8 n' E" Y3 T A$ ]" v
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ n+ U3 B, j, P% Q6 J$ N' V" z% D( ]
{
& \2 l" u9 b; s" `0 W3 _
for (i = 0; i<upp_frame_size; i++)
) c; ^: O5 R) Q, E* W
{
0 f- S8 m! P/ y% B) Q3 M
if (upp_buffer_a
!= upp_buffer_b
)
^) L% @- {8 w" g% G/ `
{
/ T5 Q8 h. |9 f1 m6 n# d1 [$ V5 M
upp_error_count++;
$ s/ o7 G5 {/ ^" T
}
' R+ V9 `( a: h2 O# F5 j. K `
}
& f3 ?+ t3 r' {# s" m) V
}
2 n. G! k& c" O- M2 f
5 D# k Y% N; {( c! C$ h
/* 报告通信结果*/
9 w" A) [0 M8 C4 p9 V
if(upp_error_count != 0)
8 D9 H3 R: |8 b5 d6 B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 [: i8 \3 n# i0 x0 q; c
else
3 U' c2 Z! p; E- z8 q }! w
UARTPuts("uPP transfers complete!\n",-2);
- ~- c3 H3 G' x9 ^
, C, K+ }% b. y& l& g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ F& ?# U% B. `$ \" i+ q# H* Y
UARTGets(ch,2);
1 S p6 n: @1 |3 S+ x n" N
UARTPuts("\n", -2);
$ T# T0 x% ^: V" Y" y
: ^' j5 u( ?0 n5 R7 e6 V
if(ch[0] == 'y')
" c) ?5 }2 K* I" L' [# [" y
{
; @- G5 H9 L# f0 q' n' @: r! N
/*打印全部读到的数据*/
" t# O4 g+ f/ u$ b' u3 e
for(i=0; i<upp_frame_size; )
/ [* @: Q& g9 @' d+ w5 M
{
; b; u2 d7 P u: K( x
for(j=0; j<5; j++)
+ z& ]$ h/ B7 f Z5 ]
{
" j r9 l, N1 I2 d) ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 \& r( G1 F' J
i++;
: l* c1 e2 |2 @5 u' _3 _: g
//if(i >= 4096)
) ~/ v y" W+ D9 c. s. t
// break;
0 s$ M2 [7 f+ A8 N% ?, W3 y, |
' I; g9 i2 p$ p
}
' [8 l! ?$ ~2 c) V1 f1 t
UARTPuts("\n",-2);
, O2 X4 ^6 J- A* A$ p; u" U7 t
}
9 T+ Y6 b$ A2 c0 ~0 d
}
# |6 h# ^ r) s3 H1 L
' n$ J' ?$ `2 F8 D: @
}
* x! G: n0 G5 |' K) c7 @+ ~
: u5 I3 j0 W% ]6 @0 e6 u
) X1 ?+ o7 _0 ^8 H
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ F. F, }9 c8 g" o: f0 r4 e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ k! [! |; p1 N% I' I
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4