嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 R* [, B1 S' ^0 D
Void UPP_TASK(Void)
: z+ t- W6 f" j" X$ y- ?. f
{
% f+ g* Y1 t9 q& d1 s0 _ E# V" ^) C+ A. t
8 j' Q8 r+ c1 @0 W
int i,j,k,target_int_count=2;
; b5 I A" e( n3 |' [& ]
char ch[2];
& X0 A$ Q/ I; T$ p5 |3 b! R
/ Z- U5 x f7 w- |& t! u0 d d2 Q
* S% S: ]8 M" ]# n+ {
$ ~! z" R' m$ J6 T
upp_interrupt_count = 0;
9 r9 D, E- c2 N) Z8 G& O8 ]
upp_error_count = 0;
, j0 T" O7 q. V+ d# Q& f! m1 X
5 q) S' L0 l K, p. F1 v* Z* N
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 X+ n7 @: ]* z W
// Initialize data buffers
e1 _* A* t6 Z
for (i = 0; i < upp_frame_size; i++)
) D7 P( ?; z6 o9 j
{
* W" j2 L: I" }# w$ z% P7 r& _
upp_buffer_b
=i;
, q6 ~, u& G# h* \, r* Q( z5 S! V
upp_buffer_a
= 0xDEAD;
3 U7 _6 t, S. Y% |# T" ?3 B+ y( t& g
}
! O* g S+ R# |* ?+ @, ~2 K
1 @2 t+ q. D+ K4 F, g' R! D5 A; j
//for(i=0;i<1024;i++)
& g" h0 r" H" `+ U& K
// temp
=0;
% g' X+ t4 H' |1 y" d# K
" G3 }9 G$ d! @+ J& Z
//UPPReset();
/ c8 s9 C( X* { j* f
/*启动UPP DMA传输*/
! D& w6 t3 K+ ? V8 H0 w
UARTPuts("upp_prog_dma_i\n",-2);
- l0 Q2 z0 ]! L
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 k( z' M1 A' K: S, i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# L' I( z; @2 C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' C$ v4 y4 n, {
1 C2 _( c0 A. k9 x+ p
UARTPuts("upp_prog_dma_i\n",-2);
0 ~* R- F( V" o1 ?7 `5 n, u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. H) M! H1 z& S5 z: _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% W$ s# `5 V" M% g: Q5 G. h5 [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 G# P ]7 m: k& V7 z5 R
- {; N& z; K8 h- U
/*等待UPP传输完毕*/
& `' Y4 ?* z: i1 c
//i=0;
- e9 e% I2 m; b" U1 Q% `2 l
//j=0;
2 C* q3 H; X( d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ _4 n/ n% s+ p2 P* l
{
8 Z& _0 T3 y( z" H. E
/* 测试UPP传输的同时操作普通DDR数据
8 t# c7 y4 t4 j) Y: Y$ }" C
temp
=i;
/ t, I: E: x/ n
i++;
C7 |, ^% K) c- _$ ]2 U7 |
if(i==1024)
% G8 p7 b6 R- y& r* i4 N
{
. s, Y9 {6 G* s' A/ y
i=0;
6 l$ Q7 M4 |/ ^- v! G' P1 }
j++;
0 p2 n n) l9 a e
}
6 ^: k! f, l- z' _
*/
) W, w# c% ` F0 w
% L2 G$ u. O! i& \2 H1 L( o
asm(" nop");
) U$ I5 o7 U" a; B1 k7 q9 w! Y
- \! u* _; l; _; @/ A" y8 v6 f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# l) f/ M% U( |$ D+ D: y
}
. @7 ?' |" m9 z$ ]2 I7 q6 J
3 S% G4 Z0 Q+ J( `) D( ~: ?1 q& g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# Z% h) M& E9 B, v1 k1 o
//UARTprintf( "i=%d\n",i);
9 D2 W3 R! d. t2 M
//UARTprintf( "j=%d\n",j);
+ N4 B5 `9 ~2 D* X9 s- ~
UARTPuts("Data mismatch in buffers.\n",-2);
4 \$ p$ i9 T. H
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ y- e- j) s# T9 b, d
{
. m1 y2 s2 x9 t' \$ T. C
for (i = 0; i<upp_frame_size; i++)
0 `0 u5 H4 h# L+ r& q6 N7 k
{
6 _0 \1 i1 |8 W, J+ D0 ~, I3 T
if (upp_buffer_a
!= upp_buffer_b
)
; m9 ^9 k3 Y1 n% h0 ?; }
{
' W8 V0 B' T% A
upp_error_count++;
; }4 w$ J* {' m3 }6 g5 c/ P
}
' p$ y) H7 y% M5 c d0 W
}
3 b* ]) V% H7 u1 B! I
}
- F7 g3 U/ {5 w' G `. U% |5 {
* I$ L( w" M- h6 @% L
/* 报告通信结果*/
' {0 c/ T O6 Q) F: W
if(upp_error_count != 0)
/ Q! L5 p* I; N/ X' s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& B% X' P3 w4 ~1 @( \/ h( I3 f
else
$ K0 U6 r. Q. @" d
UARTPuts("uPP transfers complete!\n",-2);
H& j4 D/ }. q
9 F/ E- M( v- L% N; J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 E! w3 k8 Y! ^
UARTGets(ch,2);
6 n3 s. n. s) ~: U }/ I1 C
UARTPuts("\n", -2);
& e3 n$ e3 \; X+ W
: x* t F: W$ u
if(ch[0] == 'y')
3 s0 j6 X/ p, r! ]1 W
{
% v8 h2 Y7 P5 T$ s
/*打印全部读到的数据*/
% |; C. Z$ q) t9 d! g# E; e
for(i=0; i<upp_frame_size; )
/ a& Q/ q6 B2 Y
{
" N S' m; Y3 ~5 [& y! ?0 P. _
for(j=0; j<5; j++)
- |% Z, S5 E) h# X* T3 s* z- C
{
. D$ U" F$ K+ n& E8 f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% }, E: z/ {" S4 E
i++;
2 _: G! S) b6 z* j% s( `
//if(i >= 4096)
7 Z' E; S: w( C, f( ?! v
// break;
: p# Z2 H3 u+ z( @) U
( b$ u+ p. j$ w& W% u
}
1 c# u6 M' A3 B7 N5 X
UARTPuts("\n",-2);
% {7 n+ N( U# x% j
}
N E2 M% b( A8 k4 g) y- ^! T9 n$ N
}
1 [, M. Z! u$ ?3 {9 h0 Y* M
+ r& {% }% ~: U' m- c
}
: O! y- K9 P& e4 b
7 e: m: ]) }0 L+ f& t4 a
. |! k2 R, o% o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 C* `% |+ D+ ^% g. S) l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, k! O! H" T$ |3 T' x
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4