嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, H, t4 m6 h/ B) u/ h# C J: g
Void UPP_TASK(Void)
3 N1 S* }3 Y" y6 H# j
{
0 |) [' p: Q d6 m2 K4 k
& n4 j) v: B( w
int i,j,k,target_int_count=2;
5 k4 R& D6 S0 g6 v' j1 r: k
char ch[2];
_$ a& o( }$ r" ~0 b
7 f- x7 M0 i: U+ y; a7 t
+ S) K2 d5 K# `! Z6 [% _. v5 C
0 {! R' Q3 A6 i8 Y2 i2 O' ?
upp_interrupt_count = 0;
e0 L. i, x, J8 B" r
upp_error_count = 0;
q$ D9 ^ ]# b- h6 O
5 A* \! u2 o. W2 x+ Y) o1 M$ F Z Y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( ?8 p# o8 B' ~
// Initialize data buffers
% S" e( @8 Z8 \. K
for (i = 0; i < upp_frame_size; i++)
9 ^6 N% ?* c1 I) S& ]8 g/ k
{
2 u! Y0 M# T; z
upp_buffer_b
=i;
8 H9 Z) m( ?$ ^* p
upp_buffer_a
= 0xDEAD;
9 X3 |6 T5 Q# }6 b. H# \
}
$ n) s% z0 l, s8 I
& I( H2 \9 { I9 ?8 f
//for(i=0;i<1024;i++)
# _- k- h8 ^% ?7 {1 c2 ?3 P& V
// temp
=0;
: Z8 y, z1 m$ b W
; P- b o5 J' o" U' J
//UPPReset();
5 o5 j8 ?/ R- P5 |/ b
/*启动UPP DMA传输*/
4 @8 s" G9 t$ O" }/ \* @# g7 ~" |
UARTPuts("upp_prog_dma_i\n",-2);
1 v$ V9 w) e& [& g% s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ i% k* O4 ^, s* O. H: v1 d
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ A$ `4 z% U6 [) l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) f5 L- @' _5 s% o
1 k; f3 W L; w, g
UARTPuts("upp_prog_dma_i\n",-2);
( R) c( w) o0 i* c8 s! L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& x- p9 v( x9 Y8 p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, l2 ^5 P. T; d% `5 t1 l6 K N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# |" F: i, L4 M8 E5 G
D' l/ s/ V; }
/*等待UPP传输完毕*/
W2 F% Z$ e1 }. c) x1 u3 {' c
//i=0;
+ P0 z# i- _+ ?# w1 K
//j=0;
! F1 n5 f# B* k) k( q( B4 n# H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) e" V; M' ^$ U
{
$ d; _1 \% H& w* W
/* 测试UPP传输的同时操作普通DDR数据
# U4 o2 t* I P) x
temp
=i;
& e8 o. I# ]# H. ^* x
i++;
r! C/ L1 b5 ?0 p' T8 B
if(i==1024)
4 R6 f. o; M' H
{
$ J+ r( M$ H& a' i/ w. H) w) @
i=0;
! H6 ?& k; X, Z( i! ~
j++;
v l3 e- A. G- l
}
9 t. }2 D6 p/ L1 N; ^& e: H; }
*/
9 @- A8 j; I7 B, V& E+ C! d
! U$ R5 T7 M$ X& F& c( u
asm(" nop");
( M9 b4 y9 j: u) b" d
0 T" _' f/ L# m7 M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& N% L" S( h0 N; h$ e! f$ L
}
* n, F% Q: v/ l, E' l# R
3 |5 H( _5 h- r4 n; p
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! A$ s) c1 V% o5 W
//UARTprintf( "i=%d\n",i);
) u$ |5 o8 P( w& F1 ~ Y
//UARTprintf( "j=%d\n",j);
6 x2 K+ a+ o0 `- W, F
UARTPuts("Data mismatch in buffers.\n",-2);
% k% w- K2 d# g5 m5 @
if (upp_interrupt_count == 2 && upp_error_count == 0)
) m! ?* h7 A: ^
{
. x$ W' o8 E' y% P0 o
for (i = 0; i<upp_frame_size; i++)
[8 C! y, Y* }. M: K& S" x# T
{
|8 c: i; D; s0 }$ d
if (upp_buffer_a
!= upp_buffer_b
)
# M9 F! ?% e, J) k5 V) L5 _! x( c
{
9 p# }% B8 ]% V( T0 X
upp_error_count++;
! Y( Z7 D6 Z- W/ ~8 O* ] z" Q6 h
}
( _& o: u" I& ~9 T: S
}
6 @4 B9 N, U {
}
+ c: y, p, W8 d# m
0 I9 k# E( w: u" d4 B- Q. `
/* 报告通信结果*/
5 r& ^! z* f! w+ Z" M# ?
if(upp_error_count != 0)
6 s+ e8 w/ D, Z. w( M2 Y5 Z6 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# O5 l7 J; ^+ U0 Y E1 |8 M
else
8 |% M. n8 U4 S+ G- ^% n. \
UARTPuts("uPP transfers complete!\n",-2);
$ m6 Q! \! I" W2 C
! G3 m8 B4 N8 m: M6 {0 ?0 c% _
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% v" W/ \; l" U# V8 a
UARTGets(ch,2);
# E6 T) H4 V a+ l2 E# ^+ v- H
UARTPuts("\n", -2);
; [3 K7 y( R* c' Q# t$ D
+ J& d4 l' e; j8 R
if(ch[0] == 'y')
# V+ a( X$ H: }9 D$ k- F. w6 h
{
; E4 ?3 \& N$ L: l l
/*打印全部读到的数据*/
3 u' Z2 D& R& f4 D0 Q
for(i=0; i<upp_frame_size; )
7 ?$ a0 |5 N& _5 f4 p
{
. |5 t$ Q8 Y: n
for(j=0; j<5; j++)
/ _5 [4 M6 r! E& }. _
{
7 W4 f7 b/ {( H' |! I" t
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) \/ C7 T9 V0 E" j
i++;
9 e1 [' H/ a) _" \! ~3 M1 D0 k" U
//if(i >= 4096)
$ B4 d' K8 G' O; G# i# _& ~
// break;
, S- o# K) h! M3 |+ N. @
% [ e# f# f! e& U
}
% e7 x& |9 o. V$ F, M& H
UARTPuts("\n",-2);
8 i2 \: t# S4 i5 x8 Q
}
& a: [( C( ?3 o6 B3 }! \
}
* p+ `+ t: p+ {
0 S' S" E; \. j$ w5 K. I
}
* u$ M: }8 H2 A X* M+ g x
' v; \, c' J3 h) F1 ^9 j
" L: `1 p h* C7 ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! U9 Q g( d7 v4 t/ I2 W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: o( D) E3 }; L" @4 a# T( N2 t1 J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4